mirror of
https://github.com/MiSTer-devel/InputTest_MiSTer.git
synced 2026-05-24 03:03:36 +00:00
Improve keyboard handling, allow keyboard control in menu
This commit is contained in:
@@ -35,8 +35,8 @@ unsigned char px_last[6];
|
||||
signed char sx_toggle_last[6];
|
||||
signed char sx_last[6];
|
||||
unsigned long sx_pos[6];
|
||||
unsigned char kbd_lastscan_cache = 1;
|
||||
unsigned char kbd_lastascii_cache = 1;
|
||||
unsigned char kbd_scan_last = 1;
|
||||
unsigned char kbd_ascii_last = 1;
|
||||
unsigned char mse_button1_last = 1;
|
||||
unsigned char mse_button2_last = 1;
|
||||
signed char mse_x_last = 1;
|
||||
@@ -352,7 +352,7 @@ void inputtester_digital()
|
||||
{
|
||||
|
||||
// // Handle PS/2 inputs whenever possible to improve latency
|
||||
// handle_ps2();
|
||||
handle_ps2();
|
||||
|
||||
// Handle secret code detection (joypad 1 directions)
|
||||
if (HBLANK_RISING)
|
||||
@@ -388,7 +388,7 @@ void inputtester_analog()
|
||||
{
|
||||
|
||||
// Handle PS/2 inputs whenever possible to improve latency
|
||||
// handle_ps2();
|
||||
handle_ps2();
|
||||
|
||||
if (HBLANK_RISING)
|
||||
{
|
||||
@@ -584,13 +584,13 @@ void inputtester_advanced()
|
||||
}
|
||||
|
||||
// Scancode output
|
||||
if (kbd_lastscan != kbd_lastscan_cache || kbd_lastascii != kbd_lastascii_cache)
|
||||
if (kbd_scan != kbd_scan_last || kbd_ascii != kbd_ascii_last)
|
||||
{
|
||||
write_stringf("%02x", 0xFF, 11, 21, kbd_lastscan);
|
||||
write_char(kbd_lastascii, 0xFF, 15, 21);
|
||||
write_stringf("%02x", 0xFF, 11, 21, kbd_scan);
|
||||
write_char(kbd_ascii, 0xFF, 15, 21);
|
||||
|
||||
kbd_lastscan_cache = kbd_lastscan;
|
||||
kbd_lastascii_cache = kbd_lastascii;
|
||||
kbd_scan_last = kbd_scan;
|
||||
kbd_ascii_last = kbd_ascii;
|
||||
}
|
||||
|
||||
if (mse_changed)
|
||||
@@ -629,29 +629,6 @@ void inputtester_advanced()
|
||||
}
|
||||
mse_changed = 0;
|
||||
}
|
||||
|
||||
// {
|
||||
// char m = 0b00000001;
|
||||
// char x = 2;
|
||||
// char y = 27;
|
||||
// for (char b = 0; b < 8; b++)
|
||||
// {
|
||||
// char joy = ps2_mouse[b];
|
||||
// m = 0b00000001;
|
||||
// for (char i = 0; i < 8; i++)
|
||||
// {
|
||||
// x++;
|
||||
// write_char((joy & m) ? asc_1 : asc_0, 0xFF, x, y);
|
||||
// m <<= 1;
|
||||
// }
|
||||
// x++;
|
||||
// if (b == 3)
|
||||
// {
|
||||
// x = 2;
|
||||
// y++;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,9 @@ void start_menu()
|
||||
// Menu state
|
||||
void menu()
|
||||
{
|
||||
// // Handle PS/2 inputs whenever possible to improve latency
|
||||
handle_ps2();
|
||||
|
||||
// Check inputs at end of each scanline. Is this too much?!
|
||||
if (HBLANK_RISING)
|
||||
{
|
||||
|
||||
1
src/os.c
1
src/os.c
@@ -109,6 +109,7 @@ void main()
|
||||
//start_btntest();
|
||||
break;
|
||||
}
|
||||
|
||||
hsync_last = hsync;
|
||||
vsync_last = vsync;
|
||||
hblank_last = hblank;
|
||||
|
||||
26
src/ps2.c
26
src/ps2.c
@@ -19,6 +19,7 @@
|
||||
with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
===========================================================================*/
|
||||
|
||||
#pragma once
|
||||
#include "sys.c"
|
||||
|
||||
// COMMAND KEYS
|
||||
@@ -32,6 +33,10 @@ const char KEY_RIGHTSHIFT = 0x59;
|
||||
const char KEY_ALT = 0x11; // EXT 0 = LEFT, EXT 1 = RIGHT
|
||||
const char KEY_CTRL = 0x63; // EXT 0 = LEFT, EXT 1 = RIGHT
|
||||
|
||||
// USEFUL KEYS
|
||||
const char KEY_1 = 0x16;
|
||||
const char KEY_SPACE = 0x29;
|
||||
|
||||
// UNMAPPED COMMAND KEYS
|
||||
// 0x7c, //55 KEY_KPASTERISK
|
||||
// 0x05, //59 KEY_F1
|
||||
@@ -191,8 +196,7 @@ char kbd_shift_right = 0;
|
||||
char kbd_scan = 0;
|
||||
char kbd_pressed;
|
||||
char kbd_extend;
|
||||
char kbd_lastscan = 0;
|
||||
char kbd_lastascii = 0;
|
||||
char kbd_ascii = 0;
|
||||
char kbd_clock_index = 1;
|
||||
|
||||
char mse_lastclock = 0;
|
||||
@@ -206,18 +210,19 @@ char mse_clock_index = 3;
|
||||
|
||||
char kbd_buffer[128];
|
||||
char kbd_buffer_len = 0;
|
||||
bool kbd_down[256];
|
||||
|
||||
void get_ascii()
|
||||
{
|
||||
char p = (kbd_lastscan * 2);
|
||||
char p = (kbd_scan * 2);
|
||||
if (!(kbd_shift_left || kbd_shift_right))
|
||||
{
|
||||
p++;
|
||||
}
|
||||
kbd_lastascii = kbd_UK[p];
|
||||
if (kbd_lastascii > 0)
|
||||
kbd_ascii = kbd_UK[p];
|
||||
if (kbd_ascii > 0)
|
||||
{
|
||||
kbd_buffer[kbd_buffer_len] = kbd_lastascii;
|
||||
kbd_buffer[kbd_buffer_len] = kbd_ascii;
|
||||
kbd_buffer_len++;
|
||||
}
|
||||
}
|
||||
@@ -231,13 +236,13 @@ void handle_ps2()
|
||||
{
|
||||
kbd_in[k] = ps2_key[k];
|
||||
}
|
||||
kbd_extend = CHECK_BIT(kbd_in[1], 0);
|
||||
kbd_pressed = CHECK_BIT(kbd_in[1], 1);
|
||||
kbd_extend = CHECK_BIT(kbd_in[1], 0) > 0;
|
||||
kbd_pressed = CHECK_BIT(kbd_in[1], 1) > 0;
|
||||
kbd_scan = kbd_in[0];
|
||||
kbd_lastscan = kbd_scan;
|
||||
kbd_lastascii = 0;
|
||||
kbd_ascii = 0;
|
||||
if (kbd_pressed)
|
||||
{
|
||||
kbd_down[kbd_scan] = 1;
|
||||
if (kbd_scan == KEY_LEFTSHIFT)
|
||||
{
|
||||
kbd_shift_left = 1;
|
||||
@@ -253,6 +258,7 @@ void handle_ps2()
|
||||
}
|
||||
else
|
||||
{
|
||||
kbd_down[kbd_scan] = 0;
|
||||
if (kbd_scan == KEY_LEFTSHIFT)
|
||||
{
|
||||
kbd_shift_left = 0;
|
||||
|
||||
@@ -103,7 +103,7 @@ void snek_gameplay()
|
||||
nyd = 0;
|
||||
}
|
||||
|
||||
if (CHECK_BIT(joystick[8], 2)) // select to quit
|
||||
if (CHECK_BIT(joystick[1], 2)) // select to quit
|
||||
{
|
||||
state = 0;
|
||||
return;
|
||||
@@ -156,12 +156,12 @@ void snek_attract()
|
||||
|
||||
if (HBLANK_RISING)
|
||||
{
|
||||
if (CHECK_BIT(joystick[8], 3)) // start to start
|
||||
if (CHECK_BIT(joystick[1], 3)) // start to start
|
||||
{
|
||||
start_gameplay();
|
||||
return;
|
||||
}
|
||||
if (CHECK_BIT(joystick[8], 2)) // select to quit
|
||||
if (CHECK_BIT(joystick[1], 2)) // select to quit
|
||||
{
|
||||
state = 0;
|
||||
return;
|
||||
@@ -174,7 +174,7 @@ void snek_attract()
|
||||
if (movetimer == 0)
|
||||
{
|
||||
attractstate = !attractstate;
|
||||
write_string("PRESS START", attractstate == 0 ? 0x00 : 0xFF, 16, 15);
|
||||
write_string("PRESS START", attractstate == 0 ? 0x00 : 0xFF, 14, 15);
|
||||
movetimer = movefreq;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#pragma once
|
||||
#include "sys.c"
|
||||
#include "ps2.c"
|
||||
|
||||
// Application states
|
||||
#define STATE_START_INPUTTESTER 1
|
||||
@@ -48,7 +49,7 @@
|
||||
#define STATE_START_GAME_SNEK 40
|
||||
#define STATE_GAME_SNEK 41
|
||||
|
||||
#define GET_TIMER ((unsigned short)timer[8] << 8) | (unsigned char)timer[0]
|
||||
#define GET_TIMER ((unsigned short)timer[1] << 8) | (unsigned char)timer[0]
|
||||
|
||||
// DPAD tracker
|
||||
bool input_left = 0;
|
||||
@@ -79,13 +80,12 @@ void basic_input()
|
||||
input_select_last = input_select;
|
||||
input_a_last = input_a;
|
||||
input_b_last = input_b;
|
||||
input_up = CHECK_BIT(joystick[0], 3);
|
||||
input_down = CHECK_BIT(joystick[0], 2);
|
||||
input_left = CHECK_BIT(joystick[0], 1);
|
||||
input_right = CHECK_BIT(joystick[0], 0);
|
||||
input_start = CHECK_BIT(joystick[1], 3);
|
||||
input_select = CHECK_BIT(joystick[1], 2);
|
||||
input_a = CHECK_BIT(joystick[0], 4);
|
||||
input_b = CHECK_BIT(joystick[0], 5);
|
||||
input_up = CHECK_BIT(joystick[0], 3) || kbd_down[KEY_UP];
|
||||
input_down = CHECK_BIT(joystick[0], 2) || kbd_down[KEY_DOWN];
|
||||
input_left = CHECK_BIT(joystick[0], 1) || kbd_down[KEY_LEFT];
|
||||
input_right = CHECK_BIT(joystick[0], 0) || kbd_down[KEY_RIGHT];
|
||||
input_start = CHECK_BIT(joystick[1], 3) || kbd_down[KEY_1];
|
||||
input_select = CHECK_BIT(joystick[1], 2) || kbd_down[KEY_ESC];
|
||||
input_a = CHECK_BIT(joystick[0], 4) || kbd_down[KEY_ENTER];
|
||||
input_b = CHECK_BIT(joystick[0], 5) || kbd_down[KEY_SPACE];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user