; 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, rsp ; 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 call print, .scr1 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, trap0_handler.handle_Exit b.z rax, 0x1B, trap0_handler.handle_Shutdown jmp .loop crash .scr1 = "-------- Unhandled EXCEPTION, TRAP/SYSCALL or INTERRUPT\n" .scr2 = "Offense description: %s\nOffending frame: %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"