From 056dced9238126db034cf3542c9e0969d105a0d0 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 17 Nov 2014 22:17:48 +1100 Subject: [PATCH] (MESS) gamecom : fixed calculator --- src/emu/cpu/sm8500/sm85ops.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/emu/cpu/sm8500/sm85ops.h b/src/emu/cpu/sm8500/sm85ops.h index 06251975c26..6c9c45a7b07 100644 --- a/src/emu/cpu/sm8500/sm85ops.h +++ b/src/emu/cpu/sm8500/sm85ops.h @@ -63,8 +63,8 @@ } \ break; \ case 0xC0: \ - s2 = mem_readword( sm8500_b2w[r1 & 0x07] ); \ - mem_writeword( sm8500_b2w[r1 & 0x07], s2 - 1 ); \ + s2 = mem_readword( sm8500_b2w[r1 & 0x07])-1; \ + mem_writeword( sm8500_b2w[r1 & 0x07], s2 ); \ break; \ } \ r2 = r1; \ @@ -1270,12 +1270,16 @@ case 0x59: /* Invalid - 2? cycles - Flags affected: --------? */ mycycles += 2; break; case 0x5A: /* unk5A - 7,8,12,9,8 cycles */ -logerror( "%04X: unk%02x\n", m_PC-1,op ); - ARG_ad16; + logerror( "%04X: unk%02x\n", m_PC-1,op ); +/* NOTE: This unknown command is used in the calculator as a compare instruction + at 0x493A and 0x4941, we set the flags on the 3rd byte, although its real + function remains a mystery */ + ARG_iR; + OP_CMP8( 0, r1 ); mycycles += 7; break; case 0x5B: /* unk5B - 6,7,11,8,7 cycles */ -logerror( "%04X: unk%02x\n", m_PC-1,op ); + logerror( "%04X: unk%02x\n", m_PC-1,op ); /* NOTE: This unknown command is used in several carts, the code below allows those carts to boot */ ARG_iR; r1 = r2 & 7;