summaryrefslogtreecommitdiffhomepage
path: root/src/loader/int.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/loader/int.asm')
-rw-r--r--src/loader/int.asm151
1 files changed, 151 insertions, 0 deletions
diff --git a/src/loader/int.asm b/src/loader/int.asm
new file mode 100644
index 0000000..f6e66ae
--- /dev/null
+++ b/src/loader/int.asm
@@ -0,0 +1,151 @@
+; MIT License, Copyright (c) 2021 Marvin Borner
+
+bits 32
+
+%macro INT_REGISTER 1
+dd int%1
+%endmacro
+
+%macro INT_ERR 1
+int%1:
+ push %1
+ jmp int_common
+%endmacro
+
+%macro INT_NOERR 1
+int%1:
+ push 0
+ push %1
+ jmp int_common
+%endmacro
+
+extern int_handler
+int_common:
+ cld
+
+ pushad
+ push ds
+ push es
+ push fs
+ push gs
+
+ mov ax, 0x10
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+
+ push esp
+ call int_handler
+ mov esp, eax
+
+ pop gs
+ pop fs
+ pop es
+ pop ds
+ popad
+
+ add esp, 8
+ iret
+
+INT_NOERR 0
+INT_NOERR 1
+INT_NOERR 2
+INT_NOERR 3
+INT_NOERR 4
+INT_NOERR 5
+INT_NOERR 6
+INT_NOERR 7
+INT_ERR 8
+INT_NOERR 9
+INT_ERR 10
+INT_ERR 11
+INT_ERR 12
+INT_ERR 13
+INT_ERR 14
+INT_NOERR 15
+INT_NOERR 16
+INT_ERR 17
+INT_NOERR 18
+INT_NOERR 19
+INT_NOERR 20
+INT_NOERR 21
+INT_NOERR 22
+INT_NOERR 23
+INT_NOERR 24
+INT_NOERR 25
+INT_NOERR 26
+INT_NOERR 27
+INT_NOERR 28
+INT_NOERR 29
+INT_ERR 30
+INT_NOERR 31
+
+INT_NOERR 32
+INT_NOERR 33
+INT_NOERR 34
+INT_NOERR 35
+INT_NOERR 36
+INT_NOERR 37
+INT_NOERR 38
+INT_NOERR 39
+INT_NOERR 40
+INT_NOERR 41
+INT_NOERR 42
+INT_NOERR 43
+INT_NOERR 44
+INT_NOERR 45
+INT_NOERR 46
+INT_NOERR 47
+
+global int_table
+int_table:
+ INT_REGISTER 0
+ INT_REGISTER 1
+ INT_REGISTER 2
+ INT_REGISTER 3
+ INT_REGISTER 4
+ INT_REGISTER 5
+ INT_REGISTER 6
+ INT_REGISTER 7
+ INT_REGISTER 8
+ INT_REGISTER 9
+ INT_REGISTER 10
+ INT_REGISTER 11
+ INT_REGISTER 12
+ INT_REGISTER 13
+ INT_REGISTER 14
+ INT_REGISTER 15
+ INT_REGISTER 16
+ INT_REGISTER 17
+ INT_REGISTER 18
+ INT_REGISTER 19
+ INT_REGISTER 20
+ INT_REGISTER 21
+ INT_REGISTER 22
+ INT_REGISTER 23
+ INT_REGISTER 24
+ INT_REGISTER 25
+ INT_REGISTER 26
+ INT_REGISTER 27
+ INT_REGISTER 28
+ INT_REGISTER 29
+ INT_REGISTER 30
+ INT_REGISTER 31
+
+ INT_REGISTER 32
+ INT_REGISTER 33
+ INT_REGISTER 34
+ INT_REGISTER 35
+ INT_REGISTER 36
+ INT_REGISTER 37
+ INT_REGISTER 38
+ INT_REGISTER 39
+ INT_REGISTER 40
+ INT_REGISTER 41
+ INT_REGISTER 42
+ INT_REGISTER 43
+ INT_REGISTER 44
+ INT_REGISTER 45
+ INT_REGISTER 46
+ INT_REGISTER 47