]> Shamusworld >> Repos - virtualjaguar/commitdiff
Rewrote key handling to decouple hardwired SDL way from current way.
authorShamus Hammons <jlhamm@acm.org>
Thu, 23 Jun 2011 03:51:33 +0000 (03:51 +0000)
committerShamus Hammons <jlhamm@acm.org>
Thu, 23 Jun 2011 03:51:33 +0000 (03:51 +0000)
src/gui/mainwin.cpp
src/gui/mainwin.h
src/joystick.cpp
src/joystick.h
src/settings.h

index 30c3b2a37c1a18b44ad7604eebfdf2576999b48e..1435d97a56e978e59ec8c8dd4702769346fa34bd 100644 (file)
@@ -251,62 +251,43 @@ void MainWin::closeEvent(QCloseEvent * event)
 
 void MainWin::keyPressEvent(QKeyEvent * e)
 {
-       // NOTE: Keys are hardwired...
-/*
-       vjs.p1KeyBindings[0] = settings.value("p1k_up", SDLK_UP).toInt();
-       vjs.p1KeyBindings[1] = settings.value("p1k_down", SDLK_DOWN).toInt();
-       vjs.p1KeyBindings[2] = settings.value("p1k_left", SDLK_LEFT).toInt();
-       vjs.p1KeyBindings[3] = settings.value("p1k_right", SDLK_RIGHT).toInt();
-       vjs.p1KeyBindings[4] = settings.value("p1k_c", SDLK_z).toInt();
-       vjs.p1KeyBindings[5] = settings.value("p1k_b", SDLK_x).toInt();
-       vjs.p1KeyBindings[6] = settings.value("p1k_a", SDLK_c).toInt();
-       vjs.p1KeyBindings[7] = settings.value("p1k_option", SDLK_QUOTE).toInt();
-       vjs.p1KeyBindings[8] = settings.value("p1k_pause", SDLK_RETURN).toInt();
-       vjs.p1KeyBindings[9] = settings.value("p1k_0", SDLK_KP0).toInt();
-       vjs.p1KeyBindings[10] = settings.value("p1k_1", SDLK_KP1).toInt();
-       vjs.p1KeyBindings[11] = settings.value("p1k_2", SDLK_KP2).toInt();
-       vjs.p1KeyBindings[12] = settings.value("p1k_3", SDLK_KP3).toInt();
-       vjs.p1KeyBindings[13] = settings.value("p1k_4", SDLK_KP4).toInt();
-       vjs.p1KeyBindings[14] = settings.value("p1k_5", SDLK_KP5).toInt();
-       vjs.p1KeyBindings[15] = settings.value("p1k_6", SDLK_KP6).toInt();
-       vjs.p1KeyBindings[16] = settings.value("p1k_7", SDLK_KP7).toInt();
-       vjs.p1KeyBindings[17] = settings.value("p1k_8", SDLK_KP8).toInt();
-       vjs.p1KeyBindings[18] = settings.value("p1k_9", SDLK_KP9).toInt();
-       vjs.p1KeyBindings[19] = settings.value("p1k_pound", SDLK_KP_DIVIDE).toInt();
-       vjs.p1KeyBindings[20] = settings.value("p1k_star", SDLK_KP_MULTIPLY).toInt();
-*/
-       if (e->key() == Qt::Key_Up)
-               keyBuffer[0] = true;
-       else if (e->key() == Qt::Key_Down)
-               keyBuffer[1] = true;
-       else if (e->key() == Qt::Key_Left)
-               keyBuffer[2] = true;
-       else if (e->key() == Qt::Key_Right)
-               keyBuffer[3] = true;
-       else if (e->key() == Qt::Key_Z)
-               keyBuffer[4] = true;
-       else if (e->key() == Qt::Key_X)
-               keyBuffer[5] = true;
-       else if (e->key() == Qt::Key_C)
-               keyBuffer[6] = true;
+       HandleKeys(e, true);
 }
 
 void MainWin::keyReleaseEvent(QKeyEvent * e)
 {
-       if (e->key() == Qt::Key_Up)
-               keyBuffer[0] = false;
-       else if (e->key() == Qt::Key_Down)
-               keyBuffer[1] = false;
-       else if (e->key() == Qt::Key_Left)
-               keyBuffer[2] = false;
-       else if (e->key() == Qt::Key_Right)
-               keyBuffer[3] = false;
-       else if (e->key() == Qt::Key_Z)
-               keyBuffer[4] = false;
-       else if (e->key() == Qt::Key_X)
-               keyBuffer[5] = false;
-       else if (e->key() == Qt::Key_C)
-               keyBuffer[6] = false;
+       HandleKeys(e, false);
+}
+
+void MainWin::HandleKeys(QKeyEvent * e, bool state)
+{
+       // We kill bad key combos here, before they can get to the emulator...
+       // This also kills the illegal instruction problem that cropped up in Rayman!
+       // May want to do this by killing the old one instead of ignoring the new one...
+       // Seems to work better that way...
+#if 0
+       if ((e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R])
+               || (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L])
+               || (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D])
+               || (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U]))
+               return;
+#else
+       if (e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R])
+               joypad_0_buttons[BUTTON_R] = 0;
+       if (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L])
+               joypad_0_buttons[BUTTON_L] = 0;
+       if (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D])
+               joypad_0_buttons[BUTTON_D] = 0;
+       if (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])
+               joypad_0_buttons[BUTTON_U] = 0;
+#endif
+
+       // No bad combos exist, let's stuff the emulator key buffers...!
+       for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++)
+       {
+               if (e->key() == vjs.p1KeyBindings[i])
+                       joypad_0_buttons[i] = (uint8)state;
+       }
 }
 
 void MainWin::Open(void)
