diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-11-08 08:01:11 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-11-08 08:01:11 +0800 |
| commit | f3541313a873e431f79df94a7bd475e7a3db7b6c (patch) | |
| tree | 02ae9faafeab107bc9c4bbdf02b20e8a6ccbb310 /mubios/arch | |
| parent | 33321fd8115007f3f1bffa3a9969c2444d5a578b (diff) | |
| download | rcc-project-f3541313a873e431f79df94a7bd475e7a3db7b6c.tar.gz rcc-project-f3541313a873e431f79df94a7bd475e7a3db7b6c.tar.xz | |
[mubios] Implement INT 16h Keyboard Service
Signed-off-by: Richard Qin <richard.qin.x@gmail.com>
Diffstat (limited to 'mubios/arch')
| -rw-r--r-- | mubios/arch/interrupt.S | 1 | ||||
| -rw-r--r-- | mubios/arch/irq.S | 29 |
2 files changed, 30 insertions, 0 deletions
diff --git a/mubios/arch/interrupt.S b/mubios/arch/interrupt.S index 805cc50..021a83f 100644 --- a/mubios/arch/interrupt.S +++ b/mubios/arch/interrupt.S @@ -88,3 +88,4 @@ int1a_return: BIOS_SERVICE_ENTRY int10_entry, 0x10 BIOS_SERVICE_ENTRY int13_entry, 0x13 BIOS_SERVICE_ENTRY int15_entry, 0x15 + BIOS_SERVICE_ENTRY int16_entry, 0x16 diff --git a/mubios/arch/irq.S b/mubios/arch/irq.S index dbde8ad..324ae05 100644 --- a/mubios/arch/irq.S +++ b/mubios/arch/irq.S @@ -69,12 +69,41 @@ irq0_send_eoi: irq1_entry: push ax + push bx + push dx + push ds # Read the PS/2 scan code before sending EOI. in al, 0x60 + mov dl, al + + test dl, 0x80 + jnz irq1_send_eoi + + xor ax, ax + mov ds, ax + + mov bx, word ptr [0x041C] + mov ax, bx + add ax, 2 + cmp ax, 0x043E + jb irq1_next_tail_ready + mov ax, 0x041E +irq1_next_tail_ready: + cmp ax, word ptr [0x041A] + je irq1_send_eoi + + mov byte ptr [bx], 0 + mov byte ptr [bx + 1], dl + mov word ptr [0x041C], ax + +irq1_send_eoi: mov al, 0x20 out 0x20, al + pop ds + pop dx + pop bx pop ax iret |
