summaryrefslogtreecommitdiff
path: root/kbd.c
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2019-06-05 11:42:03 -0400
committerRobert Morris <[email protected]>2019-06-05 11:42:03 -0400
commitf1a727b971a59bab6025b4c4111342c27356ca40 (patch)
treed22d52c613bfc003e6fb75b5d137aeff9d954201 /kbd.c
parentec3d3a1fceee437c640f9c5c05fc517edfb1899e (diff)
downloadxv6-labs-f1a727b971a59bab6025b4c4111342c27356ca40.tar.gz
xv6-labs-f1a727b971a59bab6025b4c4111342c27356ca40.tar.bz2
xv6-labs-f1a727b971a59bab6025b4c4111342c27356ca40.zip
start at support for multiple CPUs
Diffstat (limited to 'kbd.c')
-rw-r--r--kbd.c50
1 files changed, 0 insertions, 50 deletions
diff --git a/kbd.c b/kbd.c
deleted file mode 100644
index 32c1463..0000000
--- a/kbd.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "types.h"
-#include "x86.h"
-#include "defs.h"
-#include "kbd.h"
-
-int
-kbdgetc(void)
-{
- static uint shift;
- static uchar *charcode[4] = {
- normalmap, shiftmap, ctlmap, ctlmap
- };
- uint st, data, c;
-
- st = inb(KBSTATP);
- if((st & KBS_DIB) == 0)
- return -1;
- data = inb(KBDATAP);
-
- if(data == 0xE0){
- shift |= E0ESC;
- return 0;
- } else if(data & 0x80){
- // Key released
- data = (shift & E0ESC ? data : data & 0x7F);
- shift &= ~(shiftcode[data] | E0ESC);
- return 0;
- } else if(shift & E0ESC){
- // Last character was an E0 escape; or with 0x80
- data |= 0x80;
- shift &= ~E0ESC;
- }
-
- shift |= shiftcode[data];
- shift ^= togglecode[data];
- c = charcode[shift & (CTL | SHIFT)][data];
- if(shift & CAPSLOCK){
- if('a' <= c && c <= 'z')
- c += 'A' - 'a';
- else if('A' <= c && c <= 'Z')
- c += 'a' - 'A';
- }
- return c;
-}
-
-void
-kbdintr(void)
-{
- consoleintr(kbdgetc);
-}