#include #include #include #include"keyboard.h" #define BUFFER_SIZE 200 char buffer[BUFFER_SIZE]; size_t buffer_index=0; #define PIC1_COMMAND_PORT 0x20 #define PIC1_DATA_PORT 0x21 #define PIC2_COMMAND_PORT 0xA0 #define PIC2_DATA_PORT 0xA1 // IO Ports for Keyboard #define KEYBOARD_DATA_PORT 0x60 #define KEYBOARD_STATUS_PORT 0x64 extern char ioport_in(uint8_t port); extern void ioport_out(uint8_t port, char data); void previous_field(); void terminal_putchar(char c); void tty(char *buffer); void prompt(); void init_keyboard() { // 0xFD = 1111 1101 in binary. enables only IRQ1 // Why IRQ1? Remember, IRQ0 exists, it's 0-based ioport_out(PIC1_DATA_PORT, 0xFD); } void backspace() { if(buffer_index<=0) return; previous_field(); terminal_putchar(' '); previous_field(); buffer[--buffer_index]='\0'; return; } void enter() { terminal_putchar('\n'); if(buffer_index>0) { tty(buffer); for(int i=0;i= 128) return; if(keycode==14) backspace(); else if(keycode==28) enter(); else { buffer[buffer_index++]=keyboard[keycode]; terminal_putchar(keyboard[keycode]); } } }