@@ -625,49 +606,49 @@ WriteLog("    EEPROMPath  = \"%s\"\n", vjs.EEPROMPath);
 WriteLog("    ROMPath     = \"%s\"\n", vjs.ROMPath);
 
        // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *
-       vjs.p1KeyBindings[0] = settings.value("p1k_up", SDLK_UP).toInt();
-       vjs.p1KeyBindings[1] = settings.value("p1k_down", SDLK_DOWN).toInt();
-       vjs.p1KeyBindings[2] = settings.value("p1k_left", SDLK_LEFT).toInt();
-       vjs.p1KeyBindings[3] = settings.value("p1k_right", SDLK_RIGHT).toInt();
-       vjs.p1KeyBindings[4] = settings.value("p1k_c", SDLK_z).toInt();
-       vjs.p1KeyBindings[5] = settings.value("p1k_b", SDLK_x).toInt();
-       vjs.p1KeyBindings[6] = settings.value("p1k_a", SDLK_c).toInt();
-       vjs.p1KeyBindings[7] = settings.value("p1k_option", SDLK_QUOTE).toInt();
-       vjs.p1KeyBindings[8] = settings.value("p1k_pause", SDLK_RETURN).toInt();
-       vjs.p1KeyBindings[9] = settings.value("p1k_0", SDLK_KP0).toInt();
-       vjs.p1KeyBindings[10] = settings.value("p1k_1", SDLK_KP1).toInt();
-       vjs.p1KeyBindings[11] = settings.value("p1k_2", SDLK_KP2).toInt();
-       vjs.p1KeyBindings[12] = settings.value("p1k_3", SDLK_KP3).toInt();
-       vjs.p1KeyBindings[13] = settings.value("p1k_4", SDLK_KP4).toInt();
-       vjs.p1KeyBindings[14] = settings.value("p1k_5", SDLK_KP5).toInt();
-       vjs.p1KeyBindings[15] = settings.value("p1k_6", SDLK_KP6).toInt();
-       vjs.p1KeyBindings[16] = settings.value("p1k_7", SDLK_KP7).toInt();
-       vjs.p1KeyBindings[17] = settings.value("p1k_8", SDLK_KP8).toInt();
-       vjs.p1KeyBindings[18] = settings.value("p1k_9", SDLK_KP9).toInt();
-       vjs.p1KeyBindings[19] = settings.value("p1k_pound", SDLK_KP_DIVIDE).toInt();
-       vjs.p1KeyBindings[20] = settings.value("p1k_star", SDLK_KP_MULTIPLY).toInt();
-
-       vjs.p2KeyBindings[0] = settings.value("p2k_up", SDLK_UP).toInt();
-       vjs.p2KeyBindings[1] = settings.value("p2k_down", SDLK_DOWN).toInt();
-       vjs.p2KeyBindings[2] = settings.value("p2k_left", SDLK_LEFT).toInt();
-       vjs.p2KeyBindings[3] = settings.value("p2k_right", SDLK_RIGHT).toInt();
-       vjs.p2KeyBindings[4] = settings.value("p2k_c", SDLK_z).toInt();
-       vjs.p2KeyBindings[5] = settings.value("p2k_b", SDLK_x).toInt();
-       vjs.p2KeyBindings[6] = settings.value("p2k_a", SDLK_c).toInt();
-       vjs.p2KeyBindings[7] = settings.value("p2k_option", SDLK_QUOTE).toInt();
-       vjs.p2KeyBindings[8] = settings.value("p2k_pause", SDLK_RETURN).toInt();
-       vjs.p2KeyBindings[9] = settings.value("p2k_0", SDLK_KP0).toInt();
-       vjs.p2KeyBindings[10] = settings.value("p2k_1", SDLK_KP1).toInt();
-       vjs.p2KeyBindings[11] = settings.value("p2k_2", SDLK_KP2).toInt();
-       vjs.p2KeyBindings[12] = settings.value("p2k_3", SDLK_KP3).toInt();
-       vjs.p2KeyBindings[13] = settings.value("p2k_4", SDLK_KP4).toInt();
-       vjs.p2KeyBindings[14] = settings.value("p2k_5", SDLK_KP5).toInt();
-       vjs.p2KeyBindings[15] = settings.value("p2k_6", SDLK_KP6).toInt();
-       vjs.p2KeyBindings[16] = settings.value("p2k_7", SDLK_KP7).toInt();
-       vjs.p2KeyBindings[17] = settings.value("p2k_8", SDLK_KP8).toInt();
-       vjs.p2KeyBindings[18] = settings.value("p2k_9", SDLK_KP9).toInt();
-       vjs.p2KeyBindings[19] = settings.value("p2k_pound", SDLK_KP_DIVIDE).toInt();
-       vjs.p2KeyBindings[20] = settings.value("p2k_star", SDLK_KP_MULTIPLY).toInt();
+       vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_Up).toInt();
+       vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_Down).toInt();
+       vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_Left).toInt();
+       vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_Right).toInt();
+       vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_Z).toInt();
+       vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_X).toInt();
+       vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_C).toInt();
+       vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_Apostrophe).toInt();
+       vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_Return).toInt();
+       vjs.p1KeyBindings[BUTTON_0] = settings.value("p1k_0", Qt::Key_0).toInt();
+       vjs.p1KeyBindings[BUTTON_1] = settings.value("p1k_1", Qt::Key_1).toInt();
+       vjs.p1KeyBindings[BUTTON_2] = settings.value("p1k_2", Qt::Key_2).toInt();
+       vjs.p1KeyBindings[BUTTON_3] = settings.value("p1k_3", Qt::Key_3).toInt();
+       vjs.p1KeyBindings[BUTTON_4] = settings.value("p1k_4", Qt::Key_4).toInt();
+       vjs.p1KeyBindings[BUTTON_5] = settings.value("p1k_5", Qt::Key_5).toInt();
+       vjs.p1KeyBindings[BUTTON_6] = settings.value("p1k_6", Qt::Key_6).toInt();
+       vjs.p1KeyBindings[BUTTON_7] = settings.value("p1k_7", Qt::Key_7).toInt();
+       vjs.p1KeyBindings[BUTTON_8] = settings.value("p1k_8", Qt::Key_8).toInt();
+       vjs.p1KeyBindings[BUTTON_9] = settings.value("p1k_9", Qt::Key_9).toInt();
+       vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Slash).toInt();
+       vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Asterisk).toInt();
+
+       vjs.p2KeyBindings[BUTTON_U] = settings.value("p2k_up", Qt::Key_Up).toInt();
+       vjs.p2KeyBindings[BUTTON_D] = settings.value("p2k_down", Qt::Key_Down).toInt();
+       vjs.p2KeyBindings[BUTTON_L] = settings.value("p2k_left", Qt::Key_Left).toInt();
+       vjs.p2KeyBindings[BUTTON_R] = settings.value("p2k_right", Qt::Key_Right).toInt();
+       vjs.p2KeyBindings[BUTTON_C] = settings.value("p2k_c", Qt::Key_Z).toInt();
+       vjs.p2KeyBindings[BUTTON_B] = settings.value("p2k_b", Qt::Key_X).toInt();
+       vjs.p2KeyBindings[BUTTON_A] = settings.value("p2k_a", Qt::Key_C).toInt();
+       vjs.p2KeyBindings[BUTTON_OPTION] = settings.value("p2k_option", Qt::Key_Apostrophe).toInt();
+       vjs.p2KeyBindings[BUTTON_PAUSE] = settings.value("p2k_pause", Qt::Key_Return).toInt();
+       vjs.p2KeyBindings[BUTTON_0] = settings.value("p2k_0", Qt::Key_0).toInt();
+       vjs.p2KeyBindings[BUTTON_1] = settings.value("p2k_1", Qt::Key_1).toInt();
+       vjs.p2KeyBindings[BUTTON_2] = settings.value("p2k_2", Qt::Key_2).toInt();
+       vjs.p2KeyBindings[BUTTON_3] = settings.value("p2k_3", Qt::Key_3).toInt();
+       vjs.p2KeyBindings[BUTTON_4] = settings.value("p2k_4", Qt::Key_4).toInt();
+       vjs.p2KeyBindings[BUTTON_5] = settings.value("p2k_5", Qt::Key_5).toInt();
+       vjs.p2KeyBindings[BUTTON_6] = settings.value("p2k_6", Qt::Key_6).toInt();
+       vjs.p2KeyBindings[BUTTON_7] = settings.value("p2k_7", Qt::Key_7).toInt();
+       vjs.p2KeyBindings[BUTTON_8] = settings.value("p2k_8", Qt::Key_8).toInt();
+       vjs.p2KeyBindings[BUTTON_9] = settings.value("p2k_9", Qt::Key_9).toInt();
+       vjs.p2KeyBindings[BUTTON_d] = settings.value("p2k_pound", Qt::Key_Slash).toInt();
+       vjs.p2KeyBindings[BUTTON_s] = settings.value("p2k_star", Qt::Key_Asterisk).toInt();
 }
 
 void MainWin::WriteSettings(void)
