sortof bounds-check while moving
[ld45_start_nothing] / src / keyb.asm
index 0f1d498..b953474 100644 (file)
@@ -4,10 +4,7 @@
 
        global kb_init
 kb_init:
-       push kbintr
-       push dword IRQ_TO_INTR(KB_IRQ)
-       call set_intr
-       add esp, 8
+       set_irq_vector KB_IRQ, kbintr
 
        ; enable keyboard interrupt
        mov eax, KB_CMD_GET_CMDBYTE
@@ -25,6 +22,8 @@ kb_init:
        jz .skipread
        call read_data
 .skipread:
+
+       unmask_irq KB_IRQ
        ret
 
        ; keyboard interrupt handler
@@ -39,17 +38,14 @@ kbintr:
        ; keystate[keycode] address in ebx
        xor ebx, ebx
        mov bl, al
+       and bl, 07fh
        add ebx, keystate
 
-       ; determine if it's a press or release
-       test al, 80h
-       jz .press
-       ; key release
-       mov byte [ebx], 0
-       jmp .eoi
-.press: ; key press
-       mov byte [ebx], 1
-
+       ; determine if it's a press or release (high bit set on release)
+       rol al, 1
+       and al, 1
+       xor al, 1
+       mov byte [ebx], al
 .eoi:
        cli
        end_of_irq KB_IRQ