comparison z80_to_x86.c @ 300:9adc1dce39bf

Fix IX/IY register selection when the direction bit is set
author Mike Pavone <pavone@retrodev.com>
date Wed, 08 May 2013 22:49:50 -0700
parents 42e1a986f2d0
children 6e15509a1257
comparison
equal deleted inserted replaced
299:42e1a986f2d0 300:9adc1dce39bf
185 } 185 }
186 ea->base = SCRATCH1; 186 ea->base = SCRATCH1;
187 break; 187 break;
188 case Z80_IX_DISPLACE: 188 case Z80_IX_DISPLACE:
189 case Z80_IY_DISPLACE: 189 case Z80_IY_DISPLACE:
190 reg = opts->regs[inst->addr_mode == Z80_IX_DISPLACE ? Z80_IX : Z80_IY]; 190 reg = opts->regs[(inst->addr_mode & 0x1F) == Z80_IX_DISPLACE ? Z80_IX : Z80_IY];
191 dst = mov_rr(dst, reg, areg, SZ_W); 191 dst = mov_rr(dst, reg, areg, SZ_W);
192 dst = add_ir(dst, inst->ea_reg, areg, SZ_W); 192 dst = add_ir(dst, inst->ea_reg, areg, SZ_W);
193 size = z80_size(inst); 193 size = z80_size(inst);
194 if (read) { 194 if (read) {
195 if (modify) { 195 if (modify) {
210 break; 210 break;
211 case Z80_UNUSED: 211 case Z80_UNUSED:
212 ea->mode = MODE_UNUSED; 212 ea->mode = MODE_UNUSED;
213 break; 213 break;
214 default: 214 default:
215 fprintf(stderr, "Unrecognized Z80 addressing mode %d\n", inst->addr_mode); 215 fprintf(stderr, "Unrecognized Z80 addressing mode %d\n", inst->addr_mode & 0x1F);
216 exit(1); 216 exit(1);
217 } 217 }
218 return dst; 218 return dst;
219 } 219 }
220 220