From 4528b2347ac72ffdabdbe4d9e7bf7789c81e664f Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Tue, 12 Oct 2021 21:53:40 +0200 Subject: Adding tty --- src/keyboard.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/keyboard.c (limited to 'src/keyboard.c') diff --git a/src/keyboard.c b/src/keyboard.c new file mode 100644 index 0000000..987c7a2 --- /dev/null +++ b/src/keyboard.c @@ -0,0 +1,78 @@ +#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]); + } + + } +} -- cgit v1.2.3