From 027d190447850e257facafbdeee6bfa88e13c369 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 21 May 2016 11:08:45 +1000 Subject: [PATCH] gamecom: fix for MULT instructions. --- src/devices/cpu/sm8500/sm85ops.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/devices/cpu/sm8500/sm85ops.h b/src/devices/cpu/sm8500/sm85ops.h index 20f31cbcd7f..4ba4dab24bd 100644 --- a/src/devices/cpu/sm8500/sm85ops.h +++ b/src/devices/cpu/sm8500/sm85ops.h @@ -1147,17 +1147,19 @@ case 0x4B: /* MOVW RRr,ww - 9 cycles - Flags affected: -------- */ mycycles += 9; break; case 0x4C: /* MULT Rrr,Rs - 24 cycles - Flags affected: -Z-0---- */ + // operation is not known if r1 is odd, assuming same as even for now ARG_RR; - res = mem_readword( r1 ) * mem_readbyte( r2 ); - mem_writeword( r1, res & 0xFFFF ); + res = mem_readbyte( r1 | 1 ) * mem_readbyte( r2 ); + mem_writeword( r1 & 0xfe, res & 0xFFFF ); m_PS1 = m_PS1 & ~ ( FLAG_Z | FLAG_V ); m_PS1 |= ( ( res & 0xFFFF ) == 0x00 ? FLAG_Z : 0 ); mycycles += 24; break; case 0x4D: /* MULT RRr,i - 24 cycles - Flags affected: -Z-0---- */ + // operation is not known if r1 is odd, assuming same as even for now ARG_iR; - res = mem_readbyte( r1 + 1 ) * r2; - mem_writeword( r1, res & 0xFFFF ); + res = mem_readbyte( r1 | 1 ) * r2; + mem_writeword( r1 & 0xfe, res & 0xFFFF ); m_PS1 = m_PS1 & ~ ( FLAG_Z | FLAG_V ); m_PS1 |= ( ( res & 0xFFFF ) == 0x00 ? FLAG_Z : 0 ); mycycles += 24;