Mercurial > repos > blastem
changeset 170:7d1b04537377
Implement RTR
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Jan 2013 13:58:33 -0800 |
parents | c07713463c91 |
children | f03db3db48fb |
files | m68k_to_x86.c |
diffstat | 1 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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: