2019-07-09 19:51:03 +02:00
|
|
|
; 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:
|
2019-07-17 22:25:50 +02:00
|
|
|
mov rbp, rsp
|
2019-07-09 19:51:03 +02:00
|
|
|
|
2019-08-06 22:47:39 +02:00
|
|
|
; rax = caller's cr2
|
2019-08-03 17:41:44 +02:00
|
|
|
call RFS.LoadReg, r14, $cr2
|
2019-07-10 20:11:35 +02:00
|
|
|
|
2019-07-24 16:52:26 +02:00
|
|
|
; we don't preserve the r12 we got
|
2019-07-22 13:18:13 +02:00
|
|
|
mov r12, rax
|
2019-07-17 22:25:50 +02:00
|
|
|
mov rdx, zero
|
2019-07-10 17:17:45 +02:00
|
|
|
|
2019-07-10 20:11:35 +02:00
|
|
|
jmp rcx
|
2019-07-09 19:51:03 +02:00
|
|
|
|
|
|
|
TrapHandlers.epilog:
|
2019-07-10 12:26:15 +02:00
|
|
|
; TRAP return values: RAX-RDX
|
|
|
|
|
|
|
|
mov ax2, rax
|
2019-07-22 13:18:13 +02:00
|
|
|
call RFS.StoreReg, r14, $rax
|
2019-07-10 12:28:20 +02:00
|
|
|
|
2019-07-10 12:26:15 +02:00
|
|
|
mov ax2, rdx
|
2019-07-22 13:18:13 +02:00
|
|
|
call RFS.StoreReg, r14, $rdx
|
2019-07-10 12:26:15 +02:00
|
|
|
|
2019-07-22 13:18:13 +02:00
|
|
|
call IDT.DoneHandling, r13
|
2019-07-10 20:11:35 +02:00
|
|
|
|
2019-07-09 19:51:03 +02:00
|
|
|
iret
|
|
|
|
|
2019-08-06 22:47:39 +02:00
|
|
|
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"
|
|
|
|
|