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);