X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fintr.inc;h=4bcc085f623157b09af2ab5a13f93f5dabe3c326;hb=033d820931e5930051b9df6a0c4a8183aa9299ee;hp=ac57934bce56a663f751f0348c3bc6ebbf317af5;hpb=0216fd8105a2b94aab6eb1c013c97882cacaf0c1;p=ld45_start_nothing diff --git a/src/intr.inc b/src/intr.inc index ac57934..4bcc085 100644 --- a/src/intr.inc +++ b/src/intr.inc @@ -1,44 +1,51 @@ ; vi:filetype=nasm ts=8 sts=8 sw=8: PIC1_CMD equ 020h +PIC1_DATA equ 021h PIC2_CMD equ 0a0h +PIC2_DATA equ 0a1h OCW2_EOI equ 020h OCW3_ISR equ 00bh IRQ_OFFSET equ 32 %define IRQ_TO_INTR(x) ((x) + IRQ_OFFSET) %define INTR_TO_IRQ(x) ((x) - IRQ_OFFSET) +%macro set_trap 2 + push dword %2 + push dword %1 + call set_intr + add esp, 8 +%endmacro %macro set_irq_vector 2 - push dword IRQ_TO_INTR(%1) push dword %2 + push dword IRQ_TO_INTR(%1) call set_intr + add esp, 8 %endmacro %macro mask_irq 1 %if %1 < 8 -%assign port PIC1_DATA -%assign mask (1 << %1) + in al, PIC1_DATA + or al, (1 << %1) + out PIC1_DATA, al %else -%assign port PIC2_DATA -%assign mask (1 << (%1 - 8)) + in al, PIC2_DATA + or al, (1 << (%1 - 8)) + out PIC2_DATA, al %endif - in al, port - or al, mask - out port, al %endmacro %macro unmask_irq 1 %if %1 < 8 -%assign port PIC1_DATA -%assign mask ~(1 << %1) + in al, PIC1_DATA + and al, ~(1 << %1) + out PIC1_DATA, al %else -%assign port PIC2_DATA -%assign mask ~(1 << (%1 - 8)) + in al, PIC2_DATA + and al, ~(1 << (%1 - 8)) + out PIC2_DATA, al %endif - in al, port - and al, mask - out port, al %endmacro %macro end_of_irq 1 @@ -52,5 +59,6 @@ IRQ_OFFSET equ 32 extern idt %ifndef INTR_ASM_ + extern init_intr extern set_intr %endif