diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-01-27 13:07:26 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-01-27 13:07:26 -0800 |
commit | e73320f72e5d2a10714672bdbc59e87849100585 (patch) | |
tree | c5c79a96a01d4afa923734b96b4e3c0aa8f13e46 | |
parent | eb20708ceffcbe168d136de43250daa2a12cb9db (diff) |
Fix movem reg to mem for certain addressing modes
-rw-r--r-- | m68k_to_x86.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/m68k_to_x86.c b/m68k_to_x86.c index 263ef43..ab87751 100644 --- a/m68k_to_x86.c +++ b/m68k_to_x86.c @@ -1164,13 +1164,6 @@ uint8_t * translate_m68k_movem(uint8_t * dst, m68kinst * inst, x86_68k_options * //reg to mem early_cycles = 8; int8_t dir; - if (inst->dst.addr_mode == MODE_AREG_PREDEC) { - reg = 15; - dir = -1; - } else { - reg = 0; - dir = 1; - } switch (inst->dst.addr_mode) { case MODE_AREG_INDIRECT: @@ -1286,6 +1279,13 @@ uint8_t * translate_m68k_movem(uint8_t * dst, m68kinst * inst, x86_68k_options * printf("%X: %s\naddress mode %d not implemented (movem dst)\n", inst->address, disasm_buf, inst->dst.addr_mode); exit(1); } + if (inst->dst.addr_mode == MODE_AREG_PREDEC) { + reg = 15; + dir = -1; + } else { + reg = 0; + dir = 1; + } dst = cycles(dst, early_cycles); for(bit=0; reg < 16 && reg >= 0; reg += dir, bit++) { if (inst->src.params.immed & (1 << bit)) { |