some modify

This commit is contained in:
2021-04-09 18:24:56 +09:00
parent d6b01a0ac5
commit 1b4d5fb6a4
30 changed files with 569 additions and 55 deletions
Regular → Executable
+66 -25
View File
@@ -1,6 +1,7 @@
#include <Library/BaseLib.h>
#include "io.h"
#include "keycode.h"
#include "text.h"
#define SPECIAL_SHIFT_L 0b00000001
#define SPECIAL_SHIFT_R 0b00000010
@@ -82,41 +83,81 @@ void interrupt_init() {
void keyboard_int_proc() {
UINT8 data;
// static char keyboard_special_keys = 0;
static BOOLEAN special_flag = FALSE;
static char keyboard_special_keys = 0;
data = mapped_io_read(0x64);
if ((data & 0b00000001) == 0) // output buffer is not full
goto eoi;
data = mapped_io_read(0x60);
/*
if (data & 0b10000000){ // key is broken
if (data == 0xE0) {
special_flag = TRUE;
goto eoi;
}
if (data & 0b10000000) { // key is broken
switch (data & 0b01111111) {
case 44:
case 0x2A:
keyboard_special_keys &= ~SPECIAL_SHIFT_L;
return;
case 57:
goto eoi;
case 0x36:
keyboard_special_keys &= ~SPECIAL_SHIFT_R;
return;
case 58:
keyboard_special_keys &= ~SPECIAL_CTRL_L;
return;
case 64:
keyboard_special_keys &= ~SPECIAL_CTRL_R;
return;
case 60:
keyboard_special_keys &= ~SPECIAL_ALT_L;
return;
case 62:
keyboard_special_keys &= ~SPECIAL_ALT_R;
return;
case :
keyboard_special_keys &= ~SPECIAL_CTRL_L;
return;
goto eoi;
case 0x1D:
if (!special_flag)
keyboard_special_keys &= ~SPECIAL_CTRL_L;
else
keyboard_special_keys &= ~SPECIAL_CTRL_R;
goto eoi;
case 0x38:
if (!special_flag)
keyboard_special_keys &= ~SPECIAL_ALT_L;
else
keyboard_special_keys &= ~SPECIAL_ALT_R;
goto eoi;
case 0x5B:
if (special_flag) keyboard_special_keys &= ~SPECIAL_SUPER_L;
goto eoi;
case 0x5C:
if (special_flag) keyboard_special_keys &= ~SPECIAL_SUPER_L;
goto eoi;
}
} else { // key is make
switch (data & 0b01111111) {
case 0x2A:
keyboard_special_keys |= SPECIAL_SHIFT_L;
goto eoi;
case 0x36:
keyboard_special_keys |= SPECIAL_SHIFT_R;
goto eoi;
case 0x1D:
if (!special_flag)
keyboard_special_keys |= SPECIAL_CTRL_L;
else
keyboard_special_keys |= SPECIAL_CTRL_R;
goto eoi;
case 0x38:
if (!special_flag)
keyboard_special_keys |= SPECIAL_ALT_L;
else
keyboard_special_keys |= SPECIAL_ALT_R;
goto eoi;
case 0x5B:
if (special_flag) keyboard_special_keys |= SPECIAL_SUPER_L;
goto eoi;
case 0x5C:
if (special_flag) keyboard_special_keys |= SPECIAL_SUPER_L;
goto eoi;
default:
return;
if ((keyboard_special_keys & SPECIAL_SHIFT_L) ||
(keyboard_special_keys & SPECIAL_SHIFT_R)) {
if (keycode_to_ascii_shift[data])
textout(keycode_to_ascii_shift[data]);
} else if (keycode_to_ascii[data])
textout(keycode_to_ascii[data]);
goto eoi;
}
}
*/
textout('0');
eoi:
end_of_interrupt(33);
}