diff --git a/src/emu/cpu/m6809/konami.c b/src/emu/cpu/m6809/konami.c index 28adab0b508..01abfa12cbf 100644 --- a/src/emu/cpu/m6809/konami.c +++ b/src/emu/cpu/m6809/konami.c @@ -248,6 +248,22 @@ template T konami_cpu_device::safe_shift_right(T value, UINT32 shift) } +//------------------------------------------------- +// safe_shift_right_unsigned +//------------------------------------------------- + +template T konami_cpu_device::safe_shift_right_unsigned(T value, UINT32 shift) +{ + T result; + + if (shift < (sizeof(T) * 8)) + result = value >> shift; + else + result = 0; + + return result; +} + //------------------------------------------------- // safe_shift_left //------------------------------------------------- diff --git a/src/emu/cpu/m6809/konami.h b/src/emu/cpu/m6809/konami.h index 3b8abf0d8f0..200762ab8e7 100644 --- a/src/emu/cpu/m6809/konami.h +++ b/src/emu/cpu/m6809/konami.h @@ -67,6 +67,7 @@ private: // miscellaneous template T safe_shift_right(T value, UINT32 shift); + template T safe_shift_right_unsigned(T value, UINT32 shift); template T safe_shift_left(T value, UINT32 shift); void set_lines(UINT8 data); void execute_one(); diff --git a/src/emu/cpu/m6809/konami.ops b/src/emu/cpu/m6809/konami.ops index 8f642084b05..2c71759f565 100644 --- a/src/emu/cpu/m6809/konami.ops +++ b/src/emu/cpu/m6809/konami.ops @@ -517,7 +517,7 @@ LSRD: else m_cc &= ~CC_C; - m_d.w = set_flags(CC_NZ, safe_shift_right(m_d.w, m_temp.b.l)); + m_d.w = set_flags(CC_NZ, safe_shift_right_unsigned(m_d.w, m_temp.b.l)); } eat(1); return;