+// If opcode[4], then ld A, x, else ld x, A
+// If opcode[1], then ld 16m8, else ld 8m8
+
+`ifdef EXECUTE
+ `INSN_LDM_A: begin
+ case (cycle)
+ 0: begin
+ `EXEC_INC_PC
+ `EXEC_READ(`_PC + 16'h0001)
+ end
+ 1: begin
+ `EXEC_INC_PC // we only hit here if 16m8
+ `EXEC_READ(`_PC + 16'h0001)
+ end
+ 2: if (opcode[4]) // LD A,x
+ `EXEC_READ(({tmp, tmp2}))
+ else
+ `EXEC_WRITE(({tmp, tmp2}), `_A)
+ 3: begin
+ `EXEC_NEWCYCLE
+ `EXEC_INC_PC
+ end
+ endcase
+ end
+`endif
+
+`ifdef WRITEBACK
+ `INSN_LDM_A: begin
+ case (cycle)
+ 0: if (!opcode[1]) begin
+ tmp <= 8'hFF;
+ cycle <= 1; /* Skip cycle 1 */
+ end
+ 1: tmp2 <= rdata;
+ 2: if (opcode[1])
+ tmp2 <= rdata;
+ else
+ tmp <= rdata;
+ 3: if (opcode[4]) `_A <= rdata;
+ endcase
+ end
+`endif
+