comparison z80_to_x86.c @ 242:d3b84b2a4397

Implemente CP (untested)
author Mike Pavone <pavone@retrodev.com>
date Sun, 28 Apr 2013 14:05:02 -0700
parents 2586d49ddd46
children 2f069a0b487e
comparison
equal deleted inserted replaced
241:2586d49ddd46 242:d3b84b2a4397
555 dst = setcc_rdisp8(dst, CC_S, CONTEXT, zf_off(ZF_S)); 555 dst = setcc_rdisp8(dst, CC_S, CONTEXT, zf_off(ZF_S));
556 } 556 }
557 dst = z80_save_reg(dst, inst, opts); 557 dst = z80_save_reg(dst, inst, opts);
558 dst = z80_save_ea(dst, inst, opts); 558 dst = z80_save_ea(dst, inst, opts);
559 break; 559 break;
560 //case Z80_CP:*/ 560 case Z80_CP:
561 cycles = 4;
562 if (inst->addr_mode == Z80_IX_DISPLACE || inst->addr_mode == Z80_IY_DISPLACE) {
563 cycles += 12;
564 } else if(inst->addr_mode == Z80_IMMED) {
565 cycles += 3;
566 }
567 dst = zcycles(dst, cycles);
568 dst = translate_z80_reg(inst, &dst_op, dst, opts);
569 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, DONT_MODIFY);
570 if (src_op.mode == MODE_REG_DIRECT) {
571 dst = cmp_rr(dst, src_op.base, dst_op.base, z80_size(inst));
572 } else {
573 dst = cmp_ir(dst, src_op.disp, dst_op.base, z80_size(inst));
574 }
575 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C));
576 dst = mov_irdisp8(dst, 1, CONTEXT, zf_off(ZF_N), SZ_B);
577 dst = setcc_rdisp8(dst, CC_O, CONTEXT, zf_off(ZF_PV));
578 //TODO: Implement half-carry flag
579 dst = setcc_rdisp8(dst, CC_Z, CONTEXT, zf_off(ZF_Z));
580 dst = setcc_rdisp8(dst, CC_S, CONTEXT, zf_off(ZF_S));
581 dst = z80_save_reg(dst, inst, opts);
582 dst = z80_save_ea(dst, inst, opts);
583 break;
561 case Z80_INC: 584 case Z80_INC:
562 cycles = 4; 585 cycles = 4;
563 if (inst->reg == Z80_IX || inst->reg == Z80_IY) { 586 if (inst->reg == Z80_IX || inst->reg == Z80_IY) {
564 cycles += 6; 587 cycles += 6;
565 } else if(z80_size(inst) == SZ_W) { 588 } else if(z80_size(inst) == SZ_W) {