diff options
Diffstat (limited to 'kernel/rs.s')
| -rw-r--r-- | kernel/rs.s | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/kernel/rs.s b/kernel/rs.s index 9f3d4a6..69d31ae 100644 --- a/kernel/rs.s +++ b/kernel/rs.s @@ -1,7 +1,20 @@ global rs_isr -extern rs_handler +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 @@ -12,7 +25,24 @@ rs_isr: mov fs, ax mov gs, ax - call rs_handler + 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 |
