- [NEW] Ara es pot especificar que una tecla està pulsada o no desde la consola (ula kedown X o ula keyup X)
This commit is contained in:
23
z80debug.cpp
23
z80debug.cpp
@@ -533,6 +533,11 @@ namespace z80debug
|
|||||||
strcpy(console_log[++console_log_pos], text);
|
strcpy(console_log[++console_log_pos], text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sendMoreToConsoleLog(const char *text)
|
||||||
|
{
|
||||||
|
strcat(console_log[console_log_pos], text);
|
||||||
|
}
|
||||||
|
|
||||||
void DeleteCharConsole()
|
void DeleteCharConsole()
|
||||||
{
|
{
|
||||||
if (console_history_nav != console_history_pos) {
|
if (console_history_nav != console_history_pos) {
|
||||||
@@ -739,11 +744,19 @@ namespace z80debug
|
|||||||
}
|
}
|
||||||
sendToConsoleLog("Symbol removed");
|
sendToConsoleLog("Symbol removed");
|
||||||
}
|
}
|
||||||
|
} else if (strcmp(cmd, "ula")==0) {
|
||||||
int address = getnum(cmd);
|
getcmd();
|
||||||
if (address<0 || address>=65536) { sendToConsoleLog("Illegal address"); return; }
|
if (strcmp(cmd, "keydown")==0) {
|
||||||
if (z80::getMemTag(address)!=MEMTAG_INST) address = find_previous_opcode(address);
|
getcmd();
|
||||||
z80debug::setcursor(address);
|
zx_ula::keydown(cmd[0]);
|
||||||
|
sendToConsoleLog("Keydown sent for key: ");
|
||||||
|
sendMoreToConsoleLog(cmd);
|
||||||
|
} else if (strcmp(cmd, "keyup")==0) {
|
||||||
|
getcmd();
|
||||||
|
zx_ula::keyup(cmd[0]);
|
||||||
|
sendToConsoleLog("Keyup sent for key: ");
|
||||||
|
sendMoreToConsoleLog(cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace z80debug
|
|||||||
void refresh();
|
void refresh();
|
||||||
void sendToConsole(const char* text);
|
void sendToConsole(const char* text);
|
||||||
void sendToConsoleLog(const char *text);
|
void sendToConsoleLog(const char *text);
|
||||||
|
void sendMoreToConsoleLog(const char *text);
|
||||||
void DeleteCharConsole();
|
void DeleteCharConsole();
|
||||||
void executeConsole();
|
void executeConsole();
|
||||||
|
|
||||||
|
|||||||
101
zx_ula.cpp
101
zx_ula.cpp
@@ -54,7 +54,8 @@ namespace zx_ula
|
|||||||
#define KEY_B 39
|
#define KEY_B 39
|
||||||
|
|
||||||
uint8_t zx_keyboard[40];
|
uint8_t zx_keyboard[40];
|
||||||
|
uint8_t virtual_keyboard[40] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||||
|
char key_to_keyboard[40] {'<','Z','X','C','V','A','S','D','F','G','Q','W','E','R','T','1','2','3','4','5','0','9','8','7','6','P','O','I','U','Y','-','L','K','J','H','.',',','M','N','B'};
|
||||||
static uint8_t border_color = 0;
|
static uint8_t border_color = 0;
|
||||||
static uint8_t ear = 0;
|
static uint8_t ear = 0;
|
||||||
static uint8_t mic = 0;
|
static uint8_t mic = 0;
|
||||||
@@ -69,53 +70,53 @@ namespace zx_ula
|
|||||||
const uint8_t *keys = SDL_GetKeyboardState(NULL);
|
const uint8_t *keys = SDL_GetKeyboardState(NULL);
|
||||||
|
|
||||||
// Normal keypresses
|
// Normal keypresses
|
||||||
zx_keyboard[KEY_SHIFT] = keys[SDL_SCANCODE_LSHIFT] | keys[SDL_SCANCODE_RSHIFT];
|
zx_keyboard[KEY_SHIFT] = virtual_keyboard[KEY_SHIFT] | keys[SDL_SCANCODE_LSHIFT] | keys[SDL_SCANCODE_RSHIFT];
|
||||||
zx_keyboard[KEY_Z] = keys[SDL_SCANCODE_Z];
|
zx_keyboard[KEY_Z] = virtual_keyboard[KEY_Z] | keys[SDL_SCANCODE_Z];
|
||||||
zx_keyboard[KEY_X] = keys[SDL_SCANCODE_X];
|
zx_keyboard[KEY_X] = virtual_keyboard[KEY_X] | keys[SDL_SCANCODE_X];
|
||||||
zx_keyboard[KEY_C] = keys[SDL_SCANCODE_C];
|
zx_keyboard[KEY_C] = virtual_keyboard[KEY_C] | keys[SDL_SCANCODE_C];
|
||||||
zx_keyboard[KEY_V] = keys[SDL_SCANCODE_V];
|
zx_keyboard[KEY_V] = virtual_keyboard[KEY_V] | keys[SDL_SCANCODE_V];
|
||||||
|
|
||||||
zx_keyboard[KEY_A] = keys[SDL_SCANCODE_A];
|
zx_keyboard[KEY_A] = virtual_keyboard[KEY_A] | keys[SDL_SCANCODE_A];
|
||||||
zx_keyboard[KEY_S] = keys[SDL_SCANCODE_S];
|
zx_keyboard[KEY_S] = virtual_keyboard[KEY_S] | keys[SDL_SCANCODE_S];
|
||||||
zx_keyboard[KEY_D] = keys[SDL_SCANCODE_D];
|
zx_keyboard[KEY_D] = virtual_keyboard[KEY_D] | keys[SDL_SCANCODE_D];
|
||||||
zx_keyboard[KEY_F] = keys[SDL_SCANCODE_F];
|
zx_keyboard[KEY_F] = virtual_keyboard[KEY_F] | keys[SDL_SCANCODE_F];
|
||||||
zx_keyboard[KEY_G] = keys[SDL_SCANCODE_G];
|
zx_keyboard[KEY_G] = virtual_keyboard[KEY_G] | keys[SDL_SCANCODE_G];
|
||||||
|
|
||||||
zx_keyboard[KEY_Q] = keys[SDL_SCANCODE_Q];
|
zx_keyboard[KEY_Q] = virtual_keyboard[KEY_Q] | keys[SDL_SCANCODE_Q];
|
||||||
zx_keyboard[KEY_W] = keys[SDL_SCANCODE_W];
|
zx_keyboard[KEY_W] = virtual_keyboard[KEY_W] | keys[SDL_SCANCODE_W];
|
||||||
zx_keyboard[KEY_E] = keys[SDL_SCANCODE_E];
|
zx_keyboard[KEY_E] = virtual_keyboard[KEY_E] | keys[SDL_SCANCODE_E];
|
||||||
zx_keyboard[KEY_R] = keys[SDL_SCANCODE_R];
|
zx_keyboard[KEY_R] = virtual_keyboard[KEY_R] | keys[SDL_SCANCODE_R];
|
||||||
zx_keyboard[KEY_T] = keys[SDL_SCANCODE_T];
|
zx_keyboard[KEY_T] = virtual_keyboard[KEY_T] | keys[SDL_SCANCODE_T];
|
||||||
|
|
||||||
zx_keyboard[KEY_1] = keys[SDL_SCANCODE_1] | keys[SDL_SCANCODE_KP_1];
|
zx_keyboard[KEY_1] = virtual_keyboard[KEY_1] | keys[SDL_SCANCODE_1] | keys[SDL_SCANCODE_KP_1];
|
||||||
zx_keyboard[KEY_2] = keys[SDL_SCANCODE_2] | keys[SDL_SCANCODE_KP_2];
|
zx_keyboard[KEY_2] = virtual_keyboard[KEY_2] | keys[SDL_SCANCODE_2] | keys[SDL_SCANCODE_KP_2];
|
||||||
zx_keyboard[KEY_3] = keys[SDL_SCANCODE_3] | keys[SDL_SCANCODE_KP_3];
|
zx_keyboard[KEY_3] = virtual_keyboard[KEY_3] | keys[SDL_SCANCODE_3] | keys[SDL_SCANCODE_KP_3];
|
||||||
zx_keyboard[KEY_4] = keys[SDL_SCANCODE_4] | keys[SDL_SCANCODE_KP_4];
|
zx_keyboard[KEY_4] = virtual_keyboard[KEY_4] | keys[SDL_SCANCODE_4] | keys[SDL_SCANCODE_KP_4];
|
||||||
zx_keyboard[KEY_5] = keys[SDL_SCANCODE_5] | keys[SDL_SCANCODE_KP_5];
|
zx_keyboard[KEY_5] = virtual_keyboard[KEY_5] | keys[SDL_SCANCODE_5] | keys[SDL_SCANCODE_KP_5];
|
||||||
|
|
||||||
zx_keyboard[KEY_0] = keys[SDL_SCANCODE_0] | keys[SDL_SCANCODE_KP_0];
|
zx_keyboard[KEY_0] = virtual_keyboard[KEY_0] | keys[SDL_SCANCODE_0] | keys[SDL_SCANCODE_KP_0];
|
||||||
zx_keyboard[KEY_9] = keys[SDL_SCANCODE_9] | keys[SDL_SCANCODE_KP_9];
|
zx_keyboard[KEY_9] = virtual_keyboard[KEY_9] | keys[SDL_SCANCODE_9] | keys[SDL_SCANCODE_KP_9];
|
||||||
zx_keyboard[KEY_8] = keys[SDL_SCANCODE_8] | keys[SDL_SCANCODE_KP_8];
|
zx_keyboard[KEY_8] = virtual_keyboard[KEY_8] | keys[SDL_SCANCODE_8] | keys[SDL_SCANCODE_KP_8];
|
||||||
zx_keyboard[KEY_7] = keys[SDL_SCANCODE_7] | keys[SDL_SCANCODE_KP_7];
|
zx_keyboard[KEY_7] = virtual_keyboard[KEY_7] | keys[SDL_SCANCODE_7] | keys[SDL_SCANCODE_KP_7];
|
||||||
zx_keyboard[KEY_6] = keys[SDL_SCANCODE_6] | keys[SDL_SCANCODE_KP_6];
|
zx_keyboard[KEY_6] = virtual_keyboard[KEY_6] | keys[SDL_SCANCODE_6] | keys[SDL_SCANCODE_KP_6];
|
||||||
|
|
||||||
zx_keyboard[KEY_P] = keys[SDL_SCANCODE_P];
|
zx_keyboard[KEY_P] = virtual_keyboard[KEY_P] | keys[SDL_SCANCODE_P];
|
||||||
zx_keyboard[KEY_O] = keys[SDL_SCANCODE_O];
|
zx_keyboard[KEY_O] = virtual_keyboard[KEY_O] | keys[SDL_SCANCODE_O];
|
||||||
zx_keyboard[KEY_I] = keys[SDL_SCANCODE_I];
|
zx_keyboard[KEY_I] = virtual_keyboard[KEY_I] | keys[SDL_SCANCODE_I];
|
||||||
zx_keyboard[KEY_U] = keys[SDL_SCANCODE_U];
|
zx_keyboard[KEY_U] = virtual_keyboard[KEY_U] | keys[SDL_SCANCODE_U];
|
||||||
zx_keyboard[KEY_Y] = keys[SDL_SCANCODE_Y];
|
zx_keyboard[KEY_Y] = virtual_keyboard[KEY_Y] | keys[SDL_SCANCODE_Y];
|
||||||
|
|
||||||
zx_keyboard[KEY_RETURN] = keys[SDL_SCANCODE_KP_ENTER] | keys[SDL_SCANCODE_RETURN];
|
zx_keyboard[KEY_RETURN] = virtual_keyboard[KEY_RETURN] | keys[SDL_SCANCODE_KP_ENTER] | keys[SDL_SCANCODE_RETURN];
|
||||||
zx_keyboard[KEY_L] = keys[SDL_SCANCODE_L];
|
zx_keyboard[KEY_L] = virtual_keyboard[KEY_L] | keys[SDL_SCANCODE_L];
|
||||||
zx_keyboard[KEY_K] = keys[SDL_SCANCODE_K];
|
zx_keyboard[KEY_K] = virtual_keyboard[KEY_K] | keys[SDL_SCANCODE_K];
|
||||||
zx_keyboard[KEY_J] = keys[SDL_SCANCODE_J];
|
zx_keyboard[KEY_J] = virtual_keyboard[KEY_J] | keys[SDL_SCANCODE_J];
|
||||||
zx_keyboard[KEY_H] = keys[SDL_SCANCODE_H];
|
zx_keyboard[KEY_H] = virtual_keyboard[KEY_H] | keys[SDL_SCANCODE_H];
|
||||||
|
|
||||||
zx_keyboard[KEY_SPACE] = keys[SDL_SCANCODE_SPACE];
|
zx_keyboard[KEY_SPACE] = virtual_keyboard[KEY_SPACE] | keys[SDL_SCANCODE_SPACE];
|
||||||
zx_keyboard[KEY_SYMBOL] = keys[SDL_SCANCODE_LCTRL] | keys[SDL_SCANCODE_RCTRL];
|
zx_keyboard[KEY_SYMBOL] = virtual_keyboard[KEY_SYMBOL] | keys[SDL_SCANCODE_LCTRL] | keys[SDL_SCANCODE_RCTRL];
|
||||||
zx_keyboard[KEY_M] = keys[SDL_SCANCODE_M];
|
zx_keyboard[KEY_M] = virtual_keyboard[KEY_M] | keys[SDL_SCANCODE_M];
|
||||||
zx_keyboard[KEY_N] = keys[SDL_SCANCODE_N];
|
zx_keyboard[KEY_N] = virtual_keyboard[KEY_N] | keys[SDL_SCANCODE_N];
|
||||||
zx_keyboard[KEY_B] = keys[SDL_SCANCODE_B];
|
zx_keyboard[KEY_B] = virtual_keyboard[KEY_B] | keys[SDL_SCANCODE_B];
|
||||||
|
|
||||||
// Keys in a normal keyboard that ara combinations in the zx one
|
// Keys in a normal keyboard that ara combinations in the zx one
|
||||||
if (keys[SDL_SCANCODE_BACKSPACE]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_0] = 1;
|
if (keys[SDL_SCANCODE_BACKSPACE]) zx_keyboard[KEY_SHIFT] = zx_keyboard[KEY_0] = 1;
|
||||||
@@ -301,4 +302,22 @@ namespace zx_ula
|
|||||||
//if (ear) last_1 = sound_pos;
|
//if (ear) last_1 = sound_pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int getKey(const char key)
|
||||||
|
{
|
||||||
|
for (int i=0; i<40; ++i) if (key_to_keyboard[i] == key) return i;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void keydown(const char key)
|
||||||
|
{
|
||||||
|
virtual_keyboard[getKey(key)] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyup(const char key)
|
||||||
|
{
|
||||||
|
virtual_keyboard[getKey(key)] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user