Browse Source

Emulator: Add opcodes $2/$12/$22/$32

master
Riyyi 2 years ago
parent
commit
5035b26f8a
  1. 42
      src/cpu.cpp

42
src/cpu.cpp

@ -62,10 +62,14 @@ void CPU::update()
switch (opcode) { switch (opcode) {
case 0x01: ld16(); break; case 0x01: ld16(); break;
case 0x02: ld8(); break;
case 0x08: ld16(); break; case 0x08: ld16(); break;
case 0x11: ld16(); break; case 0x11: ld16(); break;
case 0x12: ld8(); break;
case 0x21: ld16(); break; case 0x21: ld16(); break;
case 0x22: ld8(); break;
case 0x31: ld16(); break; case 0x31: ld16(); break;
case 0x32: ld8(); break;
case 0x3e: ld8(); break; case 0x3e: ld8(); break;
case 0xc3: jp16(); break; case 0xc3: jp16(); break;
case 0xc6: add(); break; case 0xc6: add(); break;
@ -111,6 +115,44 @@ void CPU::ld8()
{ {
uint8_t opcode = read(m_pc++); uint8_t opcode = read(m_pc++);
switch (opcode) { switch (opcode) {
case 0x02:
// LD (BC),A
m_wait_cycles += 8;
write(bc(), m_a);
break;
case 0x12:
// LD (DE),A
m_wait_cycles += 8;
write(de(), m_a);
break;
case 0x22: {
// LD (HL+),A == LD (HLI),A == LDI (HL),A
m_wait_cycles += 8;
// Put A into memory address in HL
uint32_t address = hl();
write(address, m_a);
// Increment HL
address = (address + 1) & 0xffff;
m_l = address & 0x00ff;
m_h = address >> 8;
break;
}
case 0x32: {
// LD (HL-),A == LD (HLD),A == LDD (HL),A
m_wait_cycles += 8;
// Put A into memory address in hl
uint32_t address = hl();
write(address, m_a);
// Decrement HL
address = (address - 1) & 0xffff;
m_l = address & 0x00ff;
m_h = address >> 8;
break;
}
case 0x3e: case 0x3e:
// LD A,n // LD A,n
m_wait_cycles += 8; m_wait_cycles += 8;

Loading…
Cancel
Save