some modify
This commit is contained in:
Regular → Executable
+66
-25
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user