kvisc/ka/sys/intr/common.k

86 lines
1.5 KiB
Plaintext

; The OS/K Team licenses this file to you under the MIT license.
; See the LICENSE file in the project root for more information.
TrapHandlers.prolog:
mov rbp, zero
; rax = caller's cr2
call RFS.LoadReg, r14, $cr2
; we don't preserve the r12 we got
mov r12, rax
mov rdx, zero
jmp rcx
TrapHandlers.epilog:
; TRAP return values: RAX-RDX
mov ax2, rax
call RFS.StoreReg, r14, $rax
mov ax2, rdx
call RFS.StoreReg, r14, $rdx
call IDT.DoneHandling, r13
iret
ScreenOfDeath:
push r12
mov r12, ax0
prn 10
prn PRN_CLEAR
prn PRN_FLUSH
push ax1
call printf, .scr1
pop zero
b.nz r14, zero, .not_con
push .scr2_con
jmp .do_print
.not_con:
b.l r14, 4, .not_krn
push .scr2_krn
jmp .do_print
.not_krn:
push .scr2_usr
.do_print:
push r14
push r12
call printf, .scr2
inc rsp, 24
call dumprf, r14
prn 10
call print, .scr3
.loop:
pause
pause
scan rax
jmp.axz .loop
b.z rax, 0x0A, DefaultTrapHandler.handle_Exit
b.z rax, 0x1B, DefaultTrapHandler.handle_Shutdown
jmp .loop
crash
.scr1 = "-------- Unhandled EXCEPTION, TRAP/SYSCALL or INTERRUPT (code %d)\n"
.scr2 = "Description: %s\nFrame: %d (%s)\n\n"
.scr3 = "Press:\n ENTER to procede to COMMAND.COM\n ESCAPE to shutdown machine\n\n"
.scr2_con = "dedicated command.com frame"
.scr2_usr = "userspace application frame"
.scr2_krn = "exception/interrupt handler"