changeset 363:c708dea45f8b

Fix push AF
author Mike Pavone <pavone@retrodev.com>
date Wed, 29 May 2013 00:13:48 -0700
parents b7c3facee762
children 62177cc39049
files z80_to_x86.c
diffstat 1 files changed, 2 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/z80_to_x86.c	Mon May 27 22:19:11 2013 -0700
+++ b/z80_to_x86.c	Wed May 29 00:13:48 2013 -0700
@@ -383,6 +383,8 @@
 		dst = zcycles(dst, (inst->reg == Z80_IX || inst->reg == Z80_IY) ? 9 : 5);
 		dst = sub_ir(dst, 2, opts->regs[Z80_SP], SZ_W);
 		if (inst->reg == Z80_AF) {
+			dst = mov_rr(dst, opts->regs[Z80_A], SCRATCH1, SZ_B);
+			dst = shl_ir(dst, 8, SCRATCH1, SZ_W);
 			dst = mov_rdisp8r(dst, CONTEXT, zf_off(ZF_S), SCRATCH1, SZ_B);
 			dst = shl_ir(dst, 1, SCRATCH1, SZ_B);
 			dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_Z), SCRATCH1, SZ_B);
@@ -394,8 +396,6 @@
 			dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_N), SCRATCH1, SZ_B);
 			dst = shl_ir(dst, 1, SCRATCH1, SZ_B);
 			dst = or_rdisp8r(dst, CONTEXT, zf_off(ZF_C), SCRATCH1, SZ_B);
-			dst = shl_ir(dst, 8, SCRATCH1, SZ_W);
-			dst = mov_rr(dst, opts->regs[Z80_A], SCRATCH1, SZ_B);
 		} else {
 			dst = translate_z80_reg(inst, &src_op, dst, opts);
 			dst = mov_rr(dst, src_op.base, SCRATCH1, SZ_W);