diff --git a/kbd.c b/kbd.c index 09083c7..5e39140 100644 --- a/kbd.c +++ b/kbd.c @@ -59,8 +59,9 @@ void kbd_read_key(struct cpu_reg_state* cpu) { // Key pressed kbd_key = keymap[scancode & 0x7f]; // clamp to 127 as the max val(gcc is anoying) kbd_state = kbd_state & !KBD_RELEASE & KBD_PRESS; + //printf("@");printhex(pit_timer_ticks); + //printf("diff:"); printhex(pit_timer_ticks - kbd_time); kbd_time = pit_timer_ticks; - putch(kbd_key); } } diff --git a/stlio.c b/stlio.c index 4515144..63ca3d6 100644 --- a/stlio.c +++ b/stlio.c @@ -1,9 +1,11 @@ #include "types.h" #include "kbd.h" #include "stlio.h" +#include "pit.h" + +extern char kbd_key; +extern u8 kbd_state; -extern char kbd_prev_key; -extern int kbd_prev_active; static u8 COLOR_FG = Green; static u8 COLOR_BG = White; @@ -37,23 +39,17 @@ u32 write(const char* buffer, const u32 size) { u32 read(char* buffer, u32 size) { // Read up to size-1 characters or until a \n is written // once we reacch size -1 bytes read then we change the last char to a \0 - kbd_prev_active = false; // we only do this to discard the leftovers from - u32 bytes_read = 0; - - while(bytes_read < size-1) { - if(kbd_prev_active) { - bytes_read++; - if(kbd_prev_key == '\n') { - break; - } - else { - buffer[bytes_read] = kbd_prev_key; - } + u32 bytes = 0; + while(bytes < size - 1) { + // was this key pressed recently? + if(pit_timer_ticks - kbd_time < 200) { + buffer[bytes] = kbd_key; } } - printf("You entered: "); printf(buffer); - return bytes_read; + buffer[size - 1] = '\0'; + return bytes + 1; } + void printf(const char* fmt) { // Variadic fuller version of print on seperate branch but its nowhere near stable/ready/working u32 size = strlen(fmt);