@@ -694,49 +675,49 @@ void MainWin::WriteSettings(void)
        settings.setValue("EEPROMs", vjs.EEPROMPath);
        settings.setValue("ROMs", vjs.ROMPath);
 
-       settings.setValue("p1k_up", vjs.p1KeyBindings[0]);
-       settings.setValue("p1k_down", vjs.p1KeyBindings[1]);
-       settings.setValue("p1k_left", vjs.p1KeyBindings[2]);
-       settings.setValue("p1k_right", vjs.p1KeyBindings[3]);
-       settings.setValue("p1k_c", vjs.p1KeyBindings[4]);
-       settings.setValue("p1k_b", vjs.p1KeyBindings[5]);
-       settings.setValue("p1k_a", vjs.p1KeyBindings[6]);
-       settings.setValue("p1k_option", vjs.p1KeyBindings[7]);
-       settings.setValue("p1k_pause", vjs.p1KeyBindings[8]);
-       settings.setValue("p1k_0", vjs.p1KeyBindings[9]);
-       settings.setValue("p1k_1", vjs.p1KeyBindings[10]);
-       settings.setValue("p1k_2", vjs.p1KeyBindings[11]);
-       settings.setValue("p1k_3", vjs.p1KeyBindings[12]);
-       settings.setValue("p1k_4", vjs.p1KeyBindings[13]);
-       settings.setValue("p1k_5", vjs.p1KeyBindings[14]);
-       settings.setValue("p1k_6", vjs.p1KeyBindings[15]);
-       settings.setValue("p1k_7", vjs.p1KeyBindings[16]);
-       settings.setValue("p1k_8", vjs.p1KeyBindings[17]);
-       settings.setValue("p1k_9", vjs.p1KeyBindings[18]);
-       settings.setValue("p1k_pound", vjs.p1KeyBindings[19]);
-       settings.setValue("p1k_star", vjs.p1KeyBindings[20]);
-
-       settings.setValue("p2k_up", vjs.p2KeyBindings[0]);
-       settings.setValue("p2k_down", vjs.p2KeyBindings[1]);
-       settings.setValue("p2k_left", vjs.p2KeyBindings[2]);
-       settings.setValue("p2k_right", vjs.p2KeyBindings[3]);
-       settings.setValue("p2k_c", vjs.p2KeyBindings[4]);
-       settings.setValue("p2k_b", vjs.p2KeyBindings[5]);
-       settings.setValue("p2k_a", vjs.p2KeyBindings[6]);
-       settings.setValue("p2k_option", vjs.p2KeyBindings[7]);
-       settings.setValue("p2k_pause", vjs.p2KeyBindings[8]);
-       settings.setValue("p2k_0", vjs.p2KeyBindings[9]);
-       settings.setValue("p2k_1", vjs.p2KeyBindings[10]);
-       settings.setValue("p2k_2", vjs.p2KeyBindings[11]);
-       settings.setValue("p2k_3", vjs.p2KeyBindings[12]);
-       settings.setValue("p2k_4", vjs.p2KeyBindings[13]);
-       settings.setValue("p2k_5", vjs.p2KeyBindings[14]);
-       settings.setValue("p2k_6", vjs.p2KeyBindings[15]);
-       settings.setValue("p2k_7", vjs.p2KeyBindings[16]);
-       settings.setValue("p2k_8", vjs.p2KeyBindings[17]);
-       settings.setValue("p2k_9", vjs.p2KeyBindings[18]);
-       settings.setValue("p2k_pound", vjs.p2KeyBindings[19]);
-       settings.setValue("p2k_star", vjs.p2KeyBindings[20]);
+       settings.setValue("p1k_up", vjs.p1KeyBindings[BUTTON_U]);
+       settings.setValue("p1k_down", vjs.p1KeyBindings[BUTTON_D]);
+       settings.setValue("p1k_left", vjs.p1KeyBindings[BUTTON_L]);
+       settings.setValue("p1k_right", vjs.p1KeyBindings[BUTTON_R]);
+       settings.setValue("p1k_c", vjs.p1KeyBindings[BUTTON_C]);
+       settings.setValue("p1k_b", vjs.p1KeyBindings[BUTTON_B]);
+       settings.setValue("p1k_a", vjs.p1KeyBindings[BUTTON_A]);
+       settings.setValue("p1k_option", vjs.p1KeyBindings[BUTTON_OPTION]);
+       settings.setValue("p1k_pause", vjs.p1KeyBindings[BUTTON_PAUSE]);
+       settings.setValue("p1k_0", vjs.p1KeyBindings[BUTTON_0]);
+       settings.setValue("p1k_1", vjs.p1KeyBindings[BUTTON_1]);
+       settings.setValue("p1k_2", vjs.p1KeyBindings[BUTTON_2]);
+       settings.setValue("p1k_3", vjs.p1KeyBindings[BUTTON_3]);
+       settings.setValue("p1k_4", vjs.p1KeyBindings[BUTTON_4]);
+       settings.setValue("p1k_5", vjs.p1KeyBindings[BUTTON_5]);
+       settings.setValue("p1k_6", vjs.p1KeyBindings[BUTTON_6]);
+       settings.setValue("p1k_7", vjs.p1KeyBindings[BUTTON_7]);
+       settings.setValue("p1k_8", vjs.p1KeyBindings[BUTTON_8]);
+       settings.setValue("p1k_9", vjs.p1KeyBindings[BUTTON_9]);
+       settings.setValue("p1k_pound", vjs.p1KeyBindings[BUTTON_d]);
+       settings.setValue("p1k_star", vjs.p1KeyBindings[BUTTON_s]);
+
+       settings.setValue("p2k_up", vjs.p2KeyBindings[BUTTON_U]);
+       settings.setValue("p2k_down", vjs.p2KeyBindings[BUTTON_D]);
+       settings.setValue("p2k_left", vjs.p2KeyBindings[BUTTON_L]);
+       settings.setValue("p2k_right", vjs.p2KeyBindings[BUTTON_R]);
+       settings.setValue("p2k_c", vjs.p2KeyBindings[BUTTON_C]);
+       settings.setValue("p2k_b", vjs.p2KeyBindings[BUTTON_B]);
+       settings.setValue("p2k_a", vjs.p2KeyBindings[BUTTON_A]);
+       settings.setValue("p2k_option", vjs.p2KeyBindings[BUTTON_OPTION]);
+       settings.setValue("p2k_pause", vjs.p2KeyBindings[BUTTON_PAUSE]);
+       settings.setValue("p2k_0", vjs.p2KeyBindings[BUTTON_0]);
+       settings.setValue("p2k_1", vjs.p2KeyBindings[BUTTON_1]);
+       settings.setValue("p2k_2", vjs.p2KeyBindings[BUTTON_2]);
+       settings.setValue("p2k_3", vjs.p2KeyBindings[BUTTON_3]);
+       settings.setValue("p2k_4", vjs.p2KeyBindings[BUTTON_4]);
+       settings.setValue("p2k_5", vjs.p2KeyBindings[BUTTON_5]);
+       settings.setValue("p2k_6", vjs.p2KeyBindings[BUTTON_6]);
+       settings.setValue("p2k_7", vjs.p2KeyBindings[BUTTON_7]);
+       settings.setValue("p2k_8", vjs.p2KeyBindings[BUTTON_8]);
+       settings.setValue("p2k_9", vjs.p2KeyBindings[BUTTON_9]);
+       settings.setValue("p2k_pound", vjs.p2KeyBindings[BUTTON_d]);
+       settings.setValue("p2k_star", vjs.p2KeyBindings[BUTTON_s]);
 }
 
 // Here's how Byuu does it...
