Mercurial > repos > blastem
comparison runtime.S @ 347:b24556b45d1e
Generate handle_cycle_limit_int at runtime so it can refer to the runtime generated memory map functions
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 21 May 2013 00:56:56 -0700 |
parents | b46771135442 |
children | 3923dbc2dcc4 |
comparison
equal
deleted
inserted
replaced
346:aff29d50afd5 | 347:b24556b45d1e |
---|---|
14 mov %rax, %rsi | 14 mov %rax, %rsi |
15 call m68k_load_context | 15 call m68k_load_context |
16 pop %rdi | 16 pop %rdi |
17 pop %rcx | 17 pop %rcx |
18 skip_sync: | 18 skip_sync: |
19 ret | |
20 | |
21 .global handle_cycle_limit_int | |
22 handle_cycle_limit_int: | |
23 cmp 88(%rsi), %eax | |
24 jb skip_int | |
25 mov 84(%rsi), %ebp | |
26 /* swap USP and SSP if not already in supervisor mode */ | |
27 bt $5, 5(%rsi) | |
28 jc already_supervisor | |
29 mov 72(%rsi), %edi | |
30 mov %r15d, 72(%rsi) | |
31 mov %edi, %r15d | |
32 already_supervisor: | |
33 /* save PC */ | |
34 sub $4, %r15d | |
35 mov %r15d, %edi | |
36 call m68k_write_long_lowfirst | |
37 /* save status register on stack */ | |
38 sub $2, %r15d | |
39 mov %r15d, %edi | |
40 call get_sr | |
41 call m68k_write_word | |
42 /* update status register */ | |
43 andb $0xF8, 5(%rsi) | |
44 mov 92(%rsi), %cl | |
45 or $0x20, %cl | |
46 or %cl, 5(%rsi) | |
47 /* calculate interrupt vector address */ | |
48 mov 92(%rsi), %ecx | |
49 mov %cx, 6(%rsi) /* interrupt acknowlege */ | |
50 shl $2, %ecx | |
51 add $0x60, %ecx | |
52 /* push %rcx | |
53 call debug_print_sr_int | |
54 pop %rcx */ | |
55 call m68k_read_long_scratch1 | |
56 call m68k_native_addr_and_sync | |
57 add $24, %eax | |
58 /* discard function return address */ | |
59 pop %rdi | |
60 jmp *%rcx | |
61 ret | |
62 skip_int: | |
63 cmp 84(%rsi), %eax | |
64 jb skip_sync_int | |
65 call m68k_save_context | |
66 mov %rsi, %rdi | |
67 mov %ecx, %esi | |
68 call sync_components | |
69 mov %rax, %rsi | |
70 call m68k_load_context | |
71 skip_sync_int: | |
72 ret | 19 ret |
73 | 20 |
74 sr_msg_int: | 21 sr_msg_int: |
75 .asciz "SR set to $%X due to interrupt\n" | 22 .asciz "SR set to $%X due to interrupt\n" |
76 debug_print_sr_int: | 23 debug_print_sr_int: |