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: