X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=ld45_start_nothing;a=blobdiff_plain;f=src%2Fintr.inc;fp=src%2Fintr.inc;h=95b18d6c9ba8cddf09e9337ca778a1d3fe69fbc1;hp=0000000000000000000000000000000000000000;hb=6bbbb04131204b22367677209d7de8c3f906d0e2;hpb=8a43487117b23806e478603f3c8ab72e37cd1882 diff --git a/src/intr.inc b/src/intr.inc new file mode 100644 index 0000000..95b18d6 --- /dev/null +++ b/src/intr.inc @@ -0,0 +1,45 @@ +; vi:filetype=nasm ts=8 sts=8 sw=8: + +%define IRQ_OFFSET 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 + call set_intr +%endmacro + +%macro mask_irq 1 +%if %1 < 8 +%assign port PIC1_DATA +%assign mask (1 << %1) +%else +%assign port PIC2_DATA +%assign mask (1 << (%1 - 8)) +%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) +%else +%assign port PIC2_DATA +%assign mask ~(1 << (%1 - 8)) +%endif + in al, port + and al, mask + out port, al +%endmacro + +%macro end_of_irq 1 + mov al, OCW2_EOI +%if %1 >= 8 + out PIC2_CMD, al +%endif + out PIC1_CMD, al +%endmacro