; C ISR routine [extern isr] ; Macro for creating a single ISR label ; We need to push a junk value on the stack first ; if the interrupt number is not 8 or 10-14. ; This is to properly align the stack for both exceptions ; having and not having error codes. %macro isr_label 1 [global isr_%1] isr_%1: %if ( (%1 != 8) && (%1 < 10 || %1 > 14) ) push eax ; junk value to take error code stack space %endif push eax mov al, %1 ; save interrupt number in al jmp isr_common %endmacro ; Loop to create all of our ISR labels %assign i 0 %rep 50 isr_label i %assign i i+1 %endrep ; The common ISR routine isr_common: push ebx push ecx push edx push edi push esi push ebp push ds push es push fs push gs push esp push eax ; TODO: currently commented since there is no isr() ; so the build will not break ; call isr add esp, 8 pop gs pop fs pop es pop ds pop ebp pop esi pop edi pop edx pop ecx pop ebx pop eax ; error code can be ignored now pop eax iret