Mercurial > repos > blastem
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 |