Joystick: Remove buttonlatch & BUTTONTIME (#1002)
This commit is contained in:
parent
2e04ce348a
commit
01f89f88eb
4 changed files with 5 additions and 72 deletions
|
@ -48,8 +48,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
#include "Configuration/PropertySheet.h"
|
#include "Configuration/PropertySheet.h"
|
||||||
|
|
||||||
#define BUTTONTIME 5000 // This is the latch (debounce) time in usecs for the joystick buttons
|
|
||||||
|
|
||||||
enum {DEVICE_NONE=0, DEVICE_JOYSTICK, DEVICE_KEYBOARD, DEVICE_MOUSE, DEVICE_JOYSTICK_THUMBSTICK2};
|
enum {DEVICE_NONE=0, DEVICE_JOYSTICK, DEVICE_KEYBOARD, DEVICE_MOUSE, DEVICE_JOYSTICK_THUMBSTICK2};
|
||||||
|
|
||||||
// Indexed by joytype[n]
|
// Indexed by joytype[n]
|
||||||
|
@ -86,7 +84,6 @@ static POINT keyvalue[9] = {{PDL_MIN,PDL_MAX}, {PDL_CENTRAL,PDL_MAX}, {PDL
|
||||||
{PDL_MIN,PDL_CENTRAL},{PDL_CENTRAL,PDL_CENTRAL},{PDL_MAX,PDL_CENTRAL},
|
{PDL_MIN,PDL_CENTRAL},{PDL_CENTRAL,PDL_CENTRAL},{PDL_MAX,PDL_CENTRAL},
|
||||||
{PDL_MIN,PDL_MIN}, {PDL_CENTRAL,PDL_MIN}, {PDL_MAX,PDL_MIN}};
|
{PDL_MIN,PDL_MIN}, {PDL_CENTRAL,PDL_MIN}, {PDL_MAX,PDL_MIN}};
|
||||||
|
|
||||||
static int buttonlatch[3] = {0,0,0};
|
|
||||||
static BOOL joybutton[3] = {0,0,0};
|
static BOOL joybutton[3] = {0,0,0};
|
||||||
|
|
||||||
static int joyshrx[2] = {8,8};
|
static int joyshrx[2] = {8,8};
|
||||||
|
@ -133,12 +130,6 @@ void CheckJoystick0()
|
||||||
JOYINFO info;
|
JOYINFO info;
|
||||||
if (joyGetPos(JOYSTICKID1,&info) == JOYERR_NOERROR)
|
if (joyGetPos(JOYSTICKID1,&info) == JOYERR_NOERROR)
|
||||||
{
|
{
|
||||||
if ((info.wButtons & JOY_BUTTON1) && !joybutton[0])
|
|
||||||
buttonlatch[0] = BUTTONTIME;
|
|
||||||
if ((info.wButtons & JOY_BUTTON2) && !joybutton[1] &&
|
|
||||||
(joyinfo[joytype[1]] == DEVICE_NONE) // Only consider 2nd button if NOT emulating a 2nd Apple joystick
|
|
||||||
)
|
|
||||||
buttonlatch[1] = BUTTONTIME;
|
|
||||||
joybutton[0] = ((info.wButtons & JOY_BUTTON1) != 0);
|
joybutton[0] = ((info.wButtons & JOY_BUTTON1) != 0);
|
||||||
if (joyinfo[joytype[1]] == DEVICE_NONE) // Only consider 2nd button if NOT emulating a 2nd Apple joystick
|
if (joyinfo[joytype[1]] == DEVICE_NONE) // Only consider 2nd button if NOT emulating a 2nd Apple joystick
|
||||||
joybutton[1] = ((info.wButtons & JOY_BUTTON2) != 0);
|
joybutton[1] = ((info.wButtons & JOY_BUTTON2) != 0);
|
||||||
|
@ -180,13 +171,6 @@ void CheckJoystick1()
|
||||||
result = joyGetPos(JOYSTICKID2, &info);
|
result = joyGetPos(JOYSTICKID2, &info);
|
||||||
if (result == JOYERR_NOERROR)
|
if (result == JOYERR_NOERROR)
|
||||||
{
|
{
|
||||||
if ((info.wButtons & JOY_BUTTON1) && !joybutton[2])
|
|
||||||
{
|
|
||||||
buttonlatch[2] = BUTTONTIME;
|
|
||||||
if(joyinfo[joytype[1]] != DEVICE_NONE)
|
|
||||||
buttonlatch[1] = BUTTONTIME; // Re-map this button when emulating a 2nd Apple joystick
|
|
||||||
}
|
|
||||||
|
|
||||||
joybutton[2] = ((info.wButtons & JOY_BUTTON1) != 0);
|
joybutton[2] = ((info.wButtons & JOY_BUTTON1) != 0);
|
||||||
if(joyinfo[joytype[1]] != DEVICE_NONE)
|
if(joyinfo[joytype[1]] != DEVICE_NONE)
|
||||||
joybutton[1] = ((info.wButtons & JOY_BUTTON1) != 0); // Re-map this button when emulating a 2nd Apple joystick
|
joybutton[1] = ((info.wButtons & JOY_BUTTON1) != 0); // Re-map this button when emulating a 2nd Apple joystick
|
||||||
|
@ -412,30 +396,7 @@ BOOL JoyProcessKey(int virtkey, bool extended, bool down, bool autorep)
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
if (virtkey == VK_NUMPAD0)
|
if ((down && !autorep) || (GetPropertySheet().GetJoystickCenteringControl() == JOYSTICK_MODE_CENTERING))
|
||||||
{
|
|
||||||
if(down)
|
|
||||||
{
|
|
||||||
if(joyinfo[joytype[1]] != DEVICE_KEYBOARD)
|
|
||||||
{
|
|
||||||
buttonlatch[0] = BUTTONTIME;
|
|
||||||
}
|
|
||||||
else if(joyinfo[joytype[1]] != DEVICE_NONE)
|
|
||||||
{
|
|
||||||
buttonlatch[2] = BUTTONTIME;
|
|
||||||
buttonlatch[1] = BUTTONTIME; // Re-map this button when emulating a 2nd Apple joystick
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (virtkey == VK_DECIMAL)
|
|
||||||
{
|
|
||||||
if(down)
|
|
||||||
{
|
|
||||||
if(joyinfo[joytype[1]] != DEVICE_KEYBOARD)
|
|
||||||
buttonlatch[1] = BUTTONTIME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((down && !autorep) || (GetPropertySheet().GetJoystickCenteringControl() == JOYSTICK_MODE_CENTERING))
|
|
||||||
{
|
{
|
||||||
int xkeys = 0;
|
int xkeys = 0;
|
||||||
int ykeys = 0;
|
int ykeys = 0;
|
||||||
|
@ -524,10 +485,9 @@ BYTE __stdcall JoyportReadButton(WORD address, ULONG nExecutedCycles)
|
||||||
switch (address)
|
switch (address)
|
||||||
{
|
{
|
||||||
case 0x61:
|
case 0x61:
|
||||||
pressed = (buttonlatch[0] || joybutton[0] || setbutton[0] /*|| keydown[JK_OPENAPPLE]*/);
|
pressed = (joybutton[0] || setbutton[0] /*|| keydown[JK_OPENAPPLE]*/);
|
||||||
if(joyinfo[joytype[1]] != DEVICE_KEYBOARD) // BUG? joytype[1] should be [0] ?
|
if(joyinfo[joytype[1]] != DEVICE_KEYBOARD) // BUG? joytype[1] should be [0] ?
|
||||||
pressed = (pressed || keydown[JK_BUTTON0]);
|
pressed = (pressed || keydown[JK_BUTTON0]);
|
||||||
buttonlatch[0] = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x62: // Left or Up
|
case 0x62: // Left or Up
|
||||||
|
@ -568,8 +528,7 @@ BYTE __stdcall JoyportReadButton(WORD address, ULONG nExecutedCycles)
|
||||||
|
|
||||||
static BOOL CheckButton0Pressed(void)
|
static BOOL CheckButton0Pressed(void)
|
||||||
{
|
{
|
||||||
BOOL pressed = buttonlatch[0] ||
|
BOOL pressed = joybutton[0] ||
|
||||||
joybutton[0] ||
|
|
||||||
setbutton[0] ||
|
setbutton[0] ||
|
||||||
keydown[JK_OPENAPPLE];
|
keydown[JK_OPENAPPLE];
|
||||||
|
|
||||||
|
@ -581,8 +540,7 @@ static BOOL CheckButton0Pressed(void)
|
||||||
|
|
||||||
static BOOL CheckButton1Pressed(void)
|
static BOOL CheckButton1Pressed(void)
|
||||||
{
|
{
|
||||||
BOOL pressed = buttonlatch[1] ||
|
BOOL pressed = joybutton[1] ||
|
||||||
joybutton[1] ||
|
|
||||||
setbutton[1] ||
|
setbutton[1] ||
|
||||||
keydown[JK_CLOSEDAPPLE];
|
keydown[JK_CLOSEDAPPLE];
|
||||||
|
|
||||||
|
@ -617,7 +575,6 @@ BYTE __stdcall JoyReadButton(WORD pc, WORD address, BYTE, BYTE, ULONG nExecutedC
|
||||||
{
|
{
|
||||||
pressed = !swapButtons0and1 ? CheckButton0Pressed() : CheckButton1Pressed();
|
pressed = !swapButtons0and1 ? CheckButton0Pressed() : CheckButton1Pressed();
|
||||||
const UINT button0 = !swapButtons0and1 ? 0 : 1;
|
const UINT button0 = !swapButtons0and1 ? 0 : 1;
|
||||||
buttonlatch[button0] = 0;
|
|
||||||
DoAutofire(button0, pressed);
|
DoAutofire(button0, pressed);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -626,7 +583,6 @@ BYTE __stdcall JoyReadButton(WORD pc, WORD address, BYTE, BYTE, ULONG nExecutedC
|
||||||
{
|
{
|
||||||
pressed = !swapButtons0and1 ? CheckButton1Pressed() : CheckButton0Pressed();
|
pressed = !swapButtons0and1 ? CheckButton1Pressed() : CheckButton0Pressed();
|
||||||
const UINT button1 = !swapButtons0and1 ? 1 : 0;
|
const UINT button1 = !swapButtons0and1 ? 1 : 0;
|
||||||
buttonlatch[button1] = 0;
|
|
||||||
DoAutofire(button1, pressed);
|
DoAutofire(button1, pressed);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -640,10 +596,9 @@ BYTE __stdcall JoyReadButton(WORD pc, WORD address, BYTE, BYTE, ULONG nExecutedC
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pressed = (buttonlatch[2] || joybutton[2] || setbutton[2]);
|
pressed = (joybutton[2] || setbutton[2]);
|
||||||
DoAutofire(2, pressed);
|
DoAutofire(2, pressed);
|
||||||
}
|
}
|
||||||
buttonlatch[2] = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,9 +692,6 @@ void JoySetButton(eBUTTON number, eBUTTONSTATE down)
|
||||||
}
|
}
|
||||||
|
|
||||||
setbutton[number] = down;
|
setbutton[number] = down;
|
||||||
|
|
||||||
if (down)
|
|
||||||
buttonlatch[number] = BUTTONTIME;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -836,22 +788,6 @@ void JoySetPosition(int xvalue, int xrange, int yvalue, int yrange)
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
// Update the latch (debounce) time for each button
|
|
||||||
void JoyUpdateButtonLatch(const UINT nExecutionPeriodUsec)
|
|
||||||
{
|
|
||||||
for (UINT i=0; i<3; i++)
|
|
||||||
{
|
|
||||||
if (buttonlatch[i])
|
|
||||||
{
|
|
||||||
buttonlatch[i] -= nExecutionPeriodUsec;
|
|
||||||
if (buttonlatch[i] < 0)
|
|
||||||
buttonlatch[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
BOOL JoyUsingMouse()
|
BOOL JoyUsingMouse()
|
||||||
{
|
{
|
||||||
return (joyinfo[joytype[0]] == DEVICE_MOUSE) || (joyinfo[joytype[1]] == DEVICE_MOUSE);
|
return (joyinfo[joytype[0]] == DEVICE_MOUSE) || (joyinfo[joytype[1]] == DEVICE_MOUSE);
|
||||||
|
|
|
@ -14,7 +14,6 @@ void JoyReset();
|
||||||
void JoySetButton(eBUTTON,eBUTTONSTATE);
|
void JoySetButton(eBUTTON,eBUTTONSTATE);
|
||||||
BOOL JoySetEmulationType(HWND,DWORD,int, const bool bMousecardActive);
|
BOOL JoySetEmulationType(HWND,DWORD,int, const bool bMousecardActive);
|
||||||
void JoySetPosition(int,int,int,int);
|
void JoySetPosition(int,int,int,int);
|
||||||
void JoyUpdateButtonLatch(const UINT nExecutionPeriodUsec);
|
|
||||||
BOOL JoyUsingMouse();
|
BOOL JoyUsingMouse();
|
||||||
BOOL JoyUsingKeyboard();
|
BOOL JoyUsingKeyboard();
|
||||||
BOOL JoyUsingKeyboardCursors();
|
BOOL JoyUsingKeyboardCursors();
|
||||||
|
|
|
@ -218,7 +218,6 @@ static void ContinueExecution(void)
|
||||||
g_dwCyclesThisFrame += uActualCyclesExecuted;
|
g_dwCyclesThisFrame += uActualCyclesExecuted;
|
||||||
|
|
||||||
GetCardMgr().Update(uActualCyclesExecuted);
|
GetCardMgr().Update(uActualCyclesExecuted);
|
||||||
JoyUpdateButtonLatch(nExecutionPeriodUsec); // Button latch time is independent of CPU clock frequency
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
|
@ -297,7 +297,6 @@ void Win32Frame::Benchmark(void)
|
||||||
DWORD executedcycles = CpuExecute(103, true);
|
DWORD executedcycles = CpuExecute(103, true);
|
||||||
cycles -= executedcycles;
|
cycles -= executedcycles;
|
||||||
GetCardMgr().GetDisk2CardMgr().Update(executedcycles);
|
GetCardMgr().GetDisk2CardMgr().Update(executedcycles);
|
||||||
JoyUpdateButtonLatch(executedcycles);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cycle & 1)
|
if (cycle & 1)
|
||||||
|
|
Loading…
Add table
Reference in a new issue