# HG changeset patch # User Mike Pavone # Date 1357509513 28800 # Node ID 7d1b04537377a9c60a08c717701bd8db01a7dd19 # Parent c07713463c91e668db510b563ee9a333b3435371 Implement RTR diff -r c07713463c91 -r 7d1b04537377 m68k_to_x86.c --- a/m68k_to_x86.c Sun Jan 06 13:42:13 2013 -0800 +++ b/m68k_to_x86.c Sun Jan 06 13:58:33 2013 -0800 @@ -3143,6 +3143,7 @@ } break; case M68K_RTE: + //TODO: Trap if not in system mode dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D); dst = call(dst, (uint8_t *)m68k_read_long_scratch1); dst = push_r(dst, SCRATCH1); @@ -3162,8 +3163,20 @@ dst = call(dst, (uint8_t *)m68k_native_addr_and_sync); dst = jmp_r(dst, SCRATCH1); break; - /*case M68K_RTR: - case M68K_SBCD: + case M68K_RTR: + dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D); + dst = call(dst, (uint8_t *)m68k_read_long_scratch1); + dst = push_r(dst, SCRATCH1); + dst = add_ir(dst, 4, opts->aregs[7], SZ_D); + dst = mov_rr(dst, opts->aregs[7], SCRATCH1, SZ_D); + dst = call(dst, (uint8_t *)m68k_read_word_scratch1); + dst = add_ir(dst, 2, opts->aregs[7], SZ_D); + dst = call(dst, (uint8_t *)set_ccr); + dst = pop_r(dst, SCRATCH1); + dst = call(dst, (uint8_t *)m68k_native_addr_and_sync); + dst = jmp_r(dst, SCRATCH1); + break; + /*case M68K_SBCD: case M68K_STOP: break;*/ case M68K_SUB: