#include"../include/types.h" #include"../include/asm.h" #include"../include/stdio.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 void previous_field(void); void terminal_putchar(char c); void tty(char *buffer); void prompt(void); void clear(); void us_en(char keymap[]); char charcode[256]; bool ispressed[128]; 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); us_en(charcode); } void backspace() { if(buffer_index<=0) return; previous_field(); printf(" "); previous_field(); buffer[--buffer_index]='\0'; return; } void enter() { printf("\n"); if(buffer_index>0) { tty(buffer); for(int i=0;i='a'&&c<='z') c-=32; } if(lctrl) { if(c=='l') { clear(); prompt(); return; } } buffer[buffer_index++]=c; printf("%c",c); } } } else { ispressed[keycode-0x80]=0; } } }