comparison runtime.S @ 321:146c87616b05

Don't update interrupt mask on non-interrupt exceptions
author Mike Pavone <pavone@retrodev.com>
date Sat, 11 May 2013 21:19:31 -0700
parents 67b6d351df0e
children 467bfa17004a
comparison
equal deleted inserted replaced
320:67b6d351df0e 321:146c87616b05
43 /* calculate interrupt vector address */ 43 /* calculate interrupt vector address */
44 mov 92(%rsi), %ecx 44 mov 92(%rsi), %ecx
45 mov %cx, 6(%rsi) /* interrupt acknowlege */ 45 mov %cx, 6(%rsi) /* interrupt acknowlege */
46 shl $2, %ecx 46 shl $2, %ecx
47 add $0x60, %ecx 47 add $0x60, %ecx
48 /* push %rcx
49 call debug_print_sr_int
50 pop %rcx */
48 call m68k_read_long_scratch1 51 call m68k_read_long_scratch1
49 call m68k_native_addr_and_sync 52 call m68k_native_addr_and_sync
50 add $24, %eax 53 add $24, %eax
51 /* discard function return address */ 54 /* discard function return address */
52 pop %rdi 55 pop %rdi
60 mov %ecx, %esi 63 mov %ecx, %esi
61 call sync_components 64 call sync_components
62 mov %rax, %rsi 65 mov %rax, %rsi
63 call m68k_load_context 66 call m68k_load_context
64 skip_sync_int: 67 skip_sync_int:
68 ret
69
70 sr_msg_int:
71 .asciz "SR set to $%X due to interrupt\n"
72 debug_print_sr_int:
73 call m68k_save_context
74 push %rsi
75 lea sr_msg_int(%rip), %rdi
76 movzxb 5(%rsi), %rsi
77 xor %rax, %rax
78 call printf
79 pop %rsi
80 call m68k_load_context
81 ret
82
83 sr_msg:
84 .asciz "SR set to $%X\n"
85 .global debug_print_sr
86 debug_print_sr:
87 call m68k_save_context
88 push %rsi
89 lea sr_msg(%rip), %rdi
90 movzxb 5(%rsi), %rsi
91 xor %rax, %rax
92 call printf
93 pop %rsi
94 call m68k_load_context
65 ret 95 ret
66 96
67 .global m68k_trap 97 .global m68k_trap
68 m68k_trap: 98 m68k_trap:
69 push %rdi 99 push %rdi
83 /* save status register on stack */ 113 /* save status register on stack */
84 sub $2, %r15d 114 sub $2, %r15d
85 mov %r15d, %edi 115 mov %r15d, %edi
86 call get_sr 116 call get_sr
87 call m68k_write_word 117 call m68k_write_word
88 /* update status register */ 118 /* set supervisor bit */
89 andb $0xF8, 5(%rsi) 119 or $0x20, 5(%rsi)
90 mov 92(%rsi), %cl
91 or $0x20, %cl
92 or %cl, 5(%rsi)
93 /* calculate interrupt vector address */ 120 /* calculate interrupt vector address */
94 pop %rcx 121 pop %rcx
95 shl $2, %ecx 122 shl $2, %ecx
96 call m68k_read_long_scratch1 123 call m68k_read_long_scratch1
97 call m68k_native_addr_and_sync 124 call m68k_native_addr_and_sync
210 shr $1, %cl 237 shr $1, %cl
211 and $1, %cl 238 and $1, %cl
212 mov %cl, (%rsi) 239 mov %cl, (%rsi)
213 shr $8, %cx 240 shr $8, %cx
214 mov %cl, 5(%rsi) 241 mov %cl, 5(%rsi)
242 /* call debug_print_sr */
215 ret 243 ret
216 244
217 .global set_ccr 245 .global set_ccr
218 set_ccr: 246 set_ccr:
219 mov %cl, %dh 247 mov %cl, %dh