From 3fa203b6b1aced308d9fc61eda1f0a0e9704482c Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 22 Apr 2019 20:15:48 +0200 Subject: [PATCH] idt in progress --- kaleid/kernel/cpu/isr.asm | 124 ++++++++++++++++++++++++++++++++++++++ kaleid/kernel/cpu/isr.inc | 59 ++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 kaleid/kernel/cpu/isr.asm create mode 100644 kaleid/kernel/cpu/isr.inc diff --git a/kaleid/kernel/cpu/isr.asm b/kaleid/kernel/cpu/isr.asm new file mode 100644 index 0000000..2f779d5 --- /dev/null +++ b/kaleid/kernel/cpu/isr.asm @@ -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 . ; +;=----------------------------------------------------------------------------=; + +%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 diff --git a/kaleid/kernel/cpu/isr.inc b/kaleid/kernel/cpu/isr.inc new file mode 100644 index 0000000..c50e4ab --- /dev/null +++ b/kaleid/kernel/cpu/isr.inc @@ -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 . ; +;=----------------------------------------------------------------------------=; +%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