diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-01-15 00:14:36 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-01-15 00:14:36 -0800 |
commit | 4b69daeb68eea734a057f0b66b2bf7700a2a4809 (patch) | |
tree | eecf9714de219ac05366f31e6febf06fef0cf5b6 /runtime.S | |
parent | 1e6dff1fb2dabee0d7f95eaa546358b55b8ac1de (diff) |
Implement support for self-modifying code
Diffstat (limited to 'runtime.S')
-rw-r--r-- | runtime.S | 31 |
1 files changed, 30 insertions, 1 deletions
@@ -240,8 +240,17 @@ m68k_write_word: not_io_w: ret workram_w: - and $0xFFFF, %rdi + and $0xFFFF, %edi mov %cx, (%r9, %rdi) + mov %edi, %ecx + shr $10, %ecx + bt %ecx, 160(%rsi) + jnc not_code + call m68k_save_context + call m68k_handle_code_write + mov %rax, %rsi + call m68k_load_context +not_code: ret cart_w: mov %cx, (%r8, %rdi) @@ -322,6 +331,16 @@ workram_wb: xor $1, %edi and $0xFFFF, %rdi mov %cl, (%r9, %rdi) + mov %edi, %ecx + shr $10, %ecx + bt %ecx, 160(%rsi) + jnc not_code_b + xor $1, %edi + call m68k_save_context + call m68k_handle_code_write + mov %rax, %rsi + call m68k_load_context +not_code_b: ret cart_wb: /* deal with byte swapping */ @@ -498,6 +517,16 @@ m68k_native_addr: pop %rsi call m68k_load_context ret + + .global m68k_retrans_stub +m68k_retrans_stub: + call m68k_save_context + push %rsi + call m68k_retranslate_inst + pop %rsi + mov %rax, %rcx + call m68k_load_context + jmp *%rcx .global m68k_save_context m68k_save_context: |