From 20dd72e40dc2728d3c5335d860e4b8ab8da14fcc Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Mon, 25 Oct 2021 00:36:33 +0200 Subject: Changing build system to recursive make --- src/c/keyboard.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/c/keyboard.c (limited to 'src/c/keyboard.c') diff --git a/src/c/keyboard.c b/src/c/keyboard.c new file mode 100644 index 0000000..548cdda --- /dev/null +++ b/src/c/keyboard.c @@ -0,0 +1,110 @@ +#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; + } + + } +} -- cgit v1.2.3