mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-26 13:34:22 +01:00
Simplified faking key sequences and do this through the virtual keyboard
This commit is contained in:
parent
c7f2c6e943
commit
a063dfe18d
@ -71,7 +71,7 @@ void C64::c64_ctor1(void)
|
|||||||
|
|
||||||
this->fake_key_sequence = false;
|
this->fake_key_sequence = false;
|
||||||
this->fake_key_index = 0;
|
this->fake_key_index = 0;
|
||||||
this->fake_key_keytime = 5;
|
this->fake_key_keytime = 4;
|
||||||
this->fake_key_str = "\nLOAD \"*\",8,1\nRUN\n";
|
this->fake_key_str = "\nLOAD \"*\",8,1\nRUN\n";
|
||||||
|
|
||||||
this->prefs_changed = false;
|
this->prefs_changed = false;
|
||||||
@ -470,8 +470,6 @@ void C64::Run(void)
|
|||||||
thread_func();
|
thread_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int get_kc_from_char(char c_in, int *shifted);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vertical blank: Poll keyboard and joysticks, update window
|
* Vertical blank: Poll keyboard and joysticks, update window
|
||||||
*/
|
*/
|
||||||
@ -494,16 +492,14 @@ void C64::VBlank(bool draw_frame)
|
|||||||
/* From dreamcast port */
|
/* From dreamcast port */
|
||||||
if (this->fake_key_sequence)
|
if (this->fake_key_sequence)
|
||||||
{
|
{
|
||||||
int shifted;
|
int kc = this->virtual_keyboard->char_to_keycode(this->fake_key_str[this->fake_key_index]);
|
||||||
int kc = get_kc_from_char(this->fake_key_str[this->fake_key_index], &shifted);
|
|
||||||
|
|
||||||
TheDisplay->FakeKeyPress(kc, shifted, TheCIA1->KeyMatrix,
|
TheDisplay->FakeKeyPress(kc, TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
||||||
TheCIA1->RevMatrix);
|
|
||||||
|
|
||||||
this->fake_key_keytime --;
|
this->fake_key_keytime --;
|
||||||
if (this->fake_key_keytime == 0)
|
if (this->fake_key_keytime == 0)
|
||||||
{
|
{
|
||||||
this->fake_key_keytime = 1;
|
this->fake_key_keytime = 4;
|
||||||
this->fake_key_index ++;
|
this->fake_key_index ++;
|
||||||
|
|
||||||
if (this->fake_key_str[this->fake_key_index] == '\0')
|
if (this->fake_key_str[this->fake_key_index] == '\0')
|
||||||
@ -605,7 +601,7 @@ void C64::VBlank(bool draw_frame)
|
|||||||
this->NewPrefs(&np);
|
this->NewPrefs(&np);
|
||||||
ThePrefs = np;
|
ThePrefs = np;
|
||||||
}
|
}
|
||||||
TheDisplay->FakeKeyPress(-1, false, TheCIA1->KeyMatrix,
|
TheDisplay->FakeKeyPress(-1, TheCIA1->KeyMatrix,
|
||||||
TheCIA1->RevMatrix);
|
TheCIA1->RevMatrix);
|
||||||
|
|
||||||
this->have_a_break = false;
|
this->have_a_break = false;
|
||||||
|
@ -79,8 +79,7 @@ public:
|
|||||||
void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAVE_SDL)
|
#if defined(HAVE_SDL)
|
||||||
void FakeKeyPress(int kc, bool shift, uint8 *CIA_key_matrix,
|
void FakeKeyPress(int kc, uint8 *CIA_key_matrix, uint8 *CIA_rev_matrix);
|
||||||
uint8 *CIA_rev_matrix);
|
|
||||||
void TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
void TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
||||||
void UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix);
|
void UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix);
|
||||||
#endif
|
#endif
|
||||||
|
@ -312,37 +312,18 @@ int C64Display::BitmapXMod(void)
|
|||||||
return DISPLAY_X;
|
return DISPLAY_X;
|
||||||
}
|
}
|
||||||
|
|
||||||
void C64Display::FakeKeyPress(int kc, bool shift, uint8 *CIA_key_matrix,
|
void C64Display::FakeKeyPress(int kc, uint8 *CIA_key_matrix,
|
||||||
uint8 *CIA_rev_matrix)
|
uint8 *CIA_rev_matrix)
|
||||||
{
|
{
|
||||||
|
int shifted = kc & 0x80;
|
||||||
// Clear matrices
|
// Clear matrices
|
||||||
for (int i = 0; i < 8; i ++)
|
for (int i = 0; i < 8; i ++)
|
||||||
{
|
{
|
||||||
CIA_key_matrix[i] = 0xFF;
|
CIA_key_matrix[i] = 0xFF;
|
||||||
CIA_rev_matrix[i] = 0xFF;
|
CIA_rev_matrix[i] = 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shift)
|
|
||||||
{
|
|
||||||
CIA_key_matrix[6] &= 0xef;
|
|
||||||
CIA_rev_matrix[4] &= 0xbf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (kc != -1)
|
if (kc != -1)
|
||||||
{
|
this->UpdateKeyMatrix(kc, false, CIA_key_matrix, CIA_rev_matrix);
|
||||||
int c64_byte, c64_bit, shifted;
|
|
||||||
c64_byte = kc >> 3;
|
|
||||||
c64_bit = kc & 7;
|
|
||||||
shifted = kc & 128;
|
|
||||||
c64_byte &= 7;
|
|
||||||
if (shifted)
|
|
||||||
{
|
|
||||||
CIA_key_matrix[6] &= 0xef;
|
|
||||||
CIA_rev_matrix[4] &= 0xbf;
|
|
||||||
}
|
|
||||||
CIA_key_matrix[c64_byte] &= ~(1 << c64_bit);
|
|
||||||
CIA_rev_matrix[c64_bit] &= ~(1 << c64_byte);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void C64Display::UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix)
|
void C64Display::UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix)
|
||||||
|
@ -132,6 +132,7 @@ sysconfig.h: sysconfig.h.Host-SDL
|
|||||||
main.o: sysdeps.h sysconfig.h main.h C64.h Display.h Prefs.h SAM.h
|
main.o: sysdeps.h sysconfig.h main.h C64.h Display.h Prefs.h SAM.h
|
||||||
main.o: Basic_ROM.h Kernal_ROM.h Char_ROM.h 1541_ROM.h
|
main.o: Basic_ROM.h Kernal_ROM.h Char_ROM.h 1541_ROM.h
|
||||||
Display.o: sysdeps.h sysconfig.h Display.h main.h Prefs.h Display_SDL.h
|
Display.o: sysdeps.h sysconfig.h Display.h main.h Prefs.h Display_SDL.h
|
||||||
|
Display_SC.o: sysdeps.h sysconfig.h Display.h main.h Prefs.h Display_SDL.h
|
||||||
Prefs.o: sysdeps.h sysconfig.h Prefs.h Display.h C64.h main.h
|
Prefs.o: sysdeps.h sysconfig.h Prefs.h Display.h C64.h main.h
|
||||||
SID.o: sysdeps.h sysconfig.h SID.h Prefs.h
|
SID.o: sysdeps.h sysconfig.h SID.h Prefs.h
|
||||||
REU.o: sysdeps.h sysconfig.h REU.h CPUC64.h C64.h Prefs.h
|
REU.o: sysdeps.h sysconfig.h REU.h CPUC64.h C64.h Prefs.h
|
||||||
|
@ -49,7 +49,7 @@ typedef struct
|
|||||||
|
|
||||||
static virtkey_t keys[KEY_COLS * KEY_ROWS] = {
|
static virtkey_t keys[KEY_COLS * KEY_ROWS] = {
|
||||||
K("<-",7,1), K("1", 7,0), K("2", 7,3), K("3", 1,0), K("4", 1,3), K("5", 2,0), K("6", 2,3), K("7", 3,0), K("8", 3,3), K("9", 4,0), K("0", 4,3), K("+", 5,0), K("-", 5,3), K("£", 6,0), K("Hom", 6,3),
|
K("<-",7,1), K("1", 7,0), K("2", 7,3), K("3", 1,0), K("4", 1,3), K("5", 2,0), K("6", 2,3), K("7", 3,0), K("8", 3,3), K("9", 4,0), K("0", 4,3), K("+", 5,0), K("-", 5,3), K("£", 6,0), K("Hom", 6,3),
|
||||||
K("Cr", 7,2), K("Q", 7,6), K("W", 1,1), K("E", 1,6), K("R", 2,2), K("T", 2,6), K("Y", 3,1), K("U", 3,6), K("I", 4,1), K("O", 6,6), K("P", 5,1), K("@", 5,6), K("*", 6,1), K("Au", 6,6),K("Rstr",4,0),
|
K("Cr", 7,2), K("Q", 7,6), K("W", 1,1), K("E", 1,6), K("R", 2,1), K("T", 2,6), K("Y", 3,1), K("U", 3,6), K("I", 4,1), K("O", 4,6), K("P", 5,1), K("@", 5,6), K("*", 6,1), K("Au", 6,6),K("Rstr",4,0),
|
||||||
K("R/Stp", 7,7), K(NULL,0,0), K("A", 1,2), K("S", 1,5), K("D", 2,2), K("F", 2,5), K("G", 3,2), K("H", 3,5), K("J", 4,2), K("K", 4,5), K("L", 5,2), K(":", 5,5), K(";", 6,2), K("=", 6,5), K("Ret", 0,1),
|
K("R/Stp", 7,7), K(NULL,0,0), K("A", 1,2), K("S", 1,5), K("D", 2,2), K("F", 2,5), K("G", 3,2), K("H", 3,5), K("J", 4,2), K("K", 4,5), K("L", 5,2), K(":", 5,5), K(";", 6,2), K("=", 6,5), K("Ret", 0,1),
|
||||||
K("C=", 7,5), S("Shft",1,7),K(NULL,0,0),K("Z", 1,4), K("X", 2,7), K("C", 2,4), K("V", 3,7), K("B", 3,4), K("N", 4,7), K("M", 4,4), K(",", 5,7), K(".", 5,4), K("/", 6,7), K("Dwn",0,7),K("Rgt", 0,2),
|
K("C=", 7,5), S("Shft",1,7),K(NULL,0,0),K("Z", 1,4), K("X", 2,7), K("C", 2,4), K("V", 3,7), K("B", 3,4), K("N", 4,7), K("M", 4,4), K(",", 5,7), K(".", 5,4), K("/", 6,7), K("Dwn",0,7),K("Rgt", 0,2),
|
||||||
N("None"), K(NULL,0,0), K(NULL,0,0), K("space", 7,4),K(0, 0,0),K(NULL,0,0), K("f1", 0,4),K("f3", 0,5),K("f5", 0,6),K("f7", 0,3),K(NULL,0,0), K(NULL,0,0), K(NULL,0,0), K(NULL,0,0), K("Del", 0,0),
|
N("None"), K(NULL,0,0), K(NULL,0,0), K("space", 7,4),K(0, 0,0),K(NULL,0,0), K("f1", 0,4),K("f3", 0,5),K("f5", 0,6),K("f7", 0,3),K(NULL,0,0), K(NULL,0,0), K(NULL,0,0), K(NULL,0,0), K("Del", 0,0),
|
||||||
@ -171,6 +171,35 @@ const char *VirtualKeyboard::keycode_to_string(int kc)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int VirtualKeyboard::char_to_keycode(char c)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < KEY_COLS * KEY_ROWS; i++)
|
||||||
|
{
|
||||||
|
virtkey_t key = keys[i];
|
||||||
|
|
||||||
|
if (key.name != NULL)
|
||||||
|
{
|
||||||
|
if (strlen(key.name) == 1)
|
||||||
|
{
|
||||||
|
if (key.name[0] == c)
|
||||||
|
return key.kc;
|
||||||
|
if (shifted_names[i] && strlen(shifted_names[i]) == 1 &&
|
||||||
|
shifted_names[i][0] == c)
|
||||||
|
return key.kc | 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OK, ugly special cases, but these are pretty important */
|
||||||
|
if (c == ' ' && strcmp(key.name, "space") == 0)
|
||||||
|
return key.kc;
|
||||||
|
if (c == '\n' && strcmp(key.name, "Ret") == 0)
|
||||||
|
return key.kc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Vobb! c=%d\n", c);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
const char VirtualKeyboard::get_char(int kc)
|
const char VirtualKeyboard::get_char(int kc)
|
||||||
{
|
{
|
||||||
/* NULL is never, ever returned */
|
/* NULL is never, ever returned */
|
||||||
|
@ -19,6 +19,7 @@ public:
|
|||||||
int get_key();
|
int get_key();
|
||||||
const char *get_string();
|
const char *get_string();
|
||||||
const char *keycode_to_string(int kc);
|
const char *keycode_to_string(int kc);
|
||||||
|
int char_to_keycode(char c);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const char get_char(int kc);
|
const char get_char(int kc);
|
||||||
|
103
Src/char_to_kc.c
103
Src/char_to_kc.c
@ -1,103 +0,0 @@
|
|||||||
/*********************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008, Simon Kagstrom
|
|
||||||
*
|
|
||||||
* Filename: char_to_kc.c
|
|
||||||
* Author: Simon Kagstrom <simon.kagstrom@gmail.com>
|
|
||||||
* Description: Convert chars to keycodes
|
|
||||||
*
|
|
||||||
* $Id:$
|
|
||||||
*
|
|
||||||
********************************************************************/
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define MATRIX(a,b) (((a) << 3) | (b))
|
|
||||||
|
|
||||||
#define SHIFT (1<<7)
|
|
||||||
|
|
||||||
static uint8_t char_to_kc[] =
|
|
||||||
{
|
|
||||||
/* Some shifted stuff */
|
|
||||||
['\"'] = MATRIX(7, 3) | SHIFT,
|
|
||||||
['?'] = MATRIX(1, 3) | SHIFT,
|
|
||||||
['!'] = MATRIX(7, 0) | SHIFT,
|
|
||||||
|
|
||||||
/* CUD */
|
|
||||||
/* F5 */
|
|
||||||
/* F3 */
|
|
||||||
/* F1 */
|
|
||||||
/* F7 */
|
|
||||||
['\n'] = MATRIX(0, 1),
|
|
||||||
[8] = MATRIX(0, 0),
|
|
||||||
|
|
||||||
['E'] = MATRIX(1, 6),
|
|
||||||
['S'] = MATRIX(1, 5),
|
|
||||||
['Z'] = MATRIX(1, 4),
|
|
||||||
['4'] = MATRIX(1, 3),
|
|
||||||
['A'] = MATRIX(1, 2),
|
|
||||||
['W'] = MATRIX(1, 1),
|
|
||||||
['3'] = MATRIX(1, 0),
|
|
||||||
|
|
||||||
['X'] = MATRIX(2, 7),
|
|
||||||
['T'] = MATRIX(2, 6),
|
|
||||||
['F'] = MATRIX(2, 5),
|
|
||||||
['C'] = MATRIX(2, 4),
|
|
||||||
['6'] = MATRIX(2, 3),
|
|
||||||
['D'] = MATRIX(2, 2),
|
|
||||||
['R'] = MATRIX(2, 1),
|
|
||||||
['5'] = MATRIX(2, 0),
|
|
||||||
|
|
||||||
['V'] = MATRIX(3, 7),
|
|
||||||
['U'] = MATRIX(3, 6),
|
|
||||||
['H'] = MATRIX(3, 5),
|
|
||||||
['B'] = MATRIX(3, 4),
|
|
||||||
['8'] = MATRIX(3, 3),
|
|
||||||
['G'] = MATRIX(3, 2),
|
|
||||||
['Y'] = MATRIX(3, 1),
|
|
||||||
['7'] = MATRIX(3, 0),
|
|
||||||
|
|
||||||
['N'] = MATRIX(4, 7),
|
|
||||||
['O'] = MATRIX(4, 6),
|
|
||||||
['K'] = MATRIX(4, 5),
|
|
||||||
['M'] = MATRIX(4, 4),
|
|
||||||
['0'] = MATRIX(4, 3),
|
|
||||||
['J'] = MATRIX(4, 2),
|
|
||||||
['I'] = MATRIX(4, 1),
|
|
||||||
['9'] = MATRIX(4, 0),
|
|
||||||
|
|
||||||
[','] = MATRIX(5, 7),
|
|
||||||
['@'] = MATRIX(5, 6),
|
|
||||||
[':'] = MATRIX(5, 5),
|
|
||||||
['.'] = MATRIX(5, 4),
|
|
||||||
['-'] = MATRIX(5, 3),
|
|
||||||
['L'] = MATRIX(5, 2),
|
|
||||||
['P'] = MATRIX(5, 1),
|
|
||||||
['+'] = MATRIX(5, 0),
|
|
||||||
|
|
||||||
['/'] = MATRIX(6, 7),
|
|
||||||
['^'] = MATRIX(6, 6),
|
|
||||||
['='] = MATRIX(6, 5),
|
|
||||||
/* SHR */
|
|
||||||
/* HOM */
|
|
||||||
[';'] = MATRIX(6, 2),
|
|
||||||
['*'] = MATRIX(6, 1),
|
|
||||||
/* ?? */
|
|
||||||
|
|
||||||
/* R/S */
|
|
||||||
['Q'] = MATRIX(7, 6),
|
|
||||||
/* C= */
|
|
||||||
[' '] = MATRIX(7, 4),
|
|
||||||
['2'] = MATRIX(7, 3),
|
|
||||||
/* CTL */
|
|
||||||
/* <- */
|
|
||||||
['1'] = MATRIX(7, 0),
|
|
||||||
};
|
|
||||||
|
|
||||||
int get_kc_from_char(char c_in, int *shifted)
|
|
||||||
{
|
|
||||||
char c = char_to_kc[(int)c_in];
|
|
||||||
int out = c & (~SHIFT);
|
|
||||||
|
|
||||||
*shifted = c & SHIFT;
|
|
||||||
return out;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user