From 4a700f1019cc29a4ee7ec2eb6b23d8f3267fc5ec Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Tue, 30 Jun 2015 20:56:19 +0300 Subject: [PATCH] Truncate to 8-bits, bget in some situations can return upper bit(s) set. --- gencpu.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gencpu.cpp b/gencpu.cpp index 65ead649..21500c42 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -3410,11 +3410,11 @@ static void gen_opcode (unsigned int opcode) printf ("\tuaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword (0)); genamode (curi, curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0); if (curi->size == sz_word) { - printf ("\tuae_u16 val = (%s (memp) << 8) + %s (memp + 2);\n", srcb, srcb); + printf ("\tuae_u16 val = ((%s (memp) & 0xff) << 8) + (%s (memp + 2) & 0xff);\n", srcb, srcb); count_read += 2; } else { - printf ("\tuae_u32 val = (%s (memp) << 24) + (%s (memp + 2) << 16)\n", srcb, srcb); - printf (" + (%s (memp + 4) << 8) + %s (memp + 6);\n", srcb, srcb); + printf ("\tuae_u32 val = ((%s (memp) & 0xff) << 24) + ((%s (memp + 2) & 0xff) << 16)\n", srcb, srcb); + printf (" + ((%s (memp + 4) & 0xff) << 8) + (%s (memp + 6) & 0xff);\n", srcb, srcb); count_read += 4; } fill_prefetch_next (); @@ -5061,9 +5061,9 @@ bccl_not68020: printf ("\tuae_u16 val;\n"); addmmufixup ("srcreg"); printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n"); - printf ("\tval = (uae_u16)%s (m68k_areg (regs, srcreg));\n", srcb); + printf ("\tval = (uae_u16)(%s (m68k_areg (regs, srcreg)) & 0xff);\n", srcb); printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n"); - printf ("\tval = (val | ((uae_u16)%s (m68k_areg (regs, srcreg)) << 8)) + %s;\n", srcb, gen_nextiword (0)); + printf ("\tval = (val | ((uae_u16)(%s (m68k_areg (regs, srcreg)) & 0xff) << 8)) + %s;\n", srcb, gen_nextiword (0)); addmmufixup ("dstreg"); printf ("\tm68k_areg (regs, dstreg) -= areg_byteinc[dstreg];\n"); gen_set_fault_pc (); @@ -5079,7 +5079,7 @@ bccl_not68020: printf ("\tuae_u16 val;\n"); addmmufixup ("srcreg"); printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n"); - printf ("\tval = (uae_u16)%s (m68k_areg (regs, srcreg));\n", srcb); + printf ("\tval = (uae_u16)(%s (m68k_areg (regs, srcreg)) & 0xff);\n", srcb); printf ("\tval = (((val << 4) & 0xf00) | (val & 0xf)) + %s;\n", gen_nextiword (0)); addmmufixup ("dstreg"); if (cpu_level >= 2) { -- 2.47.3