global rs_isr extern rsint_rx extern rsint_tx extern rsputs %define RSBASE 0x3F8 %define RSDATA RSBASE %define RSINTEN (RSBASE + 1) %define RSFIFOC (RSBASE + 2) %define RSINTID (RSBASE + 2) %define RSLINEC (RSBASE + 3) %define RSMODEMC (RSBASE + 4) %define RSLINES (RSBASE + 5) %define RSMODEMS (RSBASE + 6) %define RSSCRATCH (RSBASE + 7) rs_isr: pusha mov ax, ds push ax mov ax, 0x10 mov ds, ax mov es, ax mov fs, ax mov gs, ax mov dx, RSINTID in al, dx test al, 1 jnz .skip and al, 0x0E cmp al, 0x04 je .rx cmp al, 0x0C je .rx cmp al, 0x02 je .tx jmp .skip .tx: call rsint_tx jmp .skip .rx: call rsint_rx .skip: mov al, 0x20 out 0x20, al pop ax mov ds, ax mov es, ax mov fs, ax mov gs, ax popa iret