145 lines
3.5 KiB
NASM
145 lines
3.5 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 CpuIdtInit
|
|
global divideByZero
|
|
extern idtPtr
|
|
extern IdtHandler
|
|
|
|
;;
|
|
;; Loads the IDT
|
|
;;
|
|
CpuIdtInit:
|
|
lidt [idtPtr]
|
|
ret
|
|
|
|
;;
|
|
;; Bug test
|
|
;;
|
|
divideByZero:
|
|
pushAll
|
|
mov eax, 17
|
|
mov ebx, 0
|
|
xor edx, edx
|
|
div ebx
|
|
popAll
|
|
ret
|
|
|
|
;;
|
|
;; ISR handler
|
|
;;
|
|
isrPreHandler:
|
|
pushAll
|
|
|
|
xor rax, rax
|
|
mov ax, ds
|
|
push rax
|
|
|
|
call IdtHandler
|
|
|
|
pop rax
|
|
mov ds, ax
|
|
|
|
popAll
|
|
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
|
|
IsrWithoutErrCode 32
|
|
|