Mercurial > repos > blastem
comparison m68k_to_x86.c @ 171:f03db3db48fb
Implement EORI CCR/SR
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Jan 2013 14:00:45 -0800 |
parents | 7d1b04537377 |
children | c61507f897e4 |
comparison
equal
deleted
inserted
replaced
170:7d1b04537377 | 171:f03db3db48fb |
---|---|
2724 dst = setcc_r(dst, CC_Z, FLAG_Z); | 2724 dst = setcc_r(dst, CC_Z, FLAG_Z); |
2725 dst = setcc_r(dst, CC_S, FLAG_N); | 2725 dst = setcc_r(dst, CC_S, FLAG_N); |
2726 dst = mov_ir(dst, 0, FLAG_V, SZ_B); | 2726 dst = mov_ir(dst, 0, FLAG_V, SZ_B); |
2727 dst = m68k_save_result(inst, dst, opts); | 2727 dst = m68k_save_result(inst, dst, opts); |
2728 break; | 2728 break; |
2729 /*case M68K_EORI_CCR: | 2729 case M68K_EORI_CCR: |
2730 case M68K_EORI_SR:*/ | 2730 case M68K_EORI_SR: |
2731 dst = cycles(dst, 20); | |
2732 //TODO: If ANDI to SR, trap if not in supervisor mode | |
2733 if (inst->src.params.immed & 0x1) { | |
2734 dst = xor_ir(dst, 1, FLAG_C, SZ_B); | |
2735 } | |
2736 if (inst->src.params.immed & 0x2) { | |
2737 dst = xor_ir(dst, 1, FLAG_V, SZ_B); | |
2738 } | |
2739 if (inst->src.params.immed & 0x4) { | |
2740 dst = xor_ir(dst, 1, FLAG_Z, SZ_B); | |
2741 } | |
2742 if (inst->src.params.immed & 0x8) { | |
2743 dst = xor_ir(dst, 1, FLAG_N, SZ_B); | |
2744 } | |
2745 if (inst->src.params.immed & 0x10) { | |
2746 dst = xor_irdisp8(dst, 1, CONTEXT, 0, SZ_B); | |
2747 } | |
2748 if (inst->op == M68K_ORI_SR) { | |
2749 dst = xor_irdisp8(dst, inst->src.params.immed >> 8, CONTEXT, offsetof(m68k_context, status), SZ_B); | |
2750 if (inst->src.params.immed & 0x700) { | |
2751 dst = call(dst, (uint8_t *)do_sync); | |
2752 } | |
2753 } | |
2754 break; | |
2731 case M68K_EXG: | 2755 case M68K_EXG: |
2732 dst = cycles(dst, 6); | 2756 dst = cycles(dst, 6); |
2733 if (dst_op.mode == MODE_REG_DIRECT) { | 2757 if (dst_op.mode == MODE_REG_DIRECT) { |
2734 dst = mov_rr(dst, dst_op.base, SCRATCH2, SZ_D); | 2758 dst = mov_rr(dst, dst_op.base, SCRATCH2, SZ_D); |
2735 if (src_op.mode == MODE_REG_DIRECT) { | 2759 if (src_op.mode == MODE_REG_DIRECT) { |