Espresso 0.0.2c

This commit is contained in:
2026-03-20 16:57:08 -05:00
parent 021fdbbcef
commit 5971218b56
77 changed files with 4538 additions and 518 deletions

View File

@ -3,6 +3,8 @@
#include <tty.h>
#include <stdlib.h>
#include <new_tty.h>
#include <drivers/ps2_keyboard.h>
@ -62,6 +64,8 @@ volatile int32_t current_length = 0;
volatile int32_t capacity = 0;
volatile uint16_t current_key;
volatile bool use_new_tty = false;
volatile ps2_hook_t* hooks = NULL;
volatile int hook_count = 0;
@ -84,6 +88,10 @@ static const char scancode_map[128] = {
/* The rest are function and control keys */
};
void set_use_new_tty(bool t)
{
use_new_tty = t;
}
void keyboard_init(void)
{
@ -94,6 +102,8 @@ void keyboard_init(void)
outb(0x64, 0xAE); /* Enable keyboard interface (often optional, but here for safety) */
hooks = NULL;
set_use_new_tty(true);
ps2keyboard_initialized = true;
@ -199,6 +209,7 @@ void call_hooks(char c)
if (hook_count == 0)
{
_sti_asm();
return;
}
@ -396,32 +407,45 @@ void free_current_string(void)
}
}
void keyboard_handler(void)
registers_t* ps2_keyboard_handler(registers_t* regs)
{
#if 0
uint8_t scancode = inb(PS2_DATA_PORT);
/* Handle shift press/release */
if (scancode == 0x2A || scancode == 0x36)
{
shift_pressed = true;
return;
return regs;
}
else if (scancode == 0xAA || scancode == 0xB6)
{
shift_pressed = false;
return;
return regs;
}
else if (scancode == 0x3A)
{
capslock_pressed = !capslock_pressed;
return;
return regs;
}
else if (scancode == 0xE0)
{
extended = true;
return;
return regs;
}
uint32_t flags = 0;
if (capslock_pressed)
{
flags |= MODIFIER_CAPS;
}
if (shift_pressed)
{
flags |= MODIFIER_SHIFT;
}
if (scancode & 0x80)
{
@ -430,84 +454,94 @@ void keyboard_handler(void)
else
{
uint16_t c = (uint16_t) scancode_map[scancode];
if ((shift_pressed ^ capslock_pressed) && ((char) c >= 'a') && ((char) c <= 'z'))
if (!use_new_tty)
{
c -= 32; /* Convert to uppercase */
if ((shift_pressed ^ capslock_pressed) && ((char) c >= 'a') && ((char) c <= 'z'))
{
c -= 32; /* Convert to uppercase */
}
else if (shift_pressed)
{
c = (uint16_t) terminal_get_shifted((unsigned char) c);
}
if (extended)
{
switch (scancode)
{
case 0x48:
c = KEY_ARROW_UP;
break;
case 0x50:
c = KEY_ARROW_DOWN;
break;
case 0x4B:
c = KEY_ARROW_LEFT;
break;
case 0x4D:
c = KEY_ARROW_RIGHT;
break;
default:
c = KEY_NONE;
break;
}
if (gets_called)
{
gets_append_char(c);
return regs;
}
current_key = c;
is_new_key = true;
extended = false;
return regs;
}
if (gets_called)
{
gets_append_char(c);
return regs;
}
if (c)
{
if (c != '\n')
{
append_char(c);
}
current_char = c;
is_new_char = true;
if (c == '\n')
{
/*append_char(c);
current_char = c;
is_new_char = true;*/
free_current_string();
}
}
}
else if (shift_pressed)
else
{
c = (uint16_t) terminal_get_shifted((unsigned char) c);
tty_receive_char(c, flags);
}
if (hook_count > 0)
{
call_hooks(c);
}
if (extended)
{
switch (scancode)
{
case 0x48:
c = KEY_ARROW_UP;
break;
case 0x50:
c = KEY_ARROW_DOWN;
break;
case 0x4B:
c = KEY_ARROW_LEFT;
break;
case 0x4D:
c = KEY_ARROW_RIGHT;
break;
default:
c = KEY_NONE;
break;
}
if (gets_called)
{
gets_append_char(c);
return;
}
current_key = c;
is_new_key = true;
extended = false;
return;
}
if (gets_called)
{
gets_append_char(c);
return;
}
if (c)
{
if (c != '\n')
{
append_char(c);
}
current_char = c;
is_new_char = true;
if (c == '\n')
{
/*append_char(c);
current_char = c;
is_new_char = true;*/
free_current_string();
}
}
}
#endif
return regs;
}