diff options
author | Benji Dial <benji6283@gmail.com> | 2020-09-13 17:12:29 -0400 |
---|---|---|
committer | Benji Dial <benji6283@gmail.com> | 2020-09-13 17:12:29 -0400 |
commit | 5481848e27fdd4fc859def9841a0283665531a46 (patch) | |
tree | 990a8df008214d85141a3bd10bd96898e64b0c37 /src/kernel/isrs.asm | |
parent | 1e4a254674f668839e5de273916024c16814b045 (diff) | |
download | portland-os-5481848e27fdd4fc859def9841a0283665531a46.tar.gz |
fixed some paging bugs, added fault handlers and new programs
Diffstat (limited to 'src/kernel/isrs.asm')
-rw-r--r-- | src/kernel/isrs.asm | 73 |
1 files changed, 71 insertions, 2 deletions
diff --git a/src/kernel/isrs.asm b/src/kernel/isrs.asm index 9a9600c..4f2d4e2 100644 --- a/src/kernel/isrs.asm +++ b/src/kernel/isrs.asm @@ -6,6 +6,14 @@ global yield_isr global _start_user_mode global kbd_isr +global udf_isr +global dfa_isr +global tsf_isr +global npf_isr +global ssf_isr +global gpf_isr +global pff_isr + extern syscall_table extern active_task @@ -13,14 +21,26 @@ extern delete_task extern advance_active_task extern on_kbd_isr extern make_sure_tasks +extern exception_halt n_syscalls equ 0x9 +;section .bss +;_debug_is_start_task resb 1 +;extern switch_to_kernel_cr3 +;extern switch_to_task_cr3 + section .text syscall_isr: cmp eax, n_syscalls jge .bad +; mov byte [_debug_is_start_task], 0 +; cmp eax, 0x4 +; jne .dont_set_debug +; mov byte [_debug_is_start_task], 1 +;.dont_set_debug: + mov eax, dword [syscall_table + eax * 4] push edi @@ -33,6 +53,16 @@ syscall_isr: add esp, 20 +; cmp byte [_debug_is_start_task], 0 +; je .dont_do_debug +; push eax +; call switch_to_kernel_cr3 +; jmp $ +; call switch_to_task_cr3 +; pop eax +;.dont_do_debug: + +._before_return: iret .bad: @@ -86,12 +116,13 @@ yield_isr: mov edi, dword [eax + 24] mov ebp, dword [eax + 28] -_before_start_task: +._before_return: iret _start_user_mode: mov ax, 0x2b mov ds, ax + mov es, ax push dword 0x2b sub esp, 4 @@ -113,4 +144,42 @@ kbd_isr: pop edx pop ecx pop eax - iret
\ No newline at end of file + iret + +udf_isr: + push 0 + push udid + call exception_halt + +dfa_isr: + push dfid + call exception_halt + +tsf_isr: + push tsid + call exception_halt + +npf_isr: + push npid + call exception_halt + +ssf_isr: + push ssid + call exception_halt + +gpf_isr: + push gpid + call exception_halt + +pff_isr: + push pfid + call exception_halt + +section .rodata +udid db "UD", 0 +dfid db "DF", 0 +tsid db "TS", 0 +npid db "NP", 0 +ssid db "SS", 0 +gpid db "GP", 0 +pfid db "PF", 0
\ No newline at end of file |