Mercurial > repos > blastem
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 |