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