diff --git a/src/devices/cpu/sm510/sm590.h b/src/devices/cpu/sm510/sm590.h index bf3cf49f7d7..943a41e6297 100644 --- a/src/devices/cpu/sm510/sm590.h +++ b/src/devices/cpu/sm510/sm590.h @@ -108,7 +108,7 @@ protected: // opcode handlers // 00-3f - // adx (same as sm510) + virtual void op_adx() override; virtual void op_tax(); virtual void op_lblx(); // lax (same as sm510) diff --git a/src/devices/cpu/sm510/sm590op.cpp b/src/devices/cpu/sm510/sm590op.cpp index 3d116a436fd..99b1c7189b7 100644 --- a/src/devices/cpu/sm510/sm590op.cpp +++ b/src/devices/cpu/sm510/sm590op.cpp @@ -16,10 +16,12 @@ void sm590_device::do_branch(u8 pu, u8 pm, u8 pl) // instruction set -void sm590_device::op_lblx() +void sm590_device::op_adx() { - // LBL x: load BL with 4-bit immediate value - m_bl = (m_op & 0xf); + // ADX x: add immediate value to ACC, skip next on carry + m_acc += (m_op & 0xf); + m_skip = bool(m_acc & 0x10); + m_acc &= 0xf; } void sm590_device::op_tax() @@ -28,6 +30,12 @@ void sm590_device::op_tax() m_skip = (m_acc == (m_op & 0xf)); } +void sm590_device::op_lblx() +{ + // LBL x: load BL with 4-bit immediate value + m_bl = (m_op & 0xf); +} + void sm590_device::op_lda() { // LDA: load ACC with RAM