projects
/
ld45_start_nothing
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sortof bounds-check while moving
[ld45_start_nothing]
/
src
/
keyb.asm
diff --git
a/src/keyb.asm
b/src/keyb.asm
index
0f1d498
..
b953474
100644
(file)
--- a/
src/keyb.asm
+++ b/
src/keyb.asm
@@
-4,10
+4,7
@@
global kb_init
kb_init:
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
; enable keyboard interrupt
mov eax, KB_CMD_GET_CMDBYTE
@@
-25,6
+22,8
@@
kb_init:
jz .skipread
call read_data
.skipread:
jz .skipread
call read_data
.skipread:
+
+ unmask_irq KB_IRQ
ret
; keyboard interrupt handler
ret
; keyboard interrupt handler
@@
-39,17
+38,14
@@
kbintr:
; keystate[keycode] address in ebx
xor ebx, ebx
mov bl, al
; keystate[keycode] address in ebx
xor ebx, ebx
mov bl, al
+ and bl, 07fh
add ebx, keystate
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
.eoi:
cli
end_of_irq KB_IRQ