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 */