+ 2: cycle <= 0;
+ endcase
+ `INSN_HALT: begin
+ /* Nothing needs happen here. */
+ /* XXX Interrupts needed for HALT. */
+ end
+ `INSN_LD_HL_reg: begin
+ case (cycle)
+ 0: cycle <= 1;
+ 1: cycle <= 0;
+ endcase
+ end
+ `INSN_LD_reg_HL: begin
+ case (cycle)
+ 0: cycle <= 1;
+ 1: begin
+ case (opcode[5:3])
+ `INSN_reg_A: begin registers[`REG_A] <= tmp; end
+ `INSN_reg_B: begin registers[`REG_B] <= tmp; end
+ `INSN_reg_C: begin registers[`REG_C] <= tmp; end
+ `INSN_reg_D: begin registers[`REG_D] <= tmp; end
+ `INSN_reg_E: begin registers[`REG_E] <= tmp; end
+ `INSN_reg_H: begin registers[`REG_H] <= tmp; end
+ `INSN_reg_L: begin registers[`REG_L] <= tmp; end
+ endcase
+ cycle <= 0;
+ end
+ endcase
+ end
+ `INSN_LD_reg_reg: begin
+ case (opcode[5:3])
+ `INSN_reg_A: begin registers[`REG_A] <= tmp; end
+ `INSN_reg_B: begin registers[`REG_B] <= tmp; end
+ `INSN_reg_C: begin registers[`REG_C] <= tmp; end
+ `INSN_reg_D: begin registers[`REG_D] <= tmp; end
+ `INSN_reg_E: begin registers[`REG_E] <= tmp; end
+ `INSN_reg_H: begin registers[`REG_H] <= tmp; end
+ `INSN_reg_L: begin registers[`REG_L] <= tmp; end
+ endcase
+ end
+ `INSN_LD_reg_imm16: begin
+ case (cycle)
+ 0: cycle <= 1;
+ 1: begin
+ case (opcode[5:4])
+ `INSN_reg16_BC: registers[`REG_C] <= rdata;
+ `INSN_reg16_DE: registers[`REG_E] <= rdata;
+ `INSN_reg16_HL: registers[`REG_L] <= rdata;
+ `INSN_reg16_SP: registers[`REG_SPL] <= rdata;
+ endcase
+ cycle <= 2;
+ end
+ 2: begin
+ case (opcode[5:4])
+ `INSN_reg16_BC: registers[`REG_B] <= rdata;
+ `INSN_reg16_DE: registers[`REG_D] <= rdata;
+ `INSN_reg16_HL: registers[`REG_H] <= rdata;
+ `INSN_reg16_SP: registers[`REG_SPH] <= rdata;
+ endcase
+ cycle <= 0;
+ end
+ endcase
+ end
+ `INSN_LD_SP_HL: begin
+ case (cycle)
+ 0: begin
+ cycle <= 1;
+ registers[`REG_SPH] <= tmp;
+ end
+ 1: begin
+ cycle <= 0;
+ registers[`REG_SPL] <= tmp;
+ end
+ endcase
+ end