added proper timing and key assignment in key press/release handler

This commit is contained in:
shockrah 2019-12-05 01:31:05 -08:00
parent b2d4a5ec1b
commit 1af2fd3c52
2 changed files with 9 additions and 8 deletions

8
kbd.c
View File

@ -53,14 +53,14 @@ void kbd_read_key(struct cpu_reg_state* cpu) {
u8 scancode = serial_read_byte(KBD_PORT); u8 scancode = serial_read_byte(KBD_PORT);
if(scancode & 0x80) { if(scancode & 0x80) {
// Key released // Key released
kbd_state &= KBD_RELEASE; kbd_key = keymap[scancode & 0x7f]; // clamp to 127 as the max val(gcc is anoying)
kbd_state = KBD_RELEASE;
kbd_time = pit_timer_ticks;
} }
else { else {
// Key pressed // Key pressed
kbd_key = keymap[scancode & 0x7f]; // clamp to 127 as the max val(gcc is anoying) kbd_key = keymap[scancode & 0x7f]; // clamp to 127 as the max val(gcc is anoying)
kbd_state = kbd_state & !KBD_RELEASE & KBD_PRESS; kbd_state = KBD_PRESS;
//printf("@");printhex(pit_timer_ticks);
//printf("diff:"); printhex(pit_timer_ticks - kbd_time);
kbd_time = pit_timer_ticks; kbd_time = pit_timer_ticks;
} }
} }

9
kbd.h
View File

@ -2,16 +2,17 @@
#define KBD_H #define KBD_H
#include "types.h" #include "types.h"
#include "interrupts.h" #include "interrupts.h"
#include "framebuffer.h"
#define KBD_PORT 0x60 #define KBD_PORT 0x60
#define KBD_PRESS 0b00000001 #define KBD_PRESS 1
#define KBD_RELEASE 0b00000010 #define KBD_WAITING 2
#define KBD_SHIFT 0b00000100 #define KBD_RELEASE 0x80
char kbd_key; char kbd_key;
u8 kbd_state; u8 kbd_state;
u8 kbd_time; u32 kbd_time;
void kbd_install_keyboard(void); void kbd_install_keyboard(void);