index e6dfef1c56c07406c9b8fd4250c3b34098ce77bc..2b332d35b510849dc9fc7f682659ee2171f20151 100644 (file)
@@ -42,11 +42,10 @@ class MainWin: public QMainWindow
                void ToggleBlur(void);
                void ShowAboutWin(void);
                void InsertCart(void);
-
-//     public slots:
                void LoadSoftware(QString);
 
        private:
+               void HandleKeys(QKeyEvent *, bool);
                void ResizeMainWindow(void);
                void ReadSettings(void);
                void WriteSettings(void);
index 2de43cecfabd054952d95b013381141a014acf98..0a391b0bd00f979641e11a81764e05f306bc1e60 100644 (file)
@@ -24,6 +24,7 @@
 #include "settings.h"
 #include "video.h"
 
+#if 0
 #define BUTTON_U               0
 #define BUTTON_D               1
 #define BUTTON_L               2
 #define BUTTON_C               18
 #define BUTTON_OPTION  19
 #define BUTTON_PAUSE   20
+#endif
 
 // Global vars
 
 static uint8 joystick_ram[4];
-static uint8 joypad_0_buttons[21];
-static uint8 joypad_1_buttons[21];
+uint8 joypad_0_buttons[21];
+uint8 joypad_1_buttons[21];
 
 bool keyBuffer[21];
 
