X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fjoystick.cpp;h=07135cc6bc81dc7ea45ba31e5906bab444df4c2b;hb=fa566a2c8ec532eb5325b4d5a663fb2a7d72adc6;hp=b764bdd0b7445803358f6ca006220c88488a834f;hpb=0031c06df2f7f099ca5ecf1632f46b92f6b0dd79;p=virtualjaguar diff --git a/src/joystick.cpp b/src/joystick.cpp index b764bdd..07135cc 100644 --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -3,13 +3,13 @@ // // by cal2 // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) -// Cleanups by James L. Hammons +// Cleanups/fixes by James L. Hammons // -#ifndef __PORT__ -#include "include/stdafx.h" -#include -#endif +//#ifndef __PORT__ +//#include "include/stdafx.h" +//#include +//#endif #include #include #include "SDLptc.h" @@ -21,10 +21,10 @@ void main_screen_switch(void); #define BUTTON_D 1 #define BUTTON_L 2 #define BUTTON_R 3 -#define BUTTON_1 4 -#define BUTTON_4 5 -#define BUTTON_7 6 -#define BUTTON_s 7 +#define BUTTON_s 4 +#define BUTTON_7 5 +#define BUTTON_4 6 +#define BUTTON_1 7 #define BUTTON_0 8 #define BUTTON_8 9 #define BUTTON_5 10 @@ -44,9 +44,16 @@ void main_screen_switch(void); static uint8 joystick_ram[4]; static uint8 joypad_0_buttons[21]; static uint8 joypad_1_buttons[21]; -extern uint8 finished; +extern bool finished; extern int start_logging; - +int gpu_start_log = 0; +int op_start_log = 0; +int blit_start_log = 0; +int effect_start = 0; +bool interactiveMode = false; +bool iLeft, iRight, iToggle = false; +bool keyHeld1 = false, keyHeld2 = false, keyHeld3 = false; +int objectPtr = 0; void joystick_init(void) { @@ -60,6 +67,10 @@ void joystick_exec(void) memset(joypad_0_buttons, 0, 21); memset(joypad_1_buttons, 0, 21); + gpu_start_log = 0; // Only log while key down! + effect_start = 0; + blit_start_log = 0; + iLeft = iRight = false; if ((keystate[SDLK_LALT]) & (keystate[SDLK_RETURN])) main_screen_switch(); @@ -70,9 +81,10 @@ void joystick_exec(void) if (keystate[SDLK_DOWN]) joypad_0_buttons[BUTTON_D] = 0x01; if (keystate[SDLK_LEFT]) joypad_0_buttons[BUTTON_L] = 0x01; if (keystate[SDLK_RIGHT]) joypad_0_buttons[BUTTON_R] = 0x01; - if (keystate[SDLK_z]) joypad_0_buttons[BUTTON_A] = 0x01; + // The buttons are labelled C,B,A on the controller (going from left to right) + if (keystate[SDLK_z]) joypad_0_buttons[BUTTON_C] = 0x01; if (keystate[SDLK_x]) joypad_0_buttons[BUTTON_B] = 0x01; - if (keystate[SDLK_c]) joypad_0_buttons[BUTTON_C] = 0x01; + if (keystate[SDLK_c]) joypad_0_buttons[BUTTON_A] = 0x01; if (keystate[SDLK_TAB]) joypad_0_buttons[BUTTON_OPTION] = 0x01; if (keystate[SDLK_RETURN]) joypad_0_buttons[BUTTON_PAUSE] = 0x01; if (keystate[SDLK_q]) @@ -82,6 +94,41 @@ void joystick_exec(void) // if (keystate[SDLK_u]) jaguar_long_write(0xf1c384,jaguar_long_read(0xf1c384)+1); if (keystate[SDLK_d]) DumpMainMemory(); + if (keystate[SDLK_l]) + gpu_start_log = 1; + if (keystate[SDLK_o]) + op_start_log = 1; + if (keystate[SDLK_b]) + blit_start_log = 1; + if (keystate[SDLK_1]) + effect_start = 1; + + if (keystate[SDLK_i]) + interactiveMode = true; + + if (keystate[SDLK_8] && interactiveMode) + { + if (!keyHeld1) + objectPtr--, keyHeld1 = true; + } + else + keyHeld1 = false; + + if (keystate[SDLK_0] && interactiveMode) + { + if (!keyHeld2) + objectPtr++, keyHeld2 = true; + } + else + keyHeld2 = false; + + if (keystate[SDLK_9] && interactiveMode) + { + if (!keyHeld3) + iToggle = !iToggle, keyHeld3 = true; + } + else + keyHeld3 = false; if (keystate[SDLK_KP0]) joypad_0_buttons[BUTTON_0] = 0x01; if (keystate[SDLK_KP1]) joypad_0_buttons[BUTTON_1] = 0x01; @@ -95,7 +142,7 @@ void joystick_exec(void) if (keystate[SDLK_KP9]) joypad_0_buttons[BUTTON_9] = 0x01; if (keystate[SDLK_ESCAPE]) - finished = 1; + finished = true; /* Added/Changed by SDLEMU (http://sdlemu.ngemu.com */ /* Joystick support */ @@ -152,6 +199,7 @@ void joystick_word_write(uint32 offset, uint16 data) uint8 joystick_byte_read(uint32 offset) { + extern bool hardwareTypeNTSC; offset &= 0x03; if (offset == 0) @@ -160,6 +208,7 @@ uint8 joystick_byte_read(uint32 offset) int pad0Index = joystick_ram[1] & 0x0F; int pad1Index = (joystick_ram[1] >> 4) & 0x0F; +// This is bad--we're assuming that a bit is set in the last case if (!(pad0Index & 0x01)) pad0Index = 0; else if (!(pad0Index & 0x02)) @@ -191,7 +240,8 @@ uint8 joystick_byte_read(uint32 offset) } else if (offset == 3) { - uint8 data = ((1 << 5) | (1 << 4) | 0x0F); +// uint8 data = ((1 << 5) | (1 << 4) | 0x0F); + uint8 data = 0x2F | (hardwareTypeNTSC ? 0x10 : 0x00); int pad0Index = joystick_ram[1] & 0x0F; //unused int pad1Index = (joystick_ram[1] >> 4) & 0x0F;