X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=ld45_start_nothing;a=blobdiff_plain;f=src%2Fkeyb.asm;h=b953474240785f3840f0b86f45f084c5cc719454;hp=0f1d498370410ad390d7e7990377e132a5991dc1;hb=033d820931e5930051b9df6a0c4a8183aa9299ee;hpb=0216fd8105a2b94aab6eb1c013c97882cacaf0c1 diff --git a/src/keyb.asm b/src/keyb.asm index 0f1d498..b953474 100644 --- a/src/keyb.asm +++ b/src/keyb.asm @@ -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