diff --git a/c4emu.cpp b/c4emu.cpp index a0dfcca3..708acabd 100644 --- a/c4emu.cpp +++ b/c4emu.cpp @@ -1021,7 +1021,8 @@ void S9xSetC4 (uint8 byte, uint16 Address) if (Memory.C4RAM[0x1f4d] != 0x0e) printf("$7f4d=%02x, expected 0e for command 54 %02x\n", Memory.C4RAM[0x1f4d], Memory.C4RAM[0x1f4d]); #endif - int64 a = SAR((int64) READ_3WORD(Memory.C4RAM + 0x1f80) << 40, 40); + int64 a = (int64)READ_3WORD(Memory.C4RAM + 0x1f80); + a |= 0xffffffffff000000 * ((a >> 23) & 1); //printf("%08X%08X\n", (uint32) (a>>32), (uint32) (a&0xFFFFFFFF)); a *= a; //printf("%08X%08X\n", (uint32) (a>>32), (uint32) (a&0xFFFFFFFF));