Mercurial > repos > blastem
comparison runtime.S @ 193:c66e4636f991
Implement support for self-modifying code
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 15 Jan 2013 00:14:36 -0800 |
parents | e2918b5208eb |
children | 811163790e6c |
comparison
equal
deleted
inserted
replaced
192:1db07e112bf7 | 193:c66e4636f991 |
---|---|
238 jae not_io_w | 238 jae not_io_w |
239 jmp do_io_write_w | 239 jmp do_io_write_w |
240 not_io_w: | 240 not_io_w: |
241 ret | 241 ret |
242 workram_w: | 242 workram_w: |
243 and $0xFFFF, %rdi | 243 and $0xFFFF, %edi |
244 mov %cx, (%r9, %rdi) | 244 mov %cx, (%r9, %rdi) |
245 mov %edi, %ecx | |
246 shr $10, %ecx | |
247 bt %ecx, 160(%rsi) | |
248 jnc not_code | |
249 call m68k_save_context | |
250 call m68k_handle_code_write | |
251 mov %rax, %rsi | |
252 call m68k_load_context | |
253 not_code: | |
245 ret | 254 ret |
246 cart_w: | 255 cart_w: |
247 mov %cx, (%r8, %rdi) | 256 mov %cx, (%r8, %rdi) |
248 ret | 257 ret |
249 vdp_psg_w: | 258 vdp_psg_w: |
320 workram_wb: | 329 workram_wb: |
321 /* deal with byte swapping */ | 330 /* deal with byte swapping */ |
322 xor $1, %edi | 331 xor $1, %edi |
323 and $0xFFFF, %rdi | 332 and $0xFFFF, %rdi |
324 mov %cl, (%r9, %rdi) | 333 mov %cl, (%r9, %rdi) |
334 mov %edi, %ecx | |
335 shr $10, %ecx | |
336 bt %ecx, 160(%rsi) | |
337 jnc not_code_b | |
338 xor $1, %edi | |
339 call m68k_save_context | |
340 call m68k_handle_code_write | |
341 mov %rax, %rsi | |
342 call m68k_load_context | |
343 not_code_b: | |
325 ret | 344 ret |
326 cart_wb: | 345 cart_wb: |
327 /* deal with byte swapping */ | 346 /* deal with byte swapping */ |
328 xor $1, %edi | 347 xor $1, %edi |
329 mov %cl, (%r8, %rdi) | 348 mov %cl, (%r8, %rdi) |
496 call get_native_address_trans | 515 call get_native_address_trans |
497 mov %rax, %rcx | 516 mov %rax, %rcx |
498 pop %rsi | 517 pop %rsi |
499 call m68k_load_context | 518 call m68k_load_context |
500 ret | 519 ret |
520 | |
521 .global m68k_retrans_stub | |
522 m68k_retrans_stub: | |
523 call m68k_save_context | |
524 push %rsi | |
525 call m68k_retranslate_inst | |
526 pop %rsi | |
527 mov %rax, %rcx | |
528 call m68k_load_context | |
529 jmp *%rcx | |
501 | 530 |
502 .global m68k_save_context | 531 .global m68k_save_context |
503 m68k_save_context: | 532 m68k_save_context: |
504 mov %bl, 1(%rsi) /* N Flag */ | 533 mov %bl, 1(%rsi) /* N Flag */ |
505 mov %bh, 2(%rsi) /* V flag */ | 534 mov %bh, 2(%rsi) /* V flag */ |