réplica de
https://github.com/Arnau478/quark.git
synced 2024-05-29 06:46:29 +02:00
58 líneas
800 B
NASM
58 líneas
800 B
NASM
|
[bits 32]
|
||
|
|
||
|
extern i686_isr_handler
|
||
|
|
||
|
%macro ISR_NOERRORCODE 1
|
||
|
|
||
|
global i686_ISR%1
|
||
|
i686_ISR%1:
|
||
|
push 0 ; No error code
|
||
|
push %1 ; Interrupt number
|
||
|
jmp isr_common
|
||
|
|
||
|
%endmacro
|
||
|
|
||
|
%macro ISR_ERRORCODE 1
|
||
|
|
||
|
global i686_ISR%1
|
||
|
i686_ISR%1:
|
||
|
; Error code pushed by the CPU
|
||
|
push %1 ; Interrupt number
|
||
|
jmp isr_common
|
||
|
|
||
|
%endmacro
|
||
|
|
||
|
%include "src/kernel/arch/i686/isrs_gen.inc"
|
||
|
|
||
|
isr_common:
|
||
|
pusha
|
||
|
|
||
|
; Push ds
|
||
|
xor eax, eax
|
||
|
mov ax, ds
|
||
|
push eax
|
||
|
|
||
|
; Ensure that we are on kernel mode
|
||
|
mov ax, 0x10
|
||
|
mov ds, ax
|
||
|
mov es, ax
|
||
|
mov fs, ax
|
||
|
mov gs, ax
|
||
|
|
||
|
; Call C handler
|
||
|
push esp
|
||
|
call i686_isr_handler
|
||
|
add esp, 4
|
||
|
|
||
|
; Restore old segment
|
||
|
pop eax
|
||
|
mov ds, ax
|
||
|
mov es, ax
|
||
|
mov fs, ax
|
||
|
mov gs, ax
|
||
|
|
||
|
; Return
|
||
|
popa
|
||
|
add esp, 8
|
||
|
iret
|