summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2013-05-08 22:49:50 -0700
committerMike Pavone <pavone@retrodev.com>2013-05-08 22:49:50 -0700
commit23b1a98c568072c0cd2e6c11a56b8312da6398e6 (patch)
tree38e99d79de60bc0b98405d8f115d2ca7f834ffc9
parent74a8c57072ebddd709c6b62f6549a58b52194958 (diff)
Fix IX/IY register selection when the direction bit is set
-rw-r--r--z80_to_x86.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/z80_to_x86.c b/z80_to_x86.c
index 610a062..c1fc48a 100644
--- a/z80_to_x86.c
+++ b/z80_to_x86.c
@@ -187,7 +187,7 @@ uint8_t * translate_z80_ea(z80inst * inst, x86_ea * ea, uint8_t * dst, x86_z80_o
break;
case Z80_IX_DISPLACE:
case Z80_IY_DISPLACE:
- reg = opts->regs[inst->addr_mode == Z80_IX_DISPLACE ? Z80_IX : Z80_IY];
+ reg = opts->regs[(inst->addr_mode & 0x1F) == Z80_IX_DISPLACE ? Z80_IX : Z80_IY];
dst = mov_rr(dst, reg, areg, SZ_W);
dst = add_ir(dst, inst->ea_reg, areg, SZ_W);
size = z80_size(inst);
@@ -212,7 +212,7 @@ uint8_t * translate_z80_ea(z80inst * inst, x86_ea * ea, uint8_t * dst, x86_z80_o
ea->mode = MODE_UNUSED;
break;
default:
- fprintf(stderr, "Unrecognized Z80 addressing mode %d\n", inst->addr_mode);
+ fprintf(stderr, "Unrecognized Z80 addressing mode %d\n", inst->addr_mode & 0x1F);
exit(1);
}
return dst;