+ `INSN_LDH_AC: begin
+ case (cycle)
+ 0: begin
+ address <= {8'hFF,registers[`REG_C]};
+ if (opcode[4]) begin // LD A,(C)
+ rd <= 1;
+ end else begin
+ wr <= 1;
+ wdata <= registers[`REG_A];
+ end
+ end
+ 1: begin
+ `EXEC_NEWCYCLE;
+ `EXEC_INC_PC;
+ end
+ endcase
+ end
+ `INSN_LDx_AHL: begin
+ case (cycle)
+ 0: begin
+ address <= {registers[`REG_H],registers[`REG_L]};
+ if (opcode[3]) begin // LDx A, (HL)
+ rd <= 1;
+ end else begin
+ wr <= 1;
+ wdata <= registers[`REG_A];
+ end
+ end
+ 1: begin
+ `EXEC_NEWCYCLE;
+ `EXEC_INC_PC;
+ end
+ endcase
+ end
+ `INSN_ALU8: begin
+ if ((opcode[2:0] == `INSN_reg_dHL) && (cycle == 0)) begin
+ // fffffffff fuck your shit, read from (HL) :(
+ rd <= 1;
+ address <= {registers[`REG_H], registers[`REG_L]};
+ end else begin
+ `EXEC_NEWCYCLE;
+ `EXEC_INC_PC;
+ case (opcode[2:0])
+ `INSN_reg_A: begin tmp <= registers[`REG_A]; end
+ `INSN_reg_B: begin tmp <= registers[`REG_B]; end
+ `INSN_reg_C: begin tmp <= registers[`REG_C]; end
+ `INSN_reg_D: begin tmp <= registers[`REG_D]; end
+ `INSN_reg_E: begin tmp <= registers[`REG_E]; end
+ `INSN_reg_H: begin tmp <= registers[`REG_H]; end
+ `INSN_reg_L: begin tmp <= registers[`REG_L]; end
+ `INSN_reg_dHL: begin tmp <= rdata; end
+ endcase
+ end
+ end