Mercurial > repos > blastem
comparison z80_to_x86.c @ 363:c708dea45f8b
Fix push AF
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 29 May 2013 00:13:48 -0700 |
parents | c42fae88d346 |
children | 836585d389b8 |
comparison
equal
deleted
inserted
replaced
362:b7c3facee762 | 363:c708dea45f8b |
---|---|
381 break; | 381 break; |
382 case Z80_PUSH: | 382 case Z80_PUSH: |
383 dst = zcycles(dst, (inst->reg == Z80_IX || inst->reg == Z80_IY) ? 9 : 5); | 383 dst = zcycles(dst, (inst->reg == Z80_IX || inst->reg == Z80_IY) ? 9 : 5); |
384 dst = sub_ir(dst, 2, opts->regs[Z80_SP], SZ_W); | 384 dst = sub_ir(dst, 2, opts->regs[Z80_SP], SZ_W); |
385 if (inst->reg == Z80_AF) { | 385 if (inst->reg == Z80_AF) { |
386 dst = mov_rr(dst, opts->regs[Z80_A], SCRATCH1, SZ_B); | |
387 dst = shl_ir(dst, 8, SCRATCH1, SZ_W); | |
386 dst = mov_rdisp8r(dst, CONTEXT, zf_off(ZF_S), SCRATCH1, SZ_B); | 388 dst = mov_rdisp8r(dst, CONTEXT, zf_off(ZF_S), SCRATCH1, SZ_B); |
387 dst = shl_ir(dst, 1, SCRATCH1, SZ_B); | 389 dst = shl_ir(dst, 1, SCRATCH1, SZ_B); |
388 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_Z), SCRATCH1, SZ_B); | 390 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_Z), SCRATCH1, SZ_B); |
389 dst = shl_ir(dst, 2, SCRATCH1, SZ_B); | 391 dst = shl_ir(dst, 2, SCRATCH1, SZ_B); |
390 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_H), SCRATCH1, SZ_B); | 392 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_H), SCRATCH1, SZ_B); |
392 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_PV), SCRATCH1, SZ_B); | 394 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_PV), SCRATCH1, SZ_B); |
393 dst = shl_ir(dst, 1, SCRATCH1, SZ_B); | 395 dst = shl_ir(dst, 1, SCRATCH1, SZ_B); |
394 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_N), SCRATCH1, SZ_B); | 396 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_N), SCRATCH1, SZ_B); |
395 dst = shl_ir(dst, 1, SCRATCH1, SZ_B); | 397 dst = shl_ir(dst, 1, SCRATCH1, SZ_B); |
396 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_C), SCRATCH1, SZ_B); | 398 dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_C), SCRATCH1, SZ_B); |
397 dst = shl_ir(dst, 8, SCRATCH1, SZ_W); | |
398 dst = mov_rr(dst, opts->regs[Z80_A], SCRATCH1, SZ_B); | |
399 } else { | 399 } else { |
400 dst = translate_z80_reg(inst, &src_op, dst, opts); | 400 dst = translate_z80_reg(inst, &src_op, dst, opts); |
401 dst = mov_rr(dst, src_op.base, SCRATCH1, SZ_W); | 401 dst = mov_rr(dst, src_op.base, SCRATCH1, SZ_W); |
402 } | 402 } |
403 dst = mov_rr(dst, opts->regs[Z80_SP], SCRATCH2, SZ_W); | 403 dst = mov_rr(dst, opts->regs[Z80_SP], SCRATCH2, SZ_W); |