X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=ld45_start_nothing;a=blobdiff_plain;f=src%2Fintr.inc;h=a96b164b1e320484265cd13cdd62bf123e189c1d;hp=55a1c9debc6feec2317f739a7ed6ceabba86f5c2;hb=371bbe72cccdd5c40d5118bd0417fab062f3699a;hpb=72eec372bc82e28afee824b440fc76aad177d66b diff --git a/src/intr.inc b/src/intr.inc index 55a1c9d..a96b164 100644 --- a/src/intr.inc +++ b/src/intr.inc @@ -1,39 +1,45 @@ ; vi:filetype=nasm ts=8 sts=8 sw=8: -%define IRQ_OFFSET 32 +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_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 @@ -45,3 +51,8 @@ %endmacro extern idt + +%ifndef INTR_ASM_ + extern init_intr + extern set_intr +%endif