Mercurial > repos > blastem
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) { |