125 lines
3.2 KiB
NASM
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
|