From f8db64484a25b6970acb75b35188efd7089e572a Mon Sep 17 00:00:00 2001 From: Joshua Wise <joshua@rebirth.joshuawise.com> Date: Sat, 5 Apr 2008 00:34:42 -0400 Subject: [PATCH] Cut 1 at interrupt support for CPU --- FPGABoy.ise | Bin 240410 -> 240439 bytes GBZ80Core.v | 60 +++++++++++++++++++++++++++++++++++++++++++++++++--- System.v | 18 ++++++++++------ 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/FPGABoy.ise b/FPGABoy.ise index 227845500b0c7f94cfbe06aa62cec21e47c4f84e..3562e2939347135378f2138caa6b9fb7e0726134 100644 GIT binary patch delta 12997 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 b5x-pH($Qr`{!Gi&H7-%@mA)THd+PrIDXio; delta 12992 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 ZT5HA>Ov}%kWP4WY7SlrG{)yDT{|BAbpe6tS diff --git a/GBZ80Core.v b/GBZ80Core.v index 095d9e8..57c22d2 100644 --- a/GBZ80Core.v +++ b/GBZ80Core.v @@ -46,6 +46,9 @@ `define INSN_JR_imm 8'b00011000 `define INSN_JRCC_imm 8'b001xx000 `define INSN_INCDEC16 8'b00xxx011 +`define INSN_VOP_INTR 8'b11111100 // 0xFC is grabbed by the fetch if there is an interrupt pending. +`define INSN_DI 8'b11110011 +`define INSN_EI 8'b11111011 `define INSN_cc_NZ 2'b00 `define INSN_cc_Z 2'b01 @@ -89,7 +92,8 @@ module GBZ80Core( input clk, output reg [15:0] busaddress = 0, /* BUS_* is latched on STATE_FETCH. */ inout [7:0] busdata, - output reg buswr = 0, output reg busrd = 0); + output reg buswr = 0, output reg busrd = 0, + input irq, input [7:0] jaddr); reg [1:0] state = 0; /* State within this bus cycle (see STATE_*). */ reg [2:0] cycle = 0; /* Cycle for instructions. */ @@ -108,7 +112,7 @@ module GBZ80Core( reg [7:0] buswdata; assign busdata = buswr ? buswdata : 8'bzzzzzzzz; - reg ie = 0; + reg ie = 0, iedelay = 0; initial begin registers[ 0] <= 0; @@ -129,6 +133,10 @@ module GBZ80Core( newcycle <= 1; state <= 0; cycle <= 0; + busrd <= 0; + buswr <= 0; + busaddress <= 0; + iedelay <= 0; end always @(posedge clk) @@ -149,7 +157,10 @@ module GBZ80Core( end `STATE_DECODE: begin if (newcycle) begin - opcode <= busdata; + if (ie && irq) + opcode <= `INSN_VOP_INTR; + else + opcode <= busdata; rdata <= busdata; newcycle <= 0; cycle <= 0; @@ -157,6 +168,10 @@ module GBZ80Core( if (rd) rdata <= busdata; cycle <= cycle + 1; end + if (iedelay) begin + ie <= 1; + iedelay <= 0; + end buswr <= 0; busrd <= 0; wr <= 0; @@ -552,6 +567,31 @@ module GBZ80Core( end endcase end + `INSN_VOP_INTR: begin + case (cycle) + 0: begin + address <= {registers[`REG_SPH],registers[`REG_SPL]} - 1; + wdata <= registers[`REG_PCH]; + wr <= 1; + end + 1: begin + address <= {registers[`REG_SPH],registers[`REG_SPL]} - 2; + wdata <= registers[`REG_PCL]; + wr <= 1; + end + 2: begin + `EXEC_NEWCYCLE; + end + endcase + end + `INSN_DI: begin + `EXEC_NEWCYCLE; + `EXEC_INC_PC; + end + `INSN_EI: begin + `EXEC_NEWCYCLE; + `EXEC_INC_PC; + end default: $stop; endcase @@ -896,6 +936,20 @@ module GBZ80Core( end endcase end + `INSN_VOP_INTR: begin + case (cycle) + 0: begin end + 1: {registers[`REG_SPH],registers[`REG_SPL]} + <= {registers[`REG_SPH],registers[`REG_SPL]} - 2; + 2: begin + ie <= 0; + {registers[`REG_PCH],registers[`REG_PCL]} <= + {8'b0,jaddr}; + end + endcase + end + `INSN_DI: ie <= 0; + `INSN_EI: iedelay <= 1; default: $stop; endcase diff --git a/System.v b/System.v index 8b8d613..7319ebf 100644 --- a/System.v +++ b/System.v @@ -76,13 +76,18 @@ module CoreTop( wire [15:0] addr; wire [7:0] data; wire wr, rd; + + wire irq, tmrirq; + wire [7:0] jaddr; GBZ80Core core( .clk(clk), .busaddress(addr), .busdata(data), .buswr(wr), - .busrd(rd)); + .busrd(rd), + .irq(irq), + .jaddr(jaddr)); ROM rom( .address(addr), @@ -125,8 +130,6 @@ module CoreTop( .wr(wr), .rd(rd)); - wire irq, tmrirq; - wire [7:0] jaddr; Timer tmr( .clk(clk), .wr(wr), @@ -156,6 +159,9 @@ module TestBench(); wire [7:0] data; wire wr, rd; + wire irq, tmrirq; + wire [7:0] jaddr; + // wire [7:0] leds; // wire [7:0] switches; @@ -165,7 +171,9 @@ module TestBench(); .busaddress(addr), .busdata(data), .buswr(wr), - .busrd(rd)); + .busrd(rd), + .irq(irq), + .jaddr(jaddr)); ROM rom( .clk(clk), @@ -190,8 +198,6 @@ module TestBench(); .rd(rd), .serial(serio)); - wire irq, tmrirq; - wire [7:0] jaddr; Timer tmr( .clk(clk), .wr(wr), -- 2.43.0