Merge remote-tracking branch 'origin/keyboard_handle'
This commit is contained in:
commit
27589f5d2c
5 changed files with 809 additions and 11 deletions
258
kernel-rs/keycode
Normal file
258
kernel-rs/keycode
Normal file
|
|
@ -0,0 +1,258 @@
|
|||
0x01 escape pressed
|
||||
0x02 1 pressed
|
||||
0x03 2 pressed
|
||||
0x04 3 pressed
|
||||
0x05 4 pressed
|
||||
0x06 5 pressed
|
||||
0x07 6 pressed
|
||||
0x08 7 pressed
|
||||
0x09 8 pressed
|
||||
0x0A 9 pressed
|
||||
0x0B 0 (zero) pressed
|
||||
0x0C - pressed
|
||||
0x0D = pressed
|
||||
0x0E backspace pressed
|
||||
0x0F tab pressed
|
||||
0x10 Q pressed
|
||||
0x11 W pressed
|
||||
0x12 E pressed
|
||||
0x13 R pressed
|
||||
0x14 T pressed
|
||||
0x15 Y pressed
|
||||
0x16 U pressed
|
||||
0x17 I pressed
|
||||
0x18 O pressed
|
||||
0x19 P pressed
|
||||
0x1A [ pressed
|
||||
0x1B ] pressed
|
||||
0x1C enter pressed
|
||||
0x1D left control pressed
|
||||
0x1E A pressed
|
||||
0x1F S pressed
|
||||
0x20 D pressed
|
||||
0x21 F pressed
|
||||
0x22 G pressed
|
||||
0x23 H pressed
|
||||
0x24 J pressed
|
||||
0x25 K pressed
|
||||
0x26 L pressed
|
||||
0x27 ; pressed
|
||||
0x28 ' (single quote) pressed
|
||||
0x29 ` (back tick) pressed
|
||||
0x2A left shift pressed
|
||||
0x2B \ pressed
|
||||
0x2C Z pressed
|
||||
0x2D X pressed
|
||||
0x2E C pressed
|
||||
0x2F V pressed
|
||||
0x30 B pressed
|
||||
0x31 N pressed
|
||||
0x32 M pressed
|
||||
0x33 , pressed
|
||||
0x34 . pressed
|
||||
0x35 / pressed
|
||||
0x36 right shift pressed
|
||||
0x37 (keypad) * pressed
|
||||
0x38 left alt pressed
|
||||
0x39 space pressed
|
||||
0x3A CapsLock pressed
|
||||
0x3B F1 pressed
|
||||
0x3C F2 pressed
|
||||
0x3D F3 pressed
|
||||
0x3E F4 pressed
|
||||
0x3F F5 pressed
|
||||
0x40 F6 pressed
|
||||
0x41 F7 pressed
|
||||
0x42 F8 pressed
|
||||
0x43 F9 pressed
|
||||
0x44 F10 pressed
|
||||
0x45 NumberLock pressed
|
||||
0x46 ScrollLock pressed
|
||||
0x47 (keypad) 7 pressed
|
||||
0x48 (keypad) 8 pressed
|
||||
0x49 (keypad) 9 pressed
|
||||
0x4A (keypad) - pressed
|
||||
0x4B (keypad) 4 pressed
|
||||
0x4C (keypad) 5 pressed
|
||||
0x4D (keypad) 6 pressed
|
||||
0x4E (keypad) + pressed
|
||||
0x4F (keypad) 1 pressed
|
||||
0x50 (keypad) 2 pressed
|
||||
0x51 (keypad) 3 pressed
|
||||
0x52 (keypad) 0 pressed
|
||||
0x53 (keypad) . pressed
|
||||
0x57 F11 pressed
|
||||
0x58 F12 pressed
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
0x81 escape released
|
||||
0x82 1 released
|
||||
0x83 2 released
|
||||
0x84 3 released
|
||||
0x85 4 released
|
||||
0x86 5 released
|
||||
0x87 6 released
|
||||
0x88 7 released
|
||||
0x89 8 released
|
||||
0x8A 9 released
|
||||
0x8B 0 (zero) released
|
||||
0x8C - released
|
||||
0x8D = released
|
||||
0x8E backspace released
|
||||
0x8F tab released
|
||||
0x90 Q released
|
||||
0x91 W released
|
||||
0x92 E released
|
||||
0x93 R released
|
||||
0x94 T released
|
||||
0x95 Y released
|
||||
0x96 U released
|
||||
0x97 I released
|
||||
0x98 O released
|
||||
0x99 P released
|
||||
0x9A [ released
|
||||
0x9B ] released
|
||||
0x9C enter released
|
||||
0x9D left control released
|
||||
0x9E A released
|
||||
0x9F S released
|
||||
0xA0 D released
|
||||
0xA1 F released
|
||||
0xA2 G released
|
||||
0xA3 H released
|
||||
0xA4 J released
|
||||
0xA5 K released
|
||||
0xA6 L released
|
||||
0xA7 ; released
|
||||
0xA8 ' (single quote) released
|
||||
0xA9 ` (back tick) released
|
||||
0xAA left shift released
|
||||
0xAB \ released
|
||||
0xAC Z released
|
||||
0xAD X released
|
||||
0xAE C released
|
||||
0xAF V released
|
||||
0xB0 B released
|
||||
0xB1 N released
|
||||
0xB2 M released
|
||||
0xB3 , released
|
||||
0xB4 . released
|
||||
0xB5 / released
|
||||
0xB6 right shift released
|
||||
0xB7 (keypad) * released
|
||||
0xB8 left alt released
|
||||
0xB9 space released
|
||||
0xBA CapsLock released
|
||||
0xBB F1 released
|
||||
0xBC F2 released
|
||||
0xBD F3 released
|
||||
0xBE F4 released
|
||||
0xBF F5 released
|
||||
0xC0 F6 released
|
||||
0xC1 F7 released
|
||||
0xC2 F8 released
|
||||
0xC3 F9 released
|
||||
0xC4 F10 released
|
||||
0xC5 NumberLock released
|
||||
0xC6 ScrollLock released
|
||||
0xC7 (keypad) 7 released
|
||||
0xC8 (keypad) 8 released
|
||||
0xC9 (keypad) 9 released
|
||||
0xCA (keypad) - released
|
||||
0xCB (keypad) 4 released
|
||||
0xCC (keypad) 5 released
|
||||
0xCD (keypad) 6 released
|
||||
0xCE (keypad) + released
|
||||
0xCF (keypad) 1 released
|
||||
0xD0 (keypad) 2 released
|
||||
0xD1 (keypad) 3 released
|
||||
0xD2 (keypad) 0 released
|
||||
0xD3 (keypad) . released
|
||||
0xD7 F11 released
|
||||
0xD8 F12 released
|
||||
0xE0, 0x10 (multimedia) previous track pressed
|
||||
0xE0, 0x19 (multimedia) next track pressed
|
||||
0xE0, 0x1C (keypad) enter pressed
|
||||
0xE0, 0x1D right control pressed
|
||||
0xE0, 0x20 (multimedia) mute pressed
|
||||
0xE0, 0x21 (multimedia) calculator pressed
|
||||
0xE0, 0x22 (multimedia) play pressed
|
||||
0xE0, 0x24 (multimedia) stop pressed
|
||||
0xE0, 0x2E (multimedia) volume down pressed
|
||||
0xE0, 0x30 (multimedia) volume up pressed
|
||||
0xE0, 0x32 (multimedia) WWW home pressed
|
||||
0xE0, 0x35 (keypad) / pressed
|
||||
0xE0, 0x38 right alt (or altGr) pressed
|
||||
0xE0, 0x47 home pressed
|
||||
0xE0, 0x48 cursor up pressed
|
||||
0xE0, 0x49 page up pressed
|
||||
0xE0, 0x4B cursor left pressed
|
||||
0xE0, 0x4D cursor right pressed
|
||||
0xE0, 0x4F end pressed
|
||||
0xE0, 0x50 cursor down pressed
|
||||
0xE0, 0x51 page down pressed
|
||||
0xE0, 0x52 insert pressed
|
||||
0xE0, 0x53 delete pressed
|
||||
0xE0, 0x5B left GUI pressed
|
||||
0xE0, 0x5C right GUI pressed
|
||||
0xE0, 0x5D "apps" pressed
|
||||
0xE0, 0x5E (ACPI) power pressed
|
||||
0xE0, 0x5F (ACPI) sleep pressed
|
||||
0xE0, 0x63 (ACPI) wake pressed
|
||||
0xE0, 0x65 (multimedia) WWW search pressed
|
||||
0xE0, 0x66 (multimedia) WWW favorites pressed
|
||||
0xE0, 0x67 (multimedia) WWW refresh pressed
|
||||
0xE0, 0x68 (multimedia) WWW stop pressed
|
||||
0xE0, 0x69 (multimedia) WWW forward pressed
|
||||
0xE0, 0x6A (multimedia) WWW back pressed
|
||||
0xE0, 0x6B (multimedia) my computer pressed
|
||||
0xE0, 0x6C (multimedia) email pressed
|
||||
0xE0, 0x6D (multimedia) media select pressed
|
||||
0xE0, 0x90 (multimedia) previous track released
|
||||
0xE0, 0x99 (multimedia) next track released
|
||||
0xE0, 0x9C (keypad) enter released
|
||||
0xE0, 0x9D right control released
|
||||
0xE0, 0xA0 (multimedia) mute released
|
||||
0xE0, 0xA1 (multimedia) calculator released
|
||||
0xE0, 0xA2 (multimedia) play released
|
||||
0xE0, 0xA4 (multimedia) stop released
|
||||
0xE0, 0xAE (multimedia) volume down released
|
||||
0xE0, 0xB0 (multimedia) volume up released
|
||||
0xE0, 0xB2 (multimedia) WWW home released
|
||||
0xE0, 0xB5 (keypad) / released
|
||||
0xE0, 0xB8 right alt (or altGr) released
|
||||
0xE0, 0xC7 home released
|
||||
0xE0, 0xC8 cursor up released
|
||||
0xE0, 0xC9 page up released
|
||||
0xE0, 0xCB cursor left released
|
||||
0xE0, 0xCD cursor right released
|
||||
0xE0, 0xCF end released
|
||||
0xE0, 0xD0 cursor down released
|
||||
0xE0, 0xD1 page down released
|
||||
0xE0, 0xD2 insert released
|
||||
0xE0, 0xD3 delete released
|
||||
0xE0, 0xDB left GUI released
|
||||
0xE0, 0xDC right GUI released
|
||||
0xE0, 0xDD "apps" released
|
||||
0xE0, 0xDE (ACPI) power released
|
||||
0xE0, 0xDF (ACPI) sleep released
|
||||
0xE0, 0xE3 (ACPI) wake released
|
||||
0xE0, 0xE5 (multimedia) WWW search released
|
||||
0xE0, 0xE6 (multimedia) WWW favorites released
|
||||
0xE0, 0xE7 (multimedia) WWW refresh released
|
||||
0xE0, 0xE8 (multimedia) WWW stop released
|
||||
0xE0, 0xE9 (multimedia) WWW forward released
|
||||
0xE0, 0xEA (multimedia) WWW back released
|
||||
0xE0, 0xEB (multimedia) my computer released
|
||||
0xE0, 0xEC (multimedia) email released
|
||||
0xE0, 0xED (multimedia) media select released
|
||||
0xE0, 0x2A, 0xE0, 0x37 print screen pressed
|
||||
0xE0, 0xB7, 0xE0, 0xAA print screen released
|
||||
0xE1, 0x1D, 0x45, 0xE1, 0x9D, 0xC5 pause pressed
|
||||
249
kernel-rs/keycode2
Normal file
249
kernel-rs/keycode2
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
0x01 F9 pressed
|
||||
0x03 F5 pressed
|
||||
0x04 F3 pressed
|
||||
0x05 F1 pressed
|
||||
0x06 F2 pressed
|
||||
0x07 F12 pressed
|
||||
0x09 F10 pressed
|
||||
0x0A F8 pressed
|
||||
0x0B F6 pressed
|
||||
0x0C F4 pressed
|
||||
0x0D tab pressed
|
||||
0x0E ` (back tick) pressed
|
||||
0x11 left alt pressed
|
||||
0x12 left shift pressed
|
||||
0x14 left control pressed
|
||||
0x15 Q pressed
|
||||
0x16 1 pressed
|
||||
0x1A Z pressed
|
||||
0x1B S pressed
|
||||
0x1C A pressed
|
||||
0x1D W pressed
|
||||
0x1E 2 pressed
|
||||
0x21 C pressed
|
||||
0x22 X pressed
|
||||
0x23 D pressed
|
||||
0x24 E pressed
|
||||
0x25 4 pressed
|
||||
0x26 3 pressed
|
||||
0x29 space pressed
|
||||
0x2A V pressed
|
||||
0x2B F pressed
|
||||
0x2C T pressed
|
||||
0x2D R pressed
|
||||
0x2E 5 pressed
|
||||
0x31 N pressed
|
||||
0x32 B pressed
|
||||
0x33 H pressed
|
||||
0x34 G pressed
|
||||
0x35 Y pressed
|
||||
0x36 6 pressed
|
||||
0x3A M pressed
|
||||
0x3B J pressed
|
||||
0x3C U pressed
|
||||
0x3D 7 pressed
|
||||
0x3E 8 pressed
|
||||
0x41 , pressed
|
||||
0x42 K pressed
|
||||
0x43 I pressed
|
||||
0x44 O pressed
|
||||
0x45 0 (zero) pressed
|
||||
0x46 9 pressed
|
||||
0x49 . pressed
|
||||
0x4A / pressed
|
||||
0x4B L pressed
|
||||
0x4C ; pressed
|
||||
0x4D P pressed
|
||||
0x4E - pressed
|
||||
0x52 ' pressed
|
||||
0x54 [ pressed
|
||||
0x55 = pressed
|
||||
0x58 CapsLock pressed
|
||||
0x59 right shift pressed
|
||||
0x5A enter pressed
|
||||
0x5B ] pressed
|
||||
0x5D \ pressed
|
||||
0x66 backspace pressed
|
||||
0x69 (keypad) 1 pressed
|
||||
0x6B (keypad) 4 pressed
|
||||
0x6C (keypad) 7 pressed
|
||||
0x70 (keypad) 0 pressed
|
||||
0x71 (keypad) . pressed
|
||||
0x72 (keypad) 2 pressed
|
||||
0x73 (keypad) 5 pressed
|
||||
0x74 (keypad) 6 pressed
|
||||
0x75 (keypad) 8 pressed
|
||||
0x76 escape pressed
|
||||
0x77 NumberLock pressed
|
||||
0x78 F11 pressed
|
||||
0x79 (keypad) + pressed
|
||||
0x7A (keypad) 3 pressed
|
||||
0x7B (keypad) - pressed
|
||||
0x7C (keypad) * pressed
|
||||
0x7D (keypad) 9 pressed
|
||||
0x7E ScrollLock pressed
|
||||
0x83 F7 pressed
|
||||
0xE0, 0x10 (multimedia) WWW search pressed
|
||||
0xE0, 0x11 right alt pressed
|
||||
0xE0, 0x14 right control pressed
|
||||
0xE0, 0x15 (multimedia) previous track pressed
|
||||
0xE0, 0x18 (multimedia) WWW favourites pressed
|
||||
0xE0, 0x1F left GUI pressed
|
||||
0xE0, 0x20 (multimedia) WWW refresh pressed
|
||||
0xE0, 0x21 (multimedia) volume down pressed
|
||||
0xE0, 0x23 (multimedia) mute pressed
|
||||
0xE0, 0x27 right GUI pressed
|
||||
0xE0, 0x28 (multimedia) WWW stop pressed
|
||||
0xE0, 0x2B (multimedia) calculator pressed
|
||||
0xE0, 0x2F apps pressed
|
||||
0xE0, 0x30 (multimedia) WWW forward pressed
|
||||
0xE0, 0x32 (multimedia) volume up pressed
|
||||
0xE0, 0x34 (multimedia) play/pause pressed
|
||||
0xE0, 0x37 (ACPI) power pressed
|
||||
0xE0, 0x38 (multimedia) WWW back pressed
|
||||
0xE0, 0x3A (multimedia) WWW home pressed
|
||||
0xE0, 0x3B (multimedia) stop pressed
|
||||
0xE0, 0x3F (ACPI) sleep pressed
|
||||
0xE0, 0x40 (multimedia) my computer pressed
|
||||
0xE0, 0x48 (multimedia) email pressed
|
||||
0xE0, 0x4A (keypad) / pressed
|
||||
0xE0, 0x4D (multimedia) next track pressed
|
||||
0xE0, 0x50 (multimedia) media select pressed
|
||||
0xE0, 0x5A (keypad) enter pressed
|
||||
0xE0, 0x5E (ACPI) wake pressed
|
||||
0xE0, 0x69 end pressed
|
||||
0xE0, 0x6B cursor left pressed
|
||||
0xE0, 0x6C home pressed
|
||||
0xE0, 0x70 insert pressed
|
||||
0xE0, 0x71 delete pressed
|
||||
0xE0, 0x72 cursor down pressed
|
||||
0xE0, 0x74 cursor right pressed
|
||||
0xE0, 0x75 cursor up pressed
|
||||
0xE0, 0x7A page down pressed
|
||||
0xE0, 0x7D page up pressed
|
||||
0xF0, 0x01 F9 released
|
||||
0xF0, 0x03 F5 released
|
||||
0xF0, 0x04 F3 released
|
||||
0xF0, 0x05 F1 released
|
||||
0xF0, 0x06 F2 released
|
||||
0xF0, 0x07 F12 released
|
||||
0xF0, 0x09 F10 released
|
||||
0xF0, 0x0A F8 released
|
||||
0xF0, 0x0B F6 released
|
||||
0xF0, 0x0C F4 released
|
||||
0xF0, 0x0D tab released
|
||||
0xF0, 0x0E ` (back tick) released
|
||||
0xF0, 0x11 left alt released
|
||||
0xF0, 0x12 left shift released
|
||||
0xF0, 0x14 left control released
|
||||
0xF0, 0x15 Q released
|
||||
0xF0, 0x16 1 released
|
||||
0xF0, 0x1A Z released
|
||||
0xF0, 0x1B S released
|
||||
0xF0, 0x1C A released
|
||||
0xF0, 0x1D W released
|
||||
0xF0, 0x1E 2 released
|
||||
0xF0, 0x21 C released
|
||||
0xF0, 0x22 X released
|
||||
0xF0, 0x23 D released
|
||||
0xF0, 0x24 E released
|
||||
0xF0, 0x25 4 released
|
||||
0xF0, 0x26 3 released
|
||||
0xF0, 0x29 space released
|
||||
0xF0, 0x2A V released
|
||||
0xF0, 0x2B F released
|
||||
0xF0, 0x2C T released
|
||||
0xF0, 0x2D R released
|
||||
0xF0, 0x2E 5 released
|
||||
0xF0, 0x31 N released
|
||||
0xF0, 0x32 B released
|
||||
0xF0, 0x33 H released
|
||||
0xF0, 0x34 G released
|
||||
0xF0, 0x35 Y released
|
||||
0xF0, 0x36 6 released
|
||||
0xF0, 0x3A M released
|
||||
0xF0, 0x3B J released
|
||||
0xF0, 0x3C U released
|
||||
0xF0, 0x3D 7 released
|
||||
0xF0, 0x3E 8 released
|
||||
0xF0, 0x41 , released
|
||||
0xF0, 0x42 K released
|
||||
0xF0, 0x43 I released
|
||||
0xF0, 0x44 O released
|
||||
0xF0, 0x45 0 (zero) released
|
||||
0xF0, 0x46 9 released
|
||||
0xF0, 0x49 . released
|
||||
0xF0, 0x4A / released
|
||||
0xF0, 0x4B L released
|
||||
0xF0, 0x4C ; released
|
||||
0xF0, 0x4D P released
|
||||
0xF0, 0x4E - released
|
||||
0xF0, 0x52 ' released
|
||||
0xF0, 0x54 [ released
|
||||
0xF0, 0x55 = released
|
||||
0xF0, 0x58 CapsLock released
|
||||
0xF0, 0x59 right shift released
|
||||
0xF0, 0x5A enter released
|
||||
0xF0, 0x5B ] released
|
||||
0xF0, 0x5D \ released
|
||||
0xF0, 0x66 backspace released
|
||||
0xF0, 0x69 (keypad) 1 released
|
||||
0xF0, 0x6B (keypad) 4 released
|
||||
0xF0, 0x6C (keypad) 7 released
|
||||
0xF0, 0x70 (keypad) 0 released
|
||||
0xF0, 0x71 (keypad) . released
|
||||
0xF0, 0x72 (keypad) 2 released
|
||||
0xF0, 0x73 (keypad) 5 released
|
||||
0xF0, 0x74 (keypad) 6 released
|
||||
0xF0, 0x75 (keypad) 8 released
|
||||
0xF0, 0x76 escape released
|
||||
0xF0, 0x77 NumberLock released
|
||||
0xF0, 0x78 F11 released
|
||||
0xF0, 0x79 (keypad) + released
|
||||
0xF0, 0x7A (keypad) 3 released
|
||||
0xF0, 0x7B (keypad) - released
|
||||
0xF0, 0x7C (keypad) * released
|
||||
0xF0, 0x7D (keypad) 9 released
|
||||
0xF0, 0x7E ScrollLock released
|
||||
0xF0, 0x83 F7 released
|
||||
0xE0, 0x12, 0xE0, 0x7C print screen pressed
|
||||
0xE0, 0xF0, 0x10 (multimedia) WWW search released
|
||||
0xE0, 0xF0, 0x11 right alt released
|
||||
0xE0, 0xF0, 0x14 right control released
|
||||
0xE0, 0xF0, 0x15 (multimedia) previous track released
|
||||
0xE0, 0xF0, 0x18 (multimedia) WWW favourites released
|
||||
0xE0, 0xF0, 0x1F left GUI released
|
||||
0xE0, 0xF0, 0x20 (multimedia) WWW refresh released
|
||||
0xE0, 0xF0, 0x21 (multimedia) volume down released
|
||||
0xE0, 0xF0, 0x23 (multimedia) mute released
|
||||
0xE0, 0xF0, 0x27 right GUI released
|
||||
0xE0, 0xF0, 0x28 (multimedia) WWW stop released
|
||||
0xE0, 0xF0, 0x2B (multimedia) calculator released
|
||||
0xE0, 0xF0, 0x2F apps released
|
||||
0xE0, 0xF0, 0x30 (multimedia) WWW forward released
|
||||
0xE0, 0xF0, 0x32 (multimedia) volume up released
|
||||
0xE0, 0xF0, 0x34 (multimedia) play/pause released
|
||||
0xE0, 0xF0, 0x37 (ACPI) power released
|
||||
0xE0, 0xF0, 0x38 (multimedia) WWW back released
|
||||
0xE0, 0xF0, 0x3A (multimedia) WWW home released
|
||||
0xE0, 0xF0, 0x3B (multimedia) stop released
|
||||
0xE0, 0xF0, 0x3F (ACPI) sleep released
|
||||
0xE0, 0xF0, 0x40 (multimedia) my computer released
|
||||
0xE0, 0xF0, 0x48 (multimedia) email released
|
||||
0xE0, 0xF0, 0x4A (keypad) / released
|
||||
0xE0, 0xF0, 0x4D (multimedia) next track released
|
||||
0xE0, 0xF0, 0x50 (multimedia) media select released
|
||||
0xE0, 0xF0, 0x5A (keypad) enter released
|
||||
0xE0, 0xF0, 0x5E (ACPI) wake released
|
||||
0xE0, 0xF0, 0x69 end released
|
||||
0xE0, 0xF0, 0x6B cursor left released
|
||||
0xE0, 0xF0, 0x6C home released
|
||||
0xE0, 0xF0, 0x70 insert released
|
||||
0xE0, 0xF0, 0x71 delete released
|
||||
0xE0, 0xF0, 0x72 cursor down released
|
||||
0xE0, 0xF0, 0x74 cursor right released
|
||||
0xE0, 0xF0, 0x75 cursor up released
|
||||
0xE0, 0xF0, 0x7A page down released
|
||||
0xE0, 0xF0, 0x7D page up released
|
||||
0xE0, 0xF0, 0x7C, 0xE0, 0xF0, 0x12 print screen released
|
||||
0xE1, 0x14, 0x77, 0xE1, 0xF0, 0x14, 0xF0, 0x77 pause pressed
|
||||
|
|
@ -4,27 +4,131 @@ use cpuio;
|
|||
use context;
|
||||
// use vga::color::{Color, ColorCode};
|
||||
|
||||
pub static SCANCODE_TO_ASCII: [u8; 59] = *b"??1234567890-=??qwertyuiop[]\n?asdfghjkl;'`?\\zxcvbnm,./?*? ?";
|
||||
const MAX_KEYS: usize = 59;
|
||||
const KEYMAP_US: [[u8;2]; MAX_KEYS] = [
|
||||
*b"\0\0",
|
||||
*b"\0\0",//escape
|
||||
*b"1!",
|
||||
*b"2@",
|
||||
*b"3#",
|
||||
*b"4$",
|
||||
*b"5%",
|
||||
*b"6^",
|
||||
*b"7&",
|
||||
*b"8*",
|
||||
*b"9(",
|
||||
*b"0)",
|
||||
*b"-_",
|
||||
*b"=+",
|
||||
*b"\0\0",//backspace
|
||||
*b"\0\0",//tab
|
||||
*b"qQ",
|
||||
*b"wW",
|
||||
*b"eE",
|
||||
*b"rR",
|
||||
*b"tT",
|
||||
*b"yY",
|
||||
*b"uU",
|
||||
*b"iI",
|
||||
*b"oO",
|
||||
*b"pP",
|
||||
*b"[{",
|
||||
*b"]}",
|
||||
*b"\n\n",
|
||||
*b"\0\0",//left_control
|
||||
*b"aA",
|
||||
*b"sS",
|
||||
*b"dD",
|
||||
*b"fF",
|
||||
*b"gG",
|
||||
*b"hH",
|
||||
*b"jJ",
|
||||
*b"kK",
|
||||
*b"lL",
|
||||
*b";:",
|
||||
*b"'\"",
|
||||
*b"`~",
|
||||
*b"\0\0",//left shift
|
||||
*b"\\|",
|
||||
*b"zZ",
|
||||
*b"xX",
|
||||
*b"cC",
|
||||
*b"vV",
|
||||
*b"bB",
|
||||
*b"nN",
|
||||
*b"mM",
|
||||
*b",<",
|
||||
*b".>",
|
||||
*b"/?",
|
||||
*b"\0\0",//right shift
|
||||
*b"**",
|
||||
*b"\0\0",//left alt
|
||||
*b" ",
|
||||
*b"\0\0",//capslock
|
||||
];
|
||||
|
||||
const TOUCH_RELEASE: u8 = 1 << 7;
|
||||
|
||||
fn check_key_state(key: u8) -> (bool, usize) {
|
||||
if (key & TOUCH_RELEASE) == TOUCH_RELEASE {
|
||||
(true, (key - TOUCH_RELEASE) as usize)
|
||||
} else {
|
||||
(false, key as usize)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn kbd_callback(context: &mut context::Context) {
|
||||
static mut SHIFT: bool = false;
|
||||
static mut CTRL: bool = false;
|
||||
static mut ALT: bool = false;
|
||||
// let terminal_two: vga::terminal::Terminal = vga::Screen::new();
|
||||
let control = unsafe { cpuio::inb(0x64) };
|
||||
if (control & 1) == 1 {
|
||||
let scancode = unsafe { cpuio::inb(0x60) };
|
||||
let (is_release, scancode) = check_key_state(scancode);
|
||||
//TODO implement logic to translate scancode->ascii
|
||||
match self::SCANCODE_TO_ASCII.get(scancode as usize) {
|
||||
Some(&b'1') => {
|
||||
context.switch_term();
|
||||
context.current_term().flush();
|
||||
}
|
||||
Some(ascii) => {
|
||||
let mut terminal = context.current_term();
|
||||
terminal.keypress(*ascii);
|
||||
unsafe {//TODO remove unsafe
|
||||
match self::KEYMAP_US.get(scancode as usize) {
|
||||
Some(b"\0\0") => {
|
||||
match scancode {
|
||||
0x2A | 0x36 => {SHIFT = !is_release},
|
||||
0x38 => {ALT = !is_release},
|
||||
0x1D => {CTRL = !is_release},
|
||||
0x0F => {
|
||||
context.current_term().keypress('T' as u8);
|
||||
context.switch_term();
|
||||
context.current_term().keypress('T' as u8);
|
||||
context.current_term().flush();
|
||||
context.current_term().keypress('T' as u8);
|
||||
context.current_term().keypress('T' as u8);
|
||||
context.current_term().keypress('T' as u8);
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
},
|
||||
// Some(b"2@") if ALT => {
|
||||
// context.switch_term();
|
||||
// context.current_term().flush();
|
||||
// },
|
||||
Some(b"1!") if CTRL => {
|
||||
context.switch_term();
|
||||
context.current_term().keypress('>' as u8);
|
||||
context.current_term().flush();
|
||||
},
|
||||
Some(ascii) if !is_release => {
|
||||
let mut terminal = context.current_term();
|
||||
if SHIFT {
|
||||
terminal.keypress(ascii[1]);
|
||||
}
|
||||
else {
|
||||
terminal.keypress(ascii[0]);
|
||||
}
|
||||
},
|
||||
Some(_) => {},
|
||||
None =>{},
|
||||
// None => println!("nokey ctrl {:x}", control),
|
||||
}
|
||||
}
|
||||
// current_screen.flush();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,10 +12,22 @@ extern crate rlibc;
|
|||
mod vga;
|
||||
|
||||
#[allow(dead_code)]
|
||||
mod cpuio;
|
||||
mod keyboard;
|
||||
#[macro_use]
|
||||
mod context;
|
||||
mod keyboard;
|
||||
|
||||
#[allow(dead_code)]
|
||||
mod cpuio;
|
||||
|
||||
// fn check_shift(key: u8) -> u8 {
|
||||
// print!("{:b} vs {:b}\n", key as u8, (1<<7) as u8);
|
||||
// if (key >> 7 & 1) == 1 {
|
||||
// print!("MATCH");
|
||||
// key - (1 << 7)
|
||||
// } else {
|
||||
// key
|
||||
// }
|
||||
// }
|
||||
#[no_mangle]
|
||||
pub extern fn kmain() -> ! {
|
||||
// use vga::VgaScreen;
|
||||
|
|
|
|||
175
kernel-rs/src/vga_buffer.rs
Normal file
175
kernel-rs/src/vga_buffer.rs
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
// Copyright 2016 Philipp Oppermann. See the README.md
|
||||
// file at the top-level directory of this distribution.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use core::ptr::Unique;
|
||||
use core::fmt;
|
||||
use spin::Mutex;
|
||||
use volatile::Volatile;
|
||||
|
||||
const BUFFER_HEIGHT: usize = 25;
|
||||
const BUFFER_WIDTH: usize = 80;
|
||||
|
||||
pub static WRITER: Mutex<Writer> = Mutex::new(Writer {
|
||||
column_position: 0,
|
||||
color_code: ColorCode::new(Color::White, Color::Black),
|
||||
vgabuffer: unsafe { Unique::new_unchecked(0xb8000 as *mut _) },
|
||||
});
|
||||
|
||||
// cursor is lightgray for everyone
|
||||
static CURSOR: ScreenChar = ScreenChar {
|
||||
ascii_character: b' ',
|
||||
color_code: ColorCode::new(Color::LightGray, Color::LightGray),
|
||||
};
|
||||
|
||||
// blank is black for everyone, could make screens choose this
|
||||
static BLANK: ScreenChar = ScreenChar {
|
||||
ascii_character: b' ',
|
||||
color_code: ColorCode::new(Color::White, Color::Black),
|
||||
};
|
||||
|
||||
pub struct Writer {
|
||||
column_position: usize,
|
||||
pub color_code: ColorCode,
|
||||
vgabuffer: Unique<Buffer>,
|
||||
}
|
||||
|
||||
macro_rules! println {
|
||||
($fmt:expr) => (print!(concat!($fmt, "\n")));
|
||||
($fmt:expr, $($arg:tt)*) => (print!(concat!($fmt, "\n"), $($arg)*));
|
||||
}
|
||||
|
||||
macro_rules! print {
|
||||
($($arg:tt)*) => ({
|
||||
$crate::vga_buffer::print(format_args!($($arg)*));
|
||||
});
|
||||
}
|
||||
|
||||
pub fn print(args: fmt::Arguments) {
|
||||
use core::fmt::Write;
|
||||
WRITER.lock().write_fmt(args).unwrap();
|
||||
}
|
||||
|
||||
impl Writer {
|
||||
pub fn reset_screen(&mut self)
|
||||
{
|
||||
let color_code = self.color_code;
|
||||
for row in 1..BUFFER_HEIGHT {
|
||||
for col in 0..BUFFER_WIDTH {
|
||||
self.buffer().chars[row][col].write(ScreenChar {
|
||||
ascii_character: b' ',
|
||||
color_code,
|
||||
});
|
||||
}
|
||||
}
|
||||
self.column_position = 0;
|
||||
}
|
||||
|
||||
pub fn write_byte(&mut self, byte: u8) {
|
||||
match byte {
|
||||
b'\n' => self.new_line(),
|
||||
byte => {
|
||||
if self.column_position >= BUFFER_WIDTH {
|
||||
self.new_line();
|
||||
}
|
||||
let row = BUFFER_HEIGHT - 1;
|
||||
let col = self.column_position;
|
||||
let color_code = self.color_code;
|
||||
self.buffer().chars[row][col].write(ScreenChar {
|
||||
ascii_character: byte,
|
||||
color_code: color_code,
|
||||
});
|
||||
self.column_position += 1;
|
||||
}
|
||||
}
|
||||
if self.column_position >= BUFFER_WIDTH {
|
||||
self.new_line();
|
||||
}
|
||||
let row = BUFFER_HEIGHT - 1;
|
||||
let col = self.column_position;
|
||||
self.buffer().chars[row][col].write(CURSOR);
|
||||
}
|
||||
|
||||
fn buffer(&mut self) -> &mut Buffer {
|
||||
unsafe { self.vgabuffer.as_mut() }
|
||||
}
|
||||
|
||||
fn new_line(&mut self) {
|
||||
// remove cursor if newline isnt from end of screen
|
||||
if self.column_position < BUFFER_WIDTH {
|
||||
let col = self.column_position;
|
||||
self.buffer().chars[BUFFER_HEIGHT - 1][col].write(BLANK);
|
||||
}
|
||||
for row in 1..BUFFER_HEIGHT {
|
||||
for col in 0..BUFFER_WIDTH {
|
||||
let buffer = self.buffer();
|
||||
let character = buffer.chars[row][col].read();
|
||||
buffer.chars[row - 1][col].write(character);
|
||||
}
|
||||
}
|
||||
self.clear_row(BUFFER_HEIGHT - 1);
|
||||
self.column_position = 0;
|
||||
}
|
||||
|
||||
fn clear_row(&mut self, row: usize) {
|
||||
for col in 0..BUFFER_WIDTH {
|
||||
self.buffer().chars[row][col].write(BLANK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Write for Writer {
|
||||
fn write_str(&mut self, s: &str) -> ::core::fmt::Result {
|
||||
for byte in s.bytes() {
|
||||
self.write_byte(byte)
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[repr(u8)]
|
||||
pub enum Color {
|
||||
Black = 0,
|
||||
Blue = 1,
|
||||
Green = 2,
|
||||
Cyan = 3,
|
||||
Red = 4,
|
||||
Magenta = 5,
|
||||
Brown = 6,
|
||||
LightGray = 7,
|
||||
DarkGray = 8,
|
||||
LightBlue = 9,
|
||||
LightGreen = 10,
|
||||
LightCyan = 11,
|
||||
LightRed = 12,
|
||||
Pink = 13,
|
||||
Yellow = 14,
|
||||
White = 15,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct ColorCode(u8);
|
||||
|
||||
impl ColorCode {
|
||||
pub const fn new(foreground: Color, background: Color) -> ColorCode {
|
||||
ColorCode((background as u8) << 4 | (foreground as u8))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[repr(C)]
|
||||
struct ScreenChar {
|
||||
ascii_character: u8,
|
||||
color_code: ColorCode,
|
||||
}
|
||||
|
||||
struct Buffer {
|
||||
chars: [[Volatile<ScreenChar>; BUFFER_WIDTH]; BUFFER_HEIGHT],
|
||||
}
|
||||
Loading…
Reference in a new issue