diff options
Diffstat (limited to 'src/loader/int.asm')
-rw-r--r-- | src/loader/int.asm | 151 |
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 |