comparison m68k_to_x86.c @ 170:7d1b04537377

Implement RTR
author Mike Pavone <pavone@retrodev.com>
date Sun, 06 Jan 2013 13:58:33 -0800
parents c07713463c91
children f03db3db48fb
comparison
equal deleted inserted replaced
169:c07713463c91 170:7d1b04537377
3141 dst = setcc_r(dst, CC_Z, FLAG_Z); 3141 dst = setcc_r(dst, CC_Z, FLAG_Z);
3142 dst = setcc_r(dst, CC_S, FLAG_N); 3142 dst = setcc_r(dst, CC_S, FLAG_N);
3143 } 3143 }
3144 break; 3144 break;
3145 case M68K_RTE: 3145 case M68K_RTE:
3146 //TODO: Trap if not in system mode
3146 dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D); 3147 dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D);
3147 dst = call(dst, (uint8_t *)m68k_read_long_scratch1); 3148 dst = call(dst, (uint8_t *)m68k_read_long_scratch1);
3148 dst = push_r(dst, SCRATCH1); 3149 dst = push_r(dst, SCRATCH1);
3149 dst = add_ir(dst, 4, opts->aregs[7], SZ_D); 3150 dst = add_ir(dst, 4, opts->aregs[7], SZ_D);
3150 dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D); 3151 dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D);
3160 dst = mov_rrdisp8(dst, SCRATCH2, CONTEXT, offsetof(m68k_context, aregs) + sizeof(uint32_t) * 8, SZ_D); 3161 dst = mov_rrdisp8(dst, SCRATCH2, CONTEXT, offsetof(m68k_context, aregs) + sizeof(uint32_t) * 8, SZ_D);
3161 *end_off = dst - (end_off+1); 3162 *end_off = dst - (end_off+1);
3162 dst = call(dst, (uint8_t *)m68k_native_addr_and_sync); 3163 dst = call(dst, (uint8_t *)m68k_native_addr_and_sync);
3163 dst = jmp_r(dst, SCRATCH1); 3164 dst = jmp_r(dst, SCRATCH1);
3164 break; 3165 break;
3165 /*case M68K_RTR: 3166 case M68K_RTR:
3166 case M68K_SBCD: 3167 dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D);
3168 dst = call(dst, (uint8_t *)m68k_read_long_scratch1);
3169 dst = push_r(dst, SCRATCH1);
3170 dst = add_ir(dst, 4, opts->aregs[7], SZ_D);
3171 dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D);
3172 dst = call(dst, (uint8_t *)m68k_read_word_scratch1);
3173 dst = add_ir(dst, 2, opts->aregs[7], SZ_D);
3174 dst = call(dst, (uint8_t *)set_ccr);
3175 dst = pop_r(dst, SCRATCH1);
3176 dst = call(dst, (uint8_t *)m68k_native_addr_and_sync);
3177 dst = jmp_r(dst, SCRATCH1);
3178 break;
3179 /*case M68K_SBCD:
3167 case M68K_STOP: 3180 case M68K_STOP:
3168 break;*/ 3181 break;*/
3169 case M68K_SUB: 3182 case M68K_SUB:
3170 dst = cycles(dst, BUS); 3183 dst = cycles(dst, BUS);
3171 if (src_op.mode == MODE_REG_DIRECT) { 3184 if (src_op.mode == MODE_REG_DIRECT) {