diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2017-11-28 16:49:24 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2017-11-28 16:49:24 -0500 |
commit | 1dd05ebe61c95985b16d170bf2d3f081a02dfd7d (patch) | |
tree | 216d65aa993cba84c1b58e7152efd516b37121cc /keyboard.asm | |
download | minos-1dd05ebe61c95985b16d170bf2d3f081a02dfd7d.tar.gz |
Initial commit
Diffstat (limited to 'keyboard.asm')
-rw-r--r-- | keyboard.asm | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/keyboard.asm b/keyboard.asm new file mode 100644 index 0000000..444a6cf --- /dev/null +++ b/keyboard.asm @@ -0,0 +1,82 @@ +%ifndef _KEYBOARD_ASM +%define _KEYBOARD_ASM + +; REFERENCE(s): +; http://stanislavs.org/helppc/int_16-3.html + +kbd_read: + mov ah, 00h ; BIOS - read key (blocking) + int 16h ; BIOS keyboard service + mov [kbd_last_key], ax ; Record keypress + ; ah = scancode + ; al = ascii code + ret + + +kbd_read_async: + mov ah, 01h ; BIOS - read key (non-blocking) + int 16h ; BIOS keyboard service + mov [kbd_last_key], ax ; Record keypress + ; ah = scancode + ; al = ascii code + ret + + +kbd_status_shift: + mov ah, 02h ; BIOS - keyboard status + ; al = flags + ; + ; bit fields: + ; 7 = insert active + ; 6 = caps-lock active + ; 5 = num-lock active + ; 4 = scroll-lock active + ; 3 = ALT depresssed + ; 2 = CTRL depressed + ; 1 = left shift depressed + ; 0 = right shift depressed + mov [kbd_status_flags], byte al + int 16h ; BIOS keyboard service + + ret + + +kbd_set_rate: + push bp + mov bp, sp + + mov ah, 03h ; BIOS - keyboard service rate/delay + mov al, 05h ; CONTROL + ; 00 - set typematic rate + ; 01 - increase delay + ; 02 - decrease rate by 0.5 + ; 04 - disable typematic characters + ; 05 - set typematic rate & delay (used here) + + mov bh, byte [bp + 4] ; REPEAT (per second) + ; 00 - 30.0 01 - 26.7 02 - 24.0 03 - 21.8 + ; 04 - 20.0 05 - 18.5 06 - 17.1 07 - 16.0 + ; 08 - 15.0 09 - 13.3 0A - 12.0 0B - 10.9 + ; 0C - 10.0 0D - 9.2 0E - 8.6 0F - 8.0 + ; 10 - 7.5 11 - 6.7 12 - 6.0 13 - 5.5 + ; 14 - 5.0 15 - 4.6 16 - 4.3 17 - 4.0 + ; 18 - 3.7 19 - 3.3 1A - 3.0 1B - 2.7 + ; 1C - 2.5 1D - 2.3 1E - 2.1 1F - 2.0 + + mov bl, byte [bp + 6] ; DELAY + ; 00 - 250ms + ; 01 - 500ms + ; 02 - 750ms + ; 03 - 1000ms + + int 16h ; BIOS keyboard service + + mov sp, bp + pop bp + ret + + +; data +kbd_last_key: dw 0 +kbd_status_flags: db 0 +%endif |