Emulator: Implement 16-bit DEC opcode
This commit is contained in:
+39
-1
@@ -72,24 +72,28 @@ void CPU::update()
|
|||||||
case 0x06: ldi8(); break;
|
case 0x06: ldi8(); break;
|
||||||
case 0x08: ldr16(); break;
|
case 0x08: ldr16(); break;
|
||||||
case 0x0a: ldr8(); break;
|
case 0x0a: ldr8(); break;
|
||||||
|
case 0x0b: decr16(); break;
|
||||||
case 0x0d: dec8(); break;
|
case 0x0d: dec8(); break;
|
||||||
case 0x0e: ldi8(); break;
|
case 0x0e: ldi8(); break;
|
||||||
case 0x11: ldi16(); break;
|
case 0x11: ldi16(); break;
|
||||||
case 0x12: ldr8(); break;
|
case 0x12: ldr8(); break;
|
||||||
case 0x16: ldi8(); break;
|
case 0x16: ldi8(); break;
|
||||||
case 0x1a: ldr8(); break;
|
case 0x1a: ldr8(); break;
|
||||||
|
case 0x1b: decr16(); break;
|
||||||
case 0x1e: ldi8(); break;
|
case 0x1e: ldi8(); break;
|
||||||
case 0x20: jr8(); break;
|
case 0x20: jr8(); break;
|
||||||
case 0x21: ldi16(); break;
|
case 0x21: ldi16(); break;
|
||||||
case 0x22: ldr8(); break;
|
case 0x22: ldr8(); break;
|
||||||
case 0x26: ldi8(); break;
|
case 0x26: ldi8(); break;
|
||||||
case 0x2a: ldr8(); break;
|
case 0x2a: lda8(); break;
|
||||||
|
case 0x2b: decr16(); break;
|
||||||
case 0x2e: ldi8(); break;
|
case 0x2e: ldi8(); break;
|
||||||
case 0x2f: misc(); break;
|
case 0x2f: misc(); break;
|
||||||
case 0x31: ldi16(); break;
|
case 0x31: ldi16(); break;
|
||||||
case 0x32: ldr8(); break;
|
case 0x32: ldr8(); break;
|
||||||
case 0x36: ldi8(); break;
|
case 0x36: ldi8(); break;
|
||||||
case 0x3a: ldr8(); break;
|
case 0x3a: ldr8(); break;
|
||||||
|
case 0x3b: decr16(); break;
|
||||||
case 0x3e: ldi8(); break;
|
case 0x3e: ldi8(); break;
|
||||||
case 0x40: ldr8(); break;
|
case 0x40: ldr8(); break;
|
||||||
case 0x41: ldr8(); break;
|
case 0x41: ldr8(); break;
|
||||||
@@ -170,6 +174,8 @@ void CPU::update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------
|
||||||
|
|
||||||
void CPU::add()
|
void CPU::add()
|
||||||
{
|
{
|
||||||
uint8_t opcode = pcRead();
|
uint8_t opcode = pcRead();
|
||||||
@@ -279,6 +285,38 @@ void CPU::lda8()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPU::decr16()
|
||||||
|
{
|
||||||
|
uint8_t opcode = pcRead();
|
||||||
|
switch (opcode) {
|
||||||
|
case 0x0b: { // DEC BC
|
||||||
|
uint32_t data = (bc() - 1) & 0xffff;
|
||||||
|
m_c = data & 0xff;
|
||||||
|
m_b = data >> 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x1b: { // DEC DE
|
||||||
|
uint32_t data = (de() - 1) & 0xffff;
|
||||||
|
m_e = data & 0xff;
|
||||||
|
m_d = data >> 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x2b: { // DEC HL
|
||||||
|
uint32_t data = (hl() - 1) & 0xffff;
|
||||||
|
m_l = data & 0xff;
|
||||||
|
m_h = data >> 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x3b: /* DEC SP */ m_sp = (m_sp - 1) & 0xffff; break;
|
||||||
|
default:
|
||||||
|
VERIFY_NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_wait_cycles += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------
|
||||||
|
|
||||||
void CPU::ldi8()
|
void CPU::ldi8()
|
||||||
{
|
{
|
||||||
uint8_t opcode = pcRead();
|
uint8_t opcode = pcRead();
|
||||||
|
|||||||
Reference in New Issue
Block a user