idt in progress

This commit is contained in:
Adrien Bourmault 2019-04-22 20:15:48 +02:00
parent 79f7b736e6
commit 3fa203b6b1
2 changed files with 183 additions and 0 deletions

124
kaleid/kernel/cpu/isr.asm Normal file
View File

@ -0,0 +1,124 @@
;=----------------------------------------------------------------------------=;
; 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

59
kaleid/kernel/cpu/isr.inc Normal file
View File

@ -0,0 +1,59 @@
;=----------------------------------------------------------------------------=;
; GNU GPL OS/K ;
; ;
; Desc: Interrupt Descriptor Table related macros ;
; ;
; ;
; 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/>. ;
;=----------------------------------------------------------------------------=;
%macro pushAll 0
push rax
push rcx
push rdx
push rbx
push rbp
push rsi
push rdi
%endmacro
%macro popAll 0
pop rdi
pop rsi
pop rbp
pop rbx
pop rdx
pop rcx
pop rax
%endmacro
%macro IsrWithoutErrCode 1
global isr%1
isr%1:
cli
push byte 0
push byte %1
jmp isrHandler
%endmacro
%macro IsrWithErrCode 1
global isr%1
isr%1:
cli
push byte %1
jmp isrHandler
%endmacro