diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-12-28 10:37:09 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-12-28 10:37:09 -0800 |
commit | 761bca4b9e4a3826e81123f113b217fcea34a517 (patch) | |
tree | 7f0d8e1a261ffbce48becfb207b4ac4c0f337e3a | |
parent | 923af7c3b7caeba2cc319dbec6ef4688849a299a (diff) |
Implemented move from SR
-rw-r--r-- | m68k_to_x86.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/m68k_to_x86.c b/m68k_to_x86.c index a07bb07..aabf407 100644 --- a/m68k_to_x86.c +++ b/m68k_to_x86.c @@ -1443,6 +1443,7 @@ uint8_t * translate_m68k_jsr(uint8_t * dst, m68kinst * inst, x86_68k_options * o break; default: printf("address mode %d not yet supported (jsr)\n", inst->src.addr_mode); + exit(1); } return dst; } @@ -1913,15 +1914,21 @@ uint8_t * translate_m68k(uint8_t * dst, m68kinst * inst, x86_68k_options * opts) } } break; - //case M68K_EXT: - // break; case M68K_ILLEGAL: dst = call(dst, (uint8_t *)m68k_save_context); dst = mov_rr(dst, CONTEXT, RDI, SZ_Q); dst = call(dst, (uint8_t *)print_regs_exit); break; - /*case M68K_MOVE_FROM_SR: - break;*/ + case M68K_MOVE_FROM_SR: + //TODO: Trap if not in system mode + dst = call(dst, (uint8_t *)get_sr); + if (dst_op.mode == MODE_REG_DIRECT) { + dst = mov_rr(dst, SCRATCH1, dst_op.base, SZ_W); + } else { + dst = mov_rrdisp8(dst, SCRATCH1, dst_op.base, dst_op.disp, SZ_W); + } + dst = m68k_save_result(inst, dst, opts); + break; case M68K_MOVE_CCR: case M68K_MOVE_SR: //TODO: Privilege check for MOVE to SR |