mirror of
https://github.com/MiSTer-devel/InputTest_MiSTer.git
synced 2026-04-19 03:04:18 +00:00
Fix shift bug in ps2 sim
This commit is contained in:
230
src/ps2.c
230
src/ps2.c
@@ -79,114 +79,116 @@ const char KEY_DOWN = 0x72;
|
||||
|
||||
char kbd_UK[256] =
|
||||
{
|
||||
0, 0, // 0x00
|
||||
0, 0, // 0x01
|
||||
0, 0, // 0x02
|
||||
0, 0, // 0x03
|
||||
0, 0, // 0x04
|
||||
0, 0, // 0x05
|
||||
0, 0, // 0x06
|
||||
0, 0, // 0x07
|
||||
0, 0, // 0x08
|
||||
0, 0, // 0x09
|
||||
0, 0, // 0x0a
|
||||
0, 0, // 0x0b
|
||||
0, 0, // 0x0c
|
||||
0, 0, // 0x0d
|
||||
'¬', '`', // 0x0e
|
||||
0, 0, // 0x0f
|
||||
0, 0, // 0x10
|
||||
0, 0, // 0x11
|
||||
0, 0, // 0x12
|
||||
0, 0, // 0x13
|
||||
0, 0, // 0x14
|
||||
'Q', 'q', // 0x15
|
||||
'!', '1', // 0x16
|
||||
0, 0, // 0x17
|
||||
0, 0, // 0x18
|
||||
0, 0, // 0x19
|
||||
'Z', 'z', // 0x1a
|
||||
'S', 's', // 0x1b
|
||||
'A', 'a', // 0x1c
|
||||
'W', 'w', // 0x1d
|
||||
'"', '2', // 0x1e
|
||||
0, 0, // 0x1f
|
||||
0, 0, // 0x20
|
||||
'C', 'c', // 0x21
|
||||
'X', 'x', // 0x22
|
||||
'D', 'd', // 0x23
|
||||
'E', 'e', // 0x24
|
||||
'$', '4', // 0x25
|
||||
'£', '3', // 0x26
|
||||
0, 0, // 0x27
|
||||
0, 0, // 0x28
|
||||
' ', ' ', // 0x29
|
||||
'V', 'v', // 0x2a
|
||||
'F', 'f', // 0x2b
|
||||
'T', 't', // 0x2c
|
||||
'R', 'r', // 0x2d
|
||||
'%', '5', // 0x2e
|
||||
0, 0, // 0x2f
|
||||
0, 0, // 0x30
|
||||
'N', 'n', // 0x31
|
||||
'B', 'b', // 0x32
|
||||
'H', 'h', // 0x33
|
||||
'G', 'g', // 0x34
|
||||
'Y', 'y', // 0x35
|
||||
'^', '6', // 0x36
|
||||
0, 0, // 0x37
|
||||
0, 0, // 0x38
|
||||
0, 0, // 0x39
|
||||
'M', 'm', // 0x3a
|
||||
'J', 'j', // 0x3b
|
||||
'U', 'u', // 0x3c
|
||||
'&', '7', // 0x3d
|
||||
'*', '8', // 0x3e
|
||||
0, 0, // 0x3f
|
||||
0, 0, // 0x40
|
||||
'<', ',', // 0x41
|
||||
'K', 'k', // 0x42
|
||||
'I', 'i', // 0x43
|
||||
'O', 'o', // 0x44
|
||||
')', '0', // 0x45
|
||||
'(', '9', // 0x46
|
||||
0, 0, // 0x47
|
||||
0, 0, // 0x48
|
||||
'>', '.', // 0x49
|
||||
'?', '/', // 0x4a
|
||||
'L', 'l', // 0x4b
|
||||
':', ';', // 0x4c
|
||||
'P', 'p', // 0x4d
|
||||
'_', '-', // 0x4e
|
||||
0, 0, // 0x4f
|
||||
0, 0, // 0x50
|
||||
0, 0, // 0x51
|
||||
'@', '\'', // 0x52
|
||||
0, 0, // 0x53
|
||||
'{', '[', // 0x54
|
||||
'+', '=', // 0x55
|
||||
0, 0, // 0x56
|
||||
0, 0, // 0x57
|
||||
'+', '=', // 0x58
|
||||
0, 0, // 0x59 (RSHIFT)
|
||||
'\n', '\n',// 0x5a (ENTER)
|
||||
'}', ']', // 0x5b
|
||||
0, 0, // 0x5c
|
||||
'|', '\\', // 0x5d
|
||||
0, 0, // 0x5e
|
||||
0, 0, // 0x5f
|
||||
0, 0, // 0x60
|
||||
0, 0, // 0x61
|
||||
0, 0, // 0x62
|
||||
0, 0, // 0x63
|
||||
0, 0, // 0x64
|
||||
0, 0, // 0x65
|
||||
'\b', '\b',// 0x66
|
||||
0, 0, // 0x00
|
||||
0, 0, // 0x01
|
||||
0, 0, // 0x02
|
||||
0, 0, // 0x03
|
||||
0, 0, // 0x04
|
||||
0, 0, // 0x05
|
||||
0, 0, // 0x06
|
||||
0, 0, // 0x07
|
||||
0, 0, // 0x08
|
||||
0, 0, // 0x09
|
||||
0, 0, // 0x0a
|
||||
0, 0, // 0x0b
|
||||
0, 0, // 0x0c
|
||||
0, 0, // 0x0d
|
||||
'¬', '`', // 0x0e
|
||||
0, 0, // 0x0f
|
||||
0, 0, // 0x10
|
||||
0, 0, // 0x11
|
||||
0, 0, // 0x12
|
||||
0, 0, // 0x13
|
||||
0, 0, // 0x14
|
||||
'Q', 'q', // 0x15
|
||||
'!', '1', // 0x16
|
||||
0, 0, // 0x17
|
||||
0, 0, // 0x18
|
||||
0, 0, // 0x19
|
||||
'Z', 'z', // 0x1a
|
||||
'S', 's', // 0x1b
|
||||
'A', 'a', // 0x1c
|
||||
'W', 'w', // 0x1d
|
||||
'"', '2', // 0x1e
|
||||
0, 0, // 0x1f
|
||||
0, 0, // 0x20
|
||||
'C', 'c', // 0x21
|
||||
'X', 'x', // 0x22
|
||||
'D', 'd', // 0x23
|
||||
'E', 'e', // 0x24
|
||||
'$', '4', // 0x25
|
||||
'£', '3', // 0x26
|
||||
0, 0, // 0x27
|
||||
0, 0, // 0x28
|
||||
' ', ' ', // 0x29
|
||||
'V', 'v', // 0x2a
|
||||
'F', 'f', // 0x2b
|
||||
'T', 't', // 0x2c
|
||||
'R', 'r', // 0x2d
|
||||
'%', '5', // 0x2e
|
||||
0, 0, // 0x2f
|
||||
0, 0, // 0x30
|
||||
'N', 'n', // 0x31
|
||||
'B', 'b', // 0x32
|
||||
'H', 'h', // 0x33
|
||||
'G', 'g', // 0x34
|
||||
'Y', 'y', // 0x35
|
||||
'^', '6', // 0x36
|
||||
0, 0, // 0x37
|
||||
0, 0, // 0x38
|
||||
0, 0, // 0x39
|
||||
'M', 'm', // 0x3a
|
||||
'J', 'j', // 0x3b
|
||||
'U', 'u', // 0x3c
|
||||
'&', '7', // 0x3d
|
||||
'*', '8', // 0x3e
|
||||
0, 0, // 0x3f
|
||||
0, 0, // 0x40
|
||||
'<', ',', // 0x41
|
||||
'K', 'k', // 0x42
|
||||
'I', 'i', // 0x43
|
||||
'O', 'o', // 0x44
|
||||
')', '0', // 0x45
|
||||
'(', '9', // 0x46
|
||||
0, 0, // 0x47
|
||||
0, 0, // 0x48
|
||||
'>', '.', // 0x49
|
||||
'?', '/', // 0x4a
|
||||
'L', 'l', // 0x4b
|
||||
':', ';', // 0x4c
|
||||
'P', 'p', // 0x4d
|
||||
'_', '-', // 0x4e
|
||||
0, 0, // 0x4f
|
||||
0, 0, // 0x50
|
||||
0, 0, // 0x51
|
||||
'@', '\'', // 0x52
|
||||
0, 0, // 0x53
|
||||
'{', '[', // 0x54
|
||||
'+', '=', // 0x55
|
||||
0, 0, // 0x56
|
||||
0, 0, // 0x57
|
||||
'+', '=', // 0x58
|
||||
0, 0, // 0x59 (RSHIFT)
|
||||
'\n', '\n', // 0x5a (ENTER)
|
||||
'}', ']', // 0x5b
|
||||
0, 0, // 0x5c
|
||||
'|', '\\', // 0x5d
|
||||
0, 0, // 0x5e
|
||||
0, 0, // 0x5f
|
||||
0, 0, // 0x60
|
||||
0, 0, // 0x61
|
||||
0, 0, // 0x62
|
||||
0, 0, // 0x63
|
||||
0, 0, // 0x64
|
||||
0, 0, // 0x65
|
||||
'\b', '\b', // 0x66
|
||||
0, 0};
|
||||
|
||||
char kbd_in[2];
|
||||
char kbd_lastclock = 0;
|
||||
char kbd_shift = 0;
|
||||
char kbd_shift_left = 0;
|
||||
char kbd_shift_right = 0;
|
||||
char kbd_scan = 0;
|
||||
char kbd_pressed;
|
||||
char kbd_extend;
|
||||
char kbd_lastscan = 0;
|
||||
@@ -205,7 +207,7 @@ void get_ascii(char scan)
|
||||
{
|
||||
kbd_lastscan = scan;
|
||||
char p = (kbd_lastscan * 2);
|
||||
if (!kbd_shift)
|
||||
if (!(kbd_shift_left || kbd_shift_right))
|
||||
{
|
||||
p++;
|
||||
}
|
||||
@@ -230,19 +232,27 @@ void handle_ps2()
|
||||
}
|
||||
kbd_extend = CHECK_BIT(kbd_in[1], 0);
|
||||
kbd_pressed = CHECK_BIT(kbd_in[1], 1);
|
||||
char kbd_scan = kbd_in[0];
|
||||
kbd_scan = kbd_in[0];
|
||||
if (kbd_pressed)
|
||||
{
|
||||
if (kbd_scan == KEY_LEFTSHIFT || kbd_scan == KEY_RIGHTSHIFT)
|
||||
if (kbd_scan == KEY_LEFTSHIFT)
|
||||
{
|
||||
kbd_shift++;
|
||||
kbd_shift_left = 1;
|
||||
}
|
||||
else if (kbd_scan == KEY_RIGHTSHIFT)
|
||||
{
|
||||
kbd_shift_right = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (kbd_scan == KEY_LEFTSHIFT || kbd_scan == KEY_RIGHTSHIFT)
|
||||
if (kbd_scan == KEY_LEFTSHIFT)
|
||||
{
|
||||
kbd_shift--;
|
||||
kbd_shift_left = 0;
|
||||
}
|
||||
else if (kbd_scan == KEY_RIGHTSHIFT)
|
||||
{
|
||||
kbd_shift_right = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user