os-k/kaleid/kernel/cpu/isr.asm

151 lines
3.6 KiB
NASM

;=----------------------------------------------------------------------------=;
; GNU GPL OS/K ;
; ;
; Desc: Interrupt Descriptor Table related functions ;
; ;
; ;
; Copyright © 2018-2019 The OS/K Team ;
; ;
; This file is part of OS/K. ;
; ;
; OS/K is free software: you can redistribute it and/or modify ;
; it under the terms of the GNU General Public License as published by ;
; the Free Software Foundation, either version 3 of the License, or ;
; (at your option) any later version. ;
; ;
; OS/K is distributed in the hope that it will be useful, ;
; but WITHOUT ANY WARRANTY; without even the implied warranty of ;
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;
; GNU General Public License for more details. ;
; ;
; You should have received a copy of the GNU General Public License ;
; along with OS/K. If not, see <https://www.gnu.org/licenses/>. ;
;=----------------------------------------------------------------------------=;
%include "kaleid/kernel/cpu/isr.inc"
global IdtInit
global divideByZero
extern idtPtr
extern IdtHandler
;;
;; Loads the IDT
;;
IdtInit:
lidt [idtPtr]
ret
;;
;; Bug test
;;
divideByZero:
pushAll
mov eax, 17
mov ebx, 0
xor edx, edx
div ebx
popAll
ret
;;
;; ISR handler
;;
isrPreHandler:
mov ax, ds
push rax
mov ax, 0x0
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
call IdtHandler
pop rbx
mov ds, bx
mov es, bx
mov fs, bx
mov gs, bx
popAll
add rsp, 8
sti
iretq
;; Divide Error Fault
IsrWithoutErrCode 0
;; Debug Exception Fault/trap
IsrWithoutErrCode 1
;; NMI Interrupt
IsrWithoutErrCode 2
;; Breakpoint Trap
IsrWithoutErrCode 3
;; Overflow Trap
IsrWithoutErrCode 4
;; Bound Range Exceeded Fault
IsrWithoutErrCode 5
;; Invalid Opcode Fault
IsrWithoutErrCode 6
;; Device Not Available or No Math Coprocessor Fault
IsrWithoutErrCode 7
;; Coprocessor Segment Overrun Fault
IsrWithoutErrCode 9
;; x87 FPU Floating Point or Math Fault
IsrWithoutErrCode 16
;; Alignment Check Fault
IsrWithoutErrCode 17
;; Machine Check Abort
IsrWithoutErrCode 18
;; SIMD Floating Point Fault
IsrWithoutErrCode 19
;; Virtualization Exception Fault
IsrWithoutErrCode 20
;; Double Fault Abort
IsrWithErrCode 8
;; Invalid TSS Fault
IsrWithErrCode 10
;; Segment Not Present Fault
IsrWithErrCode 11
;; Stack Segment Fault
IsrWithErrCode 12
;; General Protection Fault
IsrWithErrCode 13
;; Page Fault
IsrWithErrCode 14
;; Reserved
IsrWithoutErrCode 15
IsrWithoutErrCode 21
IsrWithoutErrCode 22
IsrWithoutErrCode 23
IsrWithoutErrCode 24
IsrWithoutErrCode 25
IsrWithoutErrCode 26
IsrWithoutErrCode 27
IsrWithoutErrCode 28
IsrWithoutErrCode 29
IsrWithoutErrCode 30
IsrWithoutErrCode 31