From: Toni Wilen Date: Tue, 30 Jun 2015 17:56:19 +0000 (+0300) Subject: Truncate to 8-bits, bget in some situations can return upper bit(s) set. X-Git-Tag: 3200~162 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=4a700f1019cc29a4ee7ec2eb6b23d8f3267fc5ec;p=francis%2Fwinuae.git Truncate to 8-bits, bget in some situations can return upper bit(s) set. --- 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) {