Mercurial > repos > simple16
diff src/cpu.c @ 2:6204c81e2933
Revert changes to handling of immediate versions of bitwise instructions. Replace asri with cmpi.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 23 Mar 2016 19:19:29 -0700 |
parents | 7e44f7d5810b |
children | 74a6d629b78f |
line wrap: on
line diff
--- a/src/cpu.c Tue Mar 22 23:14:36 2016 -0700 +++ b/src/cpu.c Wed Mar 23 19:19:29 2016 -0700 @@ -216,17 +216,11 @@ } } -uint16_t format_immediate_bitwise(uint16_t val) +uint16_t format_immediate(uint16_t val) { if (val & 8) { val |= 0xFFF0; } - return val; -} - -uint16_t format_immediate(uint16_t val) -{ - val = format_immediate_bitwise(val); if (!val) { val = 8; } @@ -339,11 +333,11 @@ update_flags_arith(context, tmp); break; case ANDI: - context->regs[dst] = context->regs[dst] & format_immediate_bitwise(a); + context->regs[dst] = context->regs[dst] & format_immediate(a); update_flags_bitwise(context, context->regs[dst]); break; case ORI: - context->regs[dst] = context->regs[dst] | format_immediate_bitwise(a); + context->regs[dst] = context->regs[dst] | format_immediate(a); update_flags_bitwise(context, context->regs[dst]); break; case LSI: @@ -360,18 +354,12 @@ context->regs[dst] = tmp; update_flags_arith(context, tmp); break; - case ASRI: - shift = a; - if (!shift) { - shift = 16; + case CMPI: + tmp = a; + if (a & 8) { + a |= 0xFFF0; } - tmp = context->regs[dst]; - if (tmp & 0x8000) { - tmp |= 0xFFFF0000; - } - tmp = tmp >> shift & 0xFFFF; - tmp |= (context->regs[dst] >> (context->regs[shift] - 1)) << 16 & 0x10000; - context->regs[dst] = tmp; + tmp = context->regs[dst] - a; update_flags_arith(context, tmp); break; case SINGLE_REG: