comparison runtime.S @ 343:467bfa17004a

Mostly working runtime generation of memory map read/write functions
author Mike Pavone <pavone@retrodev.com>
date Sat, 18 May 2013 11:44:42 -0700
parents 146c87616b05
children b46771135442
comparison
equal deleted inserted replaced
342:13f994c88c34 343:467bfa17004a
3 .global do_sync 3 .global do_sync
4 handle_cycle_limit: 4 handle_cycle_limit:
5 cmp 84(%rsi), %eax 5 cmp 84(%rsi), %eax
6 jb skip_sync 6 jb skip_sync
7 do_sync: 7 do_sync:
8 push %rcx
9 push %rdi
8 call m68k_save_context 10 call m68k_save_context
9 mov %rsi, %rdi 11 mov %rsi, %rdi
10 xor %esi, %esi 12 xor %esi, %esi
11 call sync_components 13 call sync_components
12 mov %rax, %rsi 14 mov %rax, %rsi
13 call m68k_load_context 15 call m68k_load_context
16 pop %rdi
17 pop %rcx
14 skip_sync: 18 skip_sync:
15 ret 19 ret
16 20
17 .global handle_cycle_limit_int 21 .global handle_cycle_limit_int
18 handle_cycle_limit_int: 22 handle_cycle_limit_int:
269 ret 273 ret
270 274
271 do_vdp_port_read: 275 do_vdp_port_read:
272 mov %ecx, %edi 276 mov %ecx, %edi
273 call m68k_save_context 277 call m68k_save_context
278 push %rsi
274 call vdp_port_read 279 call vdp_port_read
275 mov %rax, %rsi 280 pop %rsi
276 call m68k_load_context 281 mov %ax, %cx
277 mov 136(%rsi), %cx 282 call m68k_load_context
278 ret 283 ret
279 284
280 do_io_write: 285 do_io_write:
281 call m68k_save_context 286 call m68k_save_context
282 and $0x1FFFF, %edi 287 and $0x1FFFF, %edi
287 ret 292 ret
288 do_io_read: 293 do_io_read:
289 mov %ecx, %edi 294 mov %ecx, %edi
290 and $0x1FFFF, %edi 295 and $0x1FFFF, %edi
291 call m68k_save_context 296 call m68k_save_context
297 push %rsi
292 call io_read 298 call io_read
293 mov %rax, %rsi 299 pop %rsi
294 call m68k_load_context 300 mov %al, %cl
295 mov 136(%rsi), %cl 301 call m68k_load_context
296 ret 302 ret
297 303
298 do_io_write_w: 304 do_io_write_w:
299 call m68k_save_context 305 call m68k_save_context
300 and $0x1FFFF, %edi 306 and $0x1FFFF, %edi
305 ret 311 ret
306 do_io_read_w: 312 do_io_read_w:
307 mov %ecx, %edi 313 mov %ecx, %edi
308 and $0x1FFFF, %edi 314 and $0x1FFFF, %edi
309 call m68k_save_context 315 call m68k_save_context
316 push %rsi
310 call io_read_w 317 call io_read_w
311 mov %rax, %rsi 318 pop %rsi
312 call m68k_load_context 319 mov %ax, %cx
313 mov 136(%rsi), %cx 320 call m68k_load_context
314 ret 321 ret
315 322
316 bad_access_msg: 323 bad_access_msg:
317 .asciz "Program tried to access illegal 68K address %X\n" 324 .asciz "Program tried to access illegal 68K address %X\n"
318 325
477 cmp %ebp, %eax 484 cmp %ebp, %eax
478 jnb do_limit 485 jnb do_limit
479 add $4, %eax 486 add $4, %eax
480 ret 487 ret
481 do_limit: 488 do_limit:
482 push %rcx 489
483 push %rdi
484 call handle_cycle_limit 490 call handle_cycle_limit
485 pop %rdi 491 pop %rdi
486 pop %rcx 492 pop %rcx
487 add $4, %eax 493 add $4, %eax
488 ret 494 ret