X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/d3938806a2b49df44ac55ea4b2a43c6a3f15011d..1e03e0219589e33a57c34046428f09b9228c99b4:/GBZ80Core.v diff --git a/GBZ80Core.v b/GBZ80Core.v index 3e15ebf..75f9722 100644 --- a/GBZ80Core.v +++ b/GBZ80Core.v @@ -34,6 +34,7 @@ `define INSN_LDx_AHL 8'b001xx010 // LDD/LDI A,(HL) / (HL),A `define INSN_ALU8 8'b10xxxxxx // 10 xxx yyy `define INSN_NOP 8'b00000000 +`define INSN_RST 8'b11xxx111 `define INSN_reg_A 3'b111 `define INSN_reg_B 3'b000 @@ -338,6 +339,26 @@ module GBZ80Core( `EXEC_NEWCYCLE; `EXEC_INC_PC; end + `INSN_RST: begin + case (cycle) + 0: begin + wr <= 1; + address <= {registers[`REG_SPH],registers[`REG_SPL]}-1; + wdata <= registers[`REG_PCH]; + end + 1: begin + wr <= 1; + address <= {registers[`REG_SPH],registers[`REG_SPL]}-2; + wdata <= registers[`REG_PCL]; + end + 2: begin /* wee */ end + 3: begin + `EXEC_NEWCYCLE; + {registers[`REG_PCH],registers[`REG_PCL]} <= + {10'b0,opcode[5:3],3'b0}; + end + endcase + end default: $stop; endcase @@ -563,6 +584,18 @@ module GBZ80Core( end end `INSN_NOP: begin /* NOP! */ end + `INSN_RST: begin + case (cycle) + 0: cycle <= 1; + 1: cycle <= 2; + 2: cycle <= 3; + 3: begin + cycle <= 0; + {registers[`REG_SPH],registers[`REG_SPL]} <= + {registers[`REG_SPH],registers[`REG_SPL]}-2; + end + endcase + end endcase state <= `STATE_FETCH; end