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

125 lines
3.2 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
extern idtPtr
extern isrHandlerPrint
;;
;; Loads the IDT
;;
idtInit:
lidt [idtPtr]
ret
;;
;; ISR handler
;;
isrHandler:
pushAll
mov ax, ds
push rax
mov ax, 0x10
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
call isrHandlerPrint
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