| plan 9 kernel history: overview | file list | diff list |
alphapc/kbd.c (diff list | history)
| 1999/0415/sys/src/9/alphapc/kbd.c:62,67 – 1999/0514/sys/src/9/alphapc/kbd.c:62,71 (short | long) | ||
| 1999/0415 | [0x48] '8', '9', '-', '4', '5', '6', '+', '1', [0x50] '2', '3', '0', '.', No, No, No, KF|11, [0x58] KF|12, No, No, No, No, No, No, No, | |
| 1999/0514 | [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, [0x78] No, View, No, KF|14, No, No, No, No, | |
| 1999/0415 | }; uchar kbtabshift[] = | |
| 1999/0415/sys/src/9/alphapc/kbd.c:78,83 – 1999/0514/sys/src/9/alphapc/kbd.c:82,91 | ||
| 1999/0415 | [0x48] '8', '9', '-', '4', '5', '6', '+', '1', [0x50] '2', '3', '0', '.', No, No, No, KF|11, [0x58] KF|12, No, No, No, No, No, No, No, | |
| 1999/0514 | [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, [0x78] No, KF|14, No, KF|14, No, No, No, No, | |
| 1999/0415 | }; uchar kbtabesc1[] = | |
| 1999/0415/sys/src/9/alphapc/kbd.c:94,99 – 1999/0514/sys/src/9/alphapc/kbd.c:102,111 | ||
| 1999/0415 | [0x48] Up, Pgup, No, Left, No, Right, No, End, [0x50] Down, Pgdown, Ins, Del, No, No, No, No, [0x58] No, No, No, No, No, No, No, No, | |
| 1999/0514 | [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, [0x78] No, KF|14, No, No, No, No, No, No, | |
| 1999/0415 | }; enum | |
| 1999/0415/sys/src/9/alphapc/kbd.c:379,385 – 1999/0514/sys/src/9/alphapc/kbd.c:391,397 | ||
| 1999/0415 | void kbdinit(void) { | |
| 1999/0514 | int c; | |
| 1999/0415 | kbdq = qopen(4*1024, 0, 0, 0); if(kbdq == nil) | |
| 1999/0415/sys/src/9/alphapc/kbd.c:390,399 – 1999/0514/sys/src/9/alphapc/kbd.c:402,409 | ||
| 1999/0415 | /* wait for a quiescent controller */ while((c = inb(Status)) & (Outbusy | Inready)) | |
| 1999/0514 | if(c & Inready) inb(Data); | |
| 1999/0415 | /* get current controller command byte */ outb(Cmd, 0x20); | |
| 1999/0514/sys/src/9/alphapc/kbd.c:25,31 – 2000/0108/sys/src/9/alphapc/kbd.c:25,31 (short | long) | ||
| 1999/0415 | PF= Spec|0x20, /* num pad function key */ View= Spec|0x00, /* view (shift window up) */ | |
| 2000/0108 | KF= 0xF000, /* function key (begin Unicode private space) */ | |
| 1999/0415 | Shift= Spec|0x60, Break= Spec|0x61, Ctrl= Spec|0x62, | |
| 1999/0514/sys/src/9/alphapc/kbd.c:39,54 – 2000/0108/sys/src/9/alphapc/kbd.c:39,59 | ||
| 1999/0415 | Up= KF|14, Pgup= KF|15, Print= KF|16, | |
| 2000/0108 | Left= KF|17, Right= KF|18, | |
| 1999/0415 | End= '\r', Down= View, | |
| 2000/0108 | Pgdown= KF|19, | |
| 1999/0415 | Ins= KF|20, | |
| 2000/0108 | Scroll= KF|21, | |
| 1999/0415 | Del= 0x7F, }; | |
| 2000/0108 | /* * The codes at 0x79 and 0x81 are produed by the PFU Happy Hacking keyboard. * A 'standard' keyboard doesn't produce anything above 0x58. */ Rune kbtab[] = | |
| 1999/0415 | { [0x00] No, 0x1b, '1', '2', '3', '4', '5', '6', [0x08] '7', '8', '9', '0', '-', '=', '\b', '\t', | |
| 1999/0514/sys/src/9/alphapc/kbd.c:58,64 – 2000/0108/sys/src/9/alphapc/kbd.c:63,69 | ||
| 1999/0415 | [0x28] '\'', '`', Shift, '\\', 'z', 'x', 'c', 'v', [0x30] 'b', 'n', 'm', ',', '.', '/', Shift, '*', [0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5, | |
| 2000/0108 | [0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7', | |
| 1999/0415 | [0x48] '8', '9', '-', '4', '5', '6', '+', '1', [0x50] '2', '3', '0', '.', No, No, No, KF|11, [0x58] KF|12, No, No, No, No, No, No, No, | |
| 1999/0514/sys/src/9/alphapc/kbd.c:65,74 – 2000/0108/sys/src/9/alphapc/kbd.c:70,79 | ||
| 1999/0514 | [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, | |
| 2000/0108 | [0x78] No, View, No, Up, No, No, No, No, | |
| 1999/0415 | }; | |
| 2000/0108 | Rune kbtabshift[] = | |
| 1999/0415 | { [0x00] No, 0x1b, '!', '@', '#', '$', '%', '^', [0x08] '&', '*', '(', ')', '_', '+', '\b', '\t', | |
| 1999/0514/sys/src/9/alphapc/kbd.c:78,84 – 2000/0108/sys/src/9/alphapc/kbd.c:83,89 | ||
| 1999/0415 | [0x28] '"', '~', Shift, '|', 'Z', 'X', 'C', 'V', [0x30] 'B', 'N', 'M', '<', '>', '?', Shift, '*', [0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5, | |
| 2000/0108 | [0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7', | |
| 1999/0415 | [0x48] '8', '9', '-', '4', '5', '6', '+', '1', [0x50] '2', '3', '0', '.', No, No, No, KF|11, [0x58] KF|12, No, No, No, No, No, No, No, | |
| 1999/0514/sys/src/9/alphapc/kbd.c:85,94 – 2000/0108/sys/src/9/alphapc/kbd.c:90,99 | ||
| 1999/0514 | [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, | |
| 2000/0108 | [0x78] No, Up, No, Up, No, No, No, No, | |
| 1999/0415 | }; | |
| 2000/0108 | Rune kbtabesc1[] = | |
| 1999/0415 | { [0x00] No, No, No, No, No, No, No, No, [0x08] No, No, No, No, No, No, No, No, | |
| 1999/0514/sys/src/9/alphapc/kbd.c:105,111 – 2000/0108/sys/src/9/alphapc/kbd.c:110,116 | ||
| 1999/0514 | [0x60] No, No, No, No, No, No, No, No, [0x68] No, No, No, No, No, No, No, No, [0x70] No, No, No, No, No, No, No, No, | |
| 2000/0108 | [0x78] No, Up, No, No, No, No, No, No, | |
| 1999/0415 | }; enum | |
| 1999/0514/sys/src/9/alphapc/kbd.c:231,237 – 2000/0108/sys/src/9/alphapc/kbd.c:236,242 | ||
| 1999/0415 | static int esc1, esc2; static int alt, caps, ctl, num, shift; static int collecting, nk; | |
| 2000/0108 | static Rune kc[5]; | |
| 1999/0415 | int keyup; /* | |
| 1999/0514/sys/src/9/alphapc/kbd.c:314,320 – 2000/0108/sys/src/9/alphapc/kbd.c:319,325 | ||
| 1999/0415 | /* * normal character */ | |
| 2000/0108 | if(!(c & (Spec|KF))){ | |
| 1999/0415 | if(ctl){ if(alt && c == Del) exit(0); | |
| 2000/0108/sys/src/9/alphapc/kbd.c:389,398 – 2000/0401/sys/src/9/alphapc/kbd.c:389,418 (short | long) | ||
| 1999/0415 | return; } auxputc = putc; | |
| 2000/0401 | intrenable(IrqAUX, i8042intr, 0, BUSUNKNOWN, "kbdaux"); | |
| 1999/0415 | iunlock(&i8042lock); } | |
| 2000/0401 | static void setscan(int code) { char *err = "setscan: set scan code failed\n"; outb(Data, 0xF0); if(inready() < 0 || inb(Data) != 0xFA || outready() < 0) { print(err); return; } outb(Data, code); if(inready() < 0) { print(err); return; } inb(Data); if(outready() < 0) print(err); } | |
| 1999/0415 | void kbdinit(void) { | |
| 2000/0108/sys/src/9/alphapc/kbd.c:403,410 – 2000/0401/sys/src/9/alphapc/kbd.c:423,433 | ||
| 1999/0415 | panic("kbdinit"); qnoblock(kbdq, 1); | |
| 2000/0401 | ioalloc(Data, 1, 0, "kbd"); ioalloc(Cmd, 1, 0, "kbd"); | |
| 1999/0415 | ||
| 2000/0401 | intrenable(IrqKBD, i8042intr, 0, BUSUNKNOWN, "kbd"); | |
| 1999/0415 | /* wait for a quiescent controller */ while((c = inb(Status)) & (Outbusy | Inready)) | |
| 1999/0514 | if(c & Inready) | |
| 2000/0108/sys/src/9/alphapc/kbd.c:429,432 – 2000/0401/sys/src/9/alphapc/kbd.c:452,456 | ||
| 1999/0415 | print("kbd init failed\n"); outb(Data, ccc); outready(); | |
| 2000/0401 | setscan(0x02); | |
| 1999/0415 | } | |