Joystick fixes

This commit is contained in:
simon.kagstrom 2010-03-07 07:38:35 +00:00
parent 9fc781c55e
commit fa3e08bee8
4 changed files with 22 additions and 28 deletions

View File

@ -100,7 +100,8 @@ C64::C64()
memset(RAM1541, 0, DRIVE_RAM_SIZE);
// Open joystick drivers if required
open_close_joysticks(0, 0, ThePrefs.Joystick1Port, ThePrefs.Joystick2Port);
open_joystick(0);
open_joystick(1);
joykey = 0xff;
#ifdef FRODO_SC
@ -118,7 +119,8 @@ C64::C64()
C64::~C64()
{
open_close_joysticks(ThePrefs.Joystick1Port, ThePrefs.Joystick2Port, 0, 0);
close_joystick(0);
close_joystick(1);
delete TheJob1541;
delete TheREU;
@ -130,8 +132,6 @@ C64::~C64()
delete TheCPU1541;
delete TheCPU;
delete TheDisplay;
if (this->network)
delete this->network;
delete[] RAM;
delete[] Basic;
@ -178,7 +178,6 @@ void C64::NMI(void)
void C64::NewPrefs(Prefs *prefs)
{
open_close_joysticks(ThePrefs.Joystick1Port, ThePrefs.Joystick2Port, prefs->Joystick1Port, prefs->Joystick2Port);
PatchKernal(prefs->FastReset, prefs->Emul1541Proc);
TheDisplay->NewPrefs(prefs);

View File

@ -159,7 +159,8 @@ private:
void c64_ctor1(void);
void c64_ctor2(void);
void c64_dtor(void);
void open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2);
void open_joystick(int port);
void close_joystick(int port);
uint8 poll_joystick(int port);
uint8 poll_joystick_axes(int port, bool *has_event);
uint8 poll_joystick_hats(int port, bool *has_event);
@ -206,13 +207,11 @@ private:
#endif
#ifdef __unix
void open_close_joystick(int port, int oldjoy, int newjoy);
double speed_index;
public:
CmdPipe *gui;
#elif defined(GEKKO)
public:
void open_close_joystick(int port, int oldjoy, int newjoy);
double speed_index;
#endif
#ifdef HAVE_SDL

View File

@ -752,29 +752,21 @@ bool C64Display::NumLock(void)
* Open/close joystick drivers given old and new state of
* joystick preferences
*/
void C64::open_close_joystick(int port, int oldjoy, int newjoy)
void C64::open_joystick(int port)
{
if (oldjoy != newjoy) {
joy_minx[port] = joy_miny[port] = -32767; // Reset calibration
joy_maxx[port] = joy_maxy[port] = 32768;
if (newjoy) {
joy[port] = SDL_JoystickOpen(newjoy - 1);
if (joy[port] == NULL)
fprintf(stderr, "Couldn't open joystick %d\n", port + 1);
} else {
if (joy[port]) {
SDL_JoystickClose(joy[port]);
joy[port] = NULL;
}
}
}
joy_minx[port] = joy_miny[port] = -32767; // Reset calibration
joy_maxx[port] = joy_maxy[port] = 32768;
joy[port] = SDL_JoystickOpen(port);
if (joy[port] == NULL)
fprintf(stderr, "Couldn't open joystick %d\n", port + 1);
}
void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2)
void C64::close_joystick(int port)
{
open_close_joystick(0, oldjoy1, newjoy1);
if (SDL_NumJoysticks() > 1)
open_close_joystick(1, oldjoy2, newjoy2);
if (joy[port]) {
SDL_JoystickClose(joy[port]);
joy[port] = NULL;
}
}
/* The implementation principles are borrowed from UAE */

View File

@ -86,7 +86,7 @@ Prefs::Prefs()
SIDType = SIDTYPE_DIGITAL;
REUSize = REU_NONE;
DisplayType = DISPTYPE_WINDOW;
Joystick1Port = 1; /* Default to on */
Joystick1Port = 0; /* Default to on */
Joystick2Port = 1;
SpritesOn = true;
@ -204,6 +204,7 @@ void Prefs::SetupJoystickDefaults()
/* Saitek P380 */
else if (strcmp(name, "Jess Tech Dual Analog Pad") == 0)
{
printf("Found joystikk\n");
/* Pad */
this->JoystickHats[0] = HAT_PLAIN;
this->MenuJoystickHats[0] = HAT_PLAIN;
@ -214,6 +215,9 @@ void Prefs::SetupJoystickDefaults()
this->JoystickAxes[2] = JOY_HORIZ;
this->JoystickAxes[3] = JOY_VERT;
this->JoystickButtons[0] = (0 << 3) | 4;
this->JoystickButtons[1] = (0 << 3) | 5;
/* Button 4 Fire */
this->JoystickButtons[3] = 0x50;
this->MenuJoystickButtons[3] = KEY_SELECT;