From 23b1a98c568072c0cd2e6c11a56b8312da6398e6 Mon Sep 17 00:00:00 2001 From: Mike Pavone Date: Wed, 8 May 2013 22:49:50 -0700 Subject: Fix IX/IY register selection when the direction bit is set --- z80_to_x86.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'z80_to_x86.c') 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; -- cgit v1.2.3