@@ -82,16 +84,17 @@ void JoystickInit(void)
 
 void JoystickExec(void)
 {
-       uint8 * keystate = SDL_GetKeyState(NULL);
+//     uint8 * keystate = SDL_GetKeyState(NULL);
 
-       memset(joypad_0_buttons, 0, 21);
-       memset(joypad_1_buttons, 0, 21);
+//     memset(joypad_0_buttons, 0, 21);
+//     memset(joypad_1_buttons, 0, 21);
        gpu_start_log = 0;                                                      // Only log while key down!
        effect_start = 0;
        effect_start2 = effect_start3 = effect_start4 = effect_start5 = effect_start6 = 0;
        blit_start_log = 0;
        iLeft = iRight = false;
 
+#if 0
        if ((keystate[SDLK_LALT] || keystate[SDLK_RALT]) & keystate[SDLK_RETURN])
                ToggleFullscreen();
 
@@ -114,6 +117,36 @@ void JoystickExec(void)
                joypad_0_buttons[BUTTON_B] = 0x01;
        if (keystate[vjs.p1KeyBindings[6]])
                joypad_0_buttons[BUTTON_A] = 0x01;
+//I may yet move these to O and P...
+       if (keystate[vjs.p1KeyBindings[7]])
+               joypad_0_buttons[BUTTON_OPTION] = 0x01;
+       if (keystate[vjs.p1KeyBindings[8]])
+               joypad_0_buttons[BUTTON_PAUSE] = 0x01;
+
+       if (keystate[vjs.p1KeyBindings[9]])
+               joypad_0_buttons[BUTTON_0] = 0x01;
+       if (keystate[vjs.p1KeyBindings[10]])
+               joypad_0_buttons[BUTTON_1] = 0x01;
+       if (keystate[vjs.p1KeyBindings[11]])
+               joypad_0_buttons[BUTTON_2] = 0x01;
+       if (keystate[vjs.p1KeyBindings[12]])
+               joypad_0_buttons[BUTTON_3] = 0x01;
+       if (keystate[vjs.p1KeyBindings[13]])
+               joypad_0_buttons[BUTTON_4] = 0x01;
+       if (keystate[vjs.p1KeyBindings[14]])
+               joypad_0_buttons[BUTTON_5] = 0x01;
+       if (keystate[vjs.p1KeyBindings[15]])
+               joypad_0_buttons[BUTTON_6] = 0x01;
+       if (keystate[vjs.p1KeyBindings[16]])
+               joypad_0_buttons[BUTTON_7] = 0x01;
+       if (keystate[vjs.p1KeyBindings[17]])
+               joypad_0_buttons[BUTTON_8] = 0x01;
+       if (keystate[vjs.p1KeyBindings[18]])
+               joypad_0_buttons[BUTTON_9] = 0x01;
+       if (keystate[vjs.p1KeyBindings[19]])
+               joypad_0_buttons[BUTTON_s] = 0x01;
+       if (keystate[vjs.p1KeyBindings[20]])
+               joypad_0_buttons[BUTTON_d] = 0x01;
 #else
        if (keyBuffer[0])
                joypad_0_buttons[BUTTON_U] = 0x01;
@@ -130,37 +163,37 @@ void JoystickExec(void)
                joypad_0_buttons[BUTTON_B] = 0x01;
        if (keyBuffer[6])
                joypad_0_buttons[BUTTON_A] = 0x01;
-#endif
 //I may yet move these to O and P...
-       if (keystate[vjs.p1KeyBindings[7]])
+       if (keyBuffer[7])
                joypad_0_buttons[BUTTON_OPTION] = 0x01;
-       if (keystate[vjs.p1KeyBindings[8]])
+       if (keyBuffer[8])
                joypad_0_buttons[BUTTON_PAUSE] = 0x01;
 
-       if (keystate[vjs.p1KeyBindings[9]])
+       if (keyBuffer[9])
                joypad_0_buttons[BUTTON_0] = 0x01;
-       if (keystate[vjs.p1KeyBindings[10]])
+       if (keyBuffer[10])
                joypad_0_buttons[BUTTON_1] = 0x01;
-       if (keystate[vjs.p1KeyBindings[11]])
+       if (keyBuffer[11])
                joypad_0_buttons[BUTTON_2] = 0x01;
-       if (keystate[vjs.p1KeyBindings[12]])
+       if (keyBuffer[12])
                joypad_0_buttons[BUTTON_3] = 0x01;
-       if (keystate[vjs.p1KeyBindings[13]])
+       if (keyBuffer[13])
                joypad_0_buttons[BUTTON_4] = 0x01;
-       if (keystate[vjs.p1KeyBindings[14]])
+       if (keyBuffer[14])
                joypad_0_buttons[BUTTON_5] = 0x01;
-       if (keystate[vjs.p1KeyBindings[15]])
+       if (keyBuffer[15])
                joypad_0_buttons[BUTTON_6] = 0x01;
-       if (keystate[vjs.p1KeyBindings[16]])
+       if (keyBuffer[16])
                joypad_0_buttons[BUTTON_7] = 0x01;
-       if (keystate[vjs.p1KeyBindings[17]])
+       if (keyBuffer[17])
                joypad_0_buttons[BUTTON_8] = 0x01;
-       if (keystate[vjs.p1KeyBindings[18]])
+       if (keyBuffer[18])
                joypad_0_buttons[BUTTON_9] = 0x01;
-       if (keystate[vjs.p1KeyBindings[19]])
+       if (keyBuffer[19])
                joypad_0_buttons[BUTTON_s] = 0x01;
-       if (keystate[vjs.p1KeyBindings[20]])
+       if (keyBuffer[20])
                joypad_0_buttons[BUTTON_d] = 0x01;
+#endif
 
 #warning "!!! FIX !!! (debounceRunKey)"
 //     extern bool debounceRunKey;
@@ -260,6 +293,20 @@ void JoystickExec(void)
        }
        else
                bssHeld = false;
