Mercurial > repos > blastem
diff m68k_to_x86.c @ 152:79958b95526f
Implement TRAP (untested)
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 03 Jan 2013 22:49:21 -0800 |
parents | 6b593ea0ed90 |
children | 4791c0204410 |
line wrap: on
line diff
--- a/m68k_to_x86.c Thu Jan 03 22:07:40 2013 -0800 +++ b/m68k_to_x86.c Thu Jan 03 22:49:21 2013 -0800 @@ -41,6 +41,7 @@ void m68k_modified_ret_addr(); void m68k_native_addr(); void m68k_native_addr_and_sync(); +void m68k_trap(); void set_sr(); void set_ccr(); void get_sr(); @@ -2967,9 +2968,13 @@ dst = setcc_r(dst, CC_S, FLAG_N); dst = mov_ir(dst, 0, FLAG_V, SZ_B); break; - /*case M68K_TAS: + //case M68K_TAS: case M68K_TRAP: - case M68K_TRAPV:*/ + dst = mov_ir(dst, src_op.disp, SCRATCH2, SZ_D); + dst = mov_ir(dst, inst->address, SCRATCH1, SZ_D); + dst = jmp(dst, (uint8_t *)m68k_trap); + break; + //case M68K_TRAPV: case M68K_TST: dst = cycles(dst, BUS); if (src_op.mode == MODE_REG_DIRECT) { @@ -3047,7 +3052,7 @@ //m68k_disasm(&instbuf, disbuf); //printf("%X: %s\n", instbuf.address, disbuf); dst = translate_m68k(dst, &instbuf, opts); - } while(instbuf.op != M68K_ILLEGAL && instbuf.op != M68K_RTS && instbuf.op != M68K_RTE && !(instbuf.op == M68K_BCC && instbuf.extra.cond == COND_TRUE) && instbuf.op != M68K_JMP); + } while(instbuf.op != M68K_ILLEGAL && instbuf.op != M68K_TRAP && instbuf.op != M68K_RTS && instbuf.op != M68K_RTE && !(instbuf.op == M68K_BCC && instbuf.extra.cond == COND_TRUE) && instbuf.op != M68K_JMP); process_deferred(opts); if (opts->deferred) { address = opts->deferred->address;