diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-05-11 21:19:31 -0700 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-05-11 21:19:31 -0700 |
commit | bd37bedca78611c47b5ecbc7f8a9fbc78c39b910 (patch) | |
tree | 39bd119cc2e0798d6fb5813bdf3c77606402b974 /runtime.S | |
parent | 6ab97fce20853a8b04f40ff747f3ef108fdaf59a (diff) |
Don't update interrupt mask on non-interrupt exceptions
Diffstat (limited to 'runtime.S')
-rw-r--r-- | runtime.S | 38 |
1 files changed, 33 insertions, 5 deletions
@@ -45,6 +45,9 @@ already_supervisor: mov %cx, 6(%rsi) /* interrupt acknowlege */ shl $2, %ecx add $0x60, %ecx + /* push %rcx + call debug_print_sr_int + pop %rcx */ call m68k_read_long_scratch1 call m68k_native_addr_and_sync add $24, %eax @@ -64,6 +67,33 @@ skip_int: skip_sync_int: ret +sr_msg_int: + .asciz "SR set to $%X due to interrupt\n" +debug_print_sr_int: + call m68k_save_context + push %rsi + lea sr_msg_int(%rip), %rdi + movzxb 5(%rsi), %rsi + xor %rax, %rax + call printf + pop %rsi + call m68k_load_context + ret + +sr_msg: + .asciz "SR set to $%X\n" + .global debug_print_sr +debug_print_sr: + call m68k_save_context + push %rsi + lea sr_msg(%rip), %rdi + movzxb 5(%rsi), %rsi + xor %rax, %rax + call printf + pop %rsi + call m68k_load_context + ret + .global m68k_trap m68k_trap: push %rdi @@ -85,11 +115,8 @@ already_supervisor_trap: mov %r15d, %edi call get_sr call m68k_write_word - /* update status register */ - andb $0xF8, 5(%rsi) - mov 92(%rsi), %cl - or $0x20, %cl - or %cl, 5(%rsi) + /* set supervisor bit */ + or $0x20, 5(%rsi) /* calculate interrupt vector address */ pop %rcx shl $2, %ecx @@ -212,6 +239,7 @@ set_sr: mov %cl, (%rsi) shr $8, %cx mov %cl, 5(%rsi) + /* call debug_print_sr */ ret .global set_ccr |