+#endif
+       // We need to ensure that illegal combinations are not possible.
+       // So, we do a simple minded way here...
+       // It would be better to check to see which one was pressed last
+       // and discard that one, but for now...
+//This didn't work... Was still able to do bad combination.
+//It's because the GUI is changing this *after* we fix it here.
+#if 0
+       if (joypad_0_buttons[BUTTON_R] && joypad_0_buttons[BUTTON_L])
+               joypad_0_buttons[BUTTON_L] = 0;
+
+       if (joypad_0_buttons[BUTTON_U] && joypad_0_buttons[BUTTON_D])
+               joypad_0_buttons[BUTTON_D] = 0;
+#endif
 
        // Joystick support [nwagenaar]
 
index e98dcdbc795b6f5af08d2c06a17ab664269529b7..98eb9775eaa2eed9ae53817d706fe718313da6ea 100644 (file)
@@ -7,6 +7,30 @@
 
 #include "types.h"
 
+enum { BUTTON_FIRST = 0, BUTTON_U = 0,
+BUTTON_D = 1,
+BUTTON_L = 2,
+BUTTON_R = 3,
+
+BUTTON_s = 4,
+BUTTON_7 = 5,
+BUTTON_4 = 6,
+BUTTON_1 = 7,
+BUTTON_0 = 8,
+BUTTON_8 = 9,
+BUTTON_5 = 10,
+BUTTON_2 = 11,
+BUTTON_d = 12,
+BUTTON_9 = 13,
+BUTTON_6 = 14,
+BUTTON_3 = 15,
+
+BUTTON_A = 16,
+BUTTON_B = 17,
+BUTTON_C = 18,
+BUTTON_OPTION = 19,
+BUTTON_PAUSE = 20, BUTTON_LAST = 20 };
+
 void JoystickInit(void);
 void JoystickReset(void);
 void JoystickDone(void);
@@ -17,5 +41,6 @@ uint16 JoystickReadWord(uint32);
 void JoystickExec(void);
 
 extern bool keyBuffer[];
-
+extern uint8 joypad_0_buttons[];
+extern uint8 joypad_1_buttons[];
 #endif
index acc8c91e280b1f1c149c875e6329687a209cf4cf..a7ca244e1083f3b31b4e4014d805e6fe18600958 100644 (file)
@@ -33,8 +33,8 @@ struct VJSettings
 
        // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *
 
-       uint16 p1KeyBindings[21];
-       uint16 p2KeyBindings[21];
+       uint32 p1KeyBindings[21];
+       uint32 p2KeyBindings[21];
 
        // Paths