nuclear@1: #include nuclear@0: #include "vid.h" nuclear@1: #include "term.h" nuclear@2: #include nuclear@2: nuclear@2: /* special keys */ nuclear@2: enum { nuclear@2: LALT, RALT, nuclear@2: LCTRL, RCTRL, nuclear@2: LSHIFT, RSHIFT, nuclear@2: F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, nuclear@2: CAPSLK, NUMLK, SCRLK, SYSRQ, nuclear@2: ESC = 27, nuclear@2: INSERT, DEL, HOME, END, PGUP, PGDN, LEFT, RIGHT, UP, DOWN, nuclear@2: NUM_DOT, NUM_ENTER, NUM_PLUS, NUM_MINUS, NUM_MUL, NUM_DIV, nuclear@2: NUM_0, NUM_1, NUM_2, NUM_3, NUM_4, NUM_5, NUM_6, NUM_7, NUM_8, NUM_9, nuclear@2: BACKSP = 127 nuclear@2: }; nuclear@2: nuclear@2: /* table with rough translations from set 1 scancodes to ASCII-ish */ nuclear@2: static int keycodes[] = { nuclear@2: 0, ESC, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', /* 0 - e */ nuclear@2: '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', /* f - 1c */ nuclear@2: LCTRL, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', /* 1d - 29 */ nuclear@2: LSHIFT, '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', RSHIFT, /* 2a - 36 */ nuclear@2: NUM_MUL, LALT, ' ', CAPSLK, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, /* 37 - 44 */ nuclear@2: NUMLK, SCRLK, NUM_7, NUM_8, NUM_9, NUM_MINUS, NUM_4, NUM_5, NUM_6, NUM_PLUS, /* 45 - 4e */ nuclear@2: NUM_1, NUM_2, NUM_3, NUM_0, NUM_DOT, SYSRQ, 0, 0, F11, F12, /* 4d - 58 */ nuclear@2: 0, 0, 0, 0, 0, 0, 0, /* 59 - 5f */ nuclear@2: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 60 - 6f */ nuclear@2: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 70 - 7f */ nuclear@2: }; nuclear@2: nuclear@0: nuclear@0: void kmain(void) nuclear@0: { nuclear@2: clear_scr(); nuclear@2: puts("kernel starting up"); nuclear@2: nuclear@2: set_text_color(YELLOW); nuclear@2: puts(""); nuclear@2: set_text_color(LTGRAY); nuclear@1: puts("hello world!"); nuclear@2: nuclear@2: for(;;) { nuclear@2: char c, keypress; nuclear@2: do { nuclear@2: inb(keypress, 0x64); nuclear@2: } while(!(keypress & 1)); nuclear@2: inb(c, 0x60); nuclear@2: if(!(c & 0x80)) { nuclear@2: putchar(keycodes[c]); nuclear@2: } nuclear@2: } nuclear@0: }