Add Real Zapper support
Adds a two button controller that can be used to represent the states of a real Zapper.
This commit is contained in:
parent
96a116e096
commit
ca472ee6ae
|
@ -438,6 +438,35 @@ static uint32 UpdateVirtualBoyData(int w)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Holds the button configurations for the "Real" Zapper.
|
||||||
|
// Two collections of two buttons.
|
||||||
|
// One for each controller port.
|
||||||
|
// The defaults shouldn't matter since this is intended to be configured by the user to match their custom hardware.
|
||||||
|
ButtConfig realzappersc[2][2] = {
|
||||||
|
{
|
||||||
|
MK(A), MK(B)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MK(A), MK(B)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// buffer to hold the state of the zapper.
|
||||||
|
static uint32 realzapperbuf[2];
|
||||||
|
|
||||||
|
// Determines if the zapper trigger is pressed and/or if it's sensing light based on the button config and return
|
||||||
|
// the result as a two bit value.
|
||||||
|
static uint32 UpdateRealZapperData(int w)
|
||||||
|
{
|
||||||
|
uint32 r = 0;
|
||||||
|
ButtConfig* realzappertsc = realzappersc[w];
|
||||||
|
int x;
|
||||||
|
|
||||||
|
for (x = 0; x < 2; x++)
|
||||||
|
if (DTestButton(&realzappertsc[x])) r |= 1 << x;
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
static uint8 fkbkeys[0x48];
|
static uint8 fkbkeys[0x48];
|
||||||
static uint8 suborkbkeys[0x65];
|
static uint8 suborkbkeys[0x65];
|
||||||
|
@ -488,6 +517,9 @@ void FCEUD_UpdateInput()
|
||||||
case SI_VIRTUALBOY:
|
case SI_VIRTUALBOY:
|
||||||
virtualboybuf[x]=UpdateVirtualBoyData(x);
|
virtualboybuf[x]=UpdateVirtualBoyData(x);
|
||||||
break;
|
break;
|
||||||
|
case SI_REAL_ZAPPER:
|
||||||
|
realzapperbuf[x] = UpdateRealZapperData(x);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(InputType[2])
|
switch(InputType[2])
|
||||||
|
@ -584,6 +616,9 @@ void InitInputPorts(bool fourscore)
|
||||||
case SI_VIRTUALBOY:
|
case SI_VIRTUALBOY:
|
||||||
InputDPtr=&virtualboybuf[i];
|
InputDPtr=&virtualboybuf[i];
|
||||||
break;
|
break;
|
||||||
|
case SI_REAL_ZAPPER:
|
||||||
|
InputDPtr = &realzapperbuf[i];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
FCEUI_SetInput(i,(ESI)InputType[i],InputDPtr,attrib);
|
FCEUI_SetInput(i,(ESI)InputType[i],InputDPtr,attrib);
|
||||||
}
|
}
|
||||||
|
@ -835,6 +870,7 @@ CFGSTRUCT InputConfig[]={
|
||||||
AC(fkbmap),
|
AC(fkbmap),
|
||||||
AC(suborkbmap),
|
AC(suborkbmap),
|
||||||
AC(virtualboysc),
|
AC(virtualboysc),
|
||||||
|
AC(realzappersc),
|
||||||
ENDCFGSTRUCT
|
ENDCFGSTRUCT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -870,6 +906,10 @@ void InitInputStuff(void)
|
||||||
for(x=0; x<2; x++)
|
for(x=0; x<2; x++)
|
||||||
for(y=0; y<14; y++)
|
for(y=0; y<14; y++)
|
||||||
JoyClearBC(&virtualboysc[x][y]);
|
JoyClearBC(&virtualboysc[x][y]);
|
||||||
|
|
||||||
|
for (x = 0; x < 2; x++)
|
||||||
|
for (y = 0; y < 2; y++)
|
||||||
|
JoyClearBC(&realzappersc[x][y]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *MakeButtString(ButtConfig *bc)
|
static char *MakeButtString(ButtConfig *bc)
|
||||||
|
@ -1206,7 +1246,7 @@ const unsigned int NUMBER_OF_PORTS = 2;
|
||||||
const unsigned int NUMBER_OF_NES_DEVICES = SI_COUNT + 1;
|
const unsigned int NUMBER_OF_NES_DEVICES = SI_COUNT + 1;
|
||||||
const static unsigned int NUMBER_OF_FAMICOM_DEVICES = SIFC_COUNT + 1;
|
const static unsigned int NUMBER_OF_FAMICOM_DEVICES = SIFC_COUNT + 1;
|
||||||
//these are unfortunate lists. they match the ESI and ESIFC enums
|
//these are unfortunate lists. they match the ESI and ESIFC enums
|
||||||
static const int configurable_nes[NUMBER_OF_NES_DEVICES]= { 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 };
|
static const int configurable_nes[NUMBER_OF_NES_DEVICES]= { 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1 };
|
||||||
static const int configurable_fam[NUMBER_OF_FAMICOM_DEVICES]= { 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0 };
|
static const int configurable_fam[NUMBER_OF_FAMICOM_DEVICES]= { 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0 };
|
||||||
const unsigned int FAMICOM_POSITION = 2;
|
const unsigned int FAMICOM_POSITION = 2;
|
||||||
|
|
||||||
|
@ -1539,6 +1579,9 @@ INT_PTR CALLBACK InputConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
|
||||||
case SI_VIRTUALBOY:
|
case SI_VIRTUALBOY:
|
||||||
DoTBConfig(hwndDlg, text, "VIRTUALBOYDIALOG", virtualboysc[which], 14);
|
DoTBConfig(hwndDlg, text, "VIRTUALBOYDIALOG", virtualboysc[which], 14);
|
||||||
break;
|
break;
|
||||||
|
case SI_REAL_ZAPPER:
|
||||||
|
DoTBConfig(hwndDlg, text, "REALZAPPERDIALOG", realzappersc[which], 2);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1102,6 +1102,17 @@ BEGIN
|
||||||
PUSHBUTTON "A", 313,162,19,32,12
|
PUSHBUTTON "A", 313,162,19,32,12
|
||||||
END
|
END
|
||||||
|
|
||||||
|
REALZAPPERDIALOG DIALOGEX 4, 109, 129, 116
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "Zapper Configuration"
|
||||||
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "Close", BTN_CLOSE, 13, 94, 56, 14
|
||||||
|
GROUPBOX "Zapper", 312, 8, 7, 118, 75, WS_GROUP
|
||||||
|
PUSHBUTTON "Trigger", 300, 15, 38, 30, 12
|
||||||
|
PUSHBUTTON "Light Sensor", 301, 14, 19, 98, 12
|
||||||
|
END
|
||||||
|
|
||||||
QUIZKINGDIALOG DIALOG 30, 123, 160, 74
|
QUIZKINGDIALOG DIALOG 30, 123, 160, 74
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "quiz king"
|
CAPTION "quiz king"
|
||||||
|
@ -2473,6 +2484,10 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
|
"REALZAPPERDIALOG", DIALOG
|
||||||
|
BEGIN
|
||||||
|
END
|
||||||
|
|
||||||
"QUIZKINGDIALOG", DIALOG
|
"QUIZKINGDIALOG", DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
END
|
END
|
||||||
|
|
|
@ -39,8 +39,9 @@ enum ESI
|
||||||
SI_SNES = 7,
|
SI_SNES = 7,
|
||||||
SI_SNES_MOUSE = 8,
|
SI_SNES_MOUSE = 8,
|
||||||
SI_VIRTUALBOY = 9,
|
SI_VIRTUALBOY = 9,
|
||||||
|
SI_REAL_ZAPPER = 10,
|
||||||
|
|
||||||
SI_COUNT = SI_VIRTUALBOY
|
SI_COUNT = SI_REAL_ZAPPER
|
||||||
};
|
};
|
||||||
|
|
||||||
inline const char* ESI_Name(ESI esi)
|
inline const char* ESI_Name(ESI esi)
|
||||||
|
@ -56,7 +57,8 @@ inline const char* ESI_Name(ESI esi)
|
||||||
"Subor Mouse",
|
"Subor Mouse",
|
||||||
"SNES Pad",
|
"SNES Pad",
|
||||||
"SNES Mouse",
|
"SNES Mouse",
|
||||||
"Virtual Boy"
|
"Virtual Boy",
|
||||||
|
"Real Zapper"
|
||||||
};
|
};
|
||||||
|
|
||||||
if(esi >= SI_NONE && esi <= SI_COUNT)
|
if(esi >= SI_NONE && esi <= SI_COUNT)
|
||||||
|
|
|
@ -65,6 +65,7 @@ extern INPUTC *FCEU_InitArkanoid(int w);
|
||||||
extern INPUTC *FCEU_InitMouse(int w);
|
extern INPUTC *FCEU_InitMouse(int w);
|
||||||
extern INPUTC *FCEU_InitSNESMouse(int w);
|
extern INPUTC *FCEU_InitSNESMouse(int w);
|
||||||
extern INPUTC *FCEU_InitVirtualBoy(int w);
|
extern INPUTC *FCEU_InitVirtualBoy(int w);
|
||||||
|
extern INPUTC *FCEU_InitRealZapper(int w);
|
||||||
|
|
||||||
extern INPUTCFC *FCEU_InitArkanoidFC(void);
|
extern INPUTCFC *FCEU_InitArkanoidFC(void);
|
||||||
extern INPUTCFC *FCEU_InitSpaceShadow(void);
|
extern INPUTCFC *FCEU_InitSpaceShadow(void);
|
||||||
|
@ -483,6 +484,9 @@ static void SetInputStuff(int port)
|
||||||
case SI_VIRTUALBOY:
|
case SI_VIRTUALBOY:
|
||||||
joyports[port].driver=FCEU_InitVirtualBoy(port);
|
joyports[port].driver=FCEU_InitVirtualBoy(port);
|
||||||
break;
|
break;
|
||||||
|
case SI_REAL_ZAPPER:
|
||||||
|
joyports[port].driver = FCEU_InitRealZapper(port);
|
||||||
|
break;
|
||||||
case SI_NONE:
|
case SI_NONE:
|
||||||
case SI_UNSET:
|
case SI_UNSET:
|
||||||
joyports[port].driver=&DummyJPort;
|
joyports[port].driver=&DummyJPort;
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
/* FCE Ultra - NES/Famicom Emulator
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "share.h"
|
||||||
|
|
||||||
|
static uint32 realZapperStrobe[2];
|
||||||
|
static uint32 realZapperData[2];
|
||||||
|
|
||||||
|
static uint8 ReadRealZapper(int w)
|
||||||
|
{
|
||||||
|
return realZapperData[w];
|
||||||
|
}
|
||||||
|
|
||||||
|
static void StrobeRealZapper(int w)
|
||||||
|
{
|
||||||
|
realZapperStrobe[w] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateRealZapper(int w, void* data, int arg)
|
||||||
|
{
|
||||||
|
// In the '(*(uint32*)data)' variable, bit 0 holds the trigger value and bit 1 holds the light sense value.
|
||||||
|
// Ultimately this needs to be converted from 0000 00lt to 000t l000 where l is the light bit and t
|
||||||
|
// is the trigger bit.
|
||||||
|
realZapperData[w] = ((((*(uint32*)data) & 1) << 4) |
|
||||||
|
(((*(uint32*)data) & 2) << 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
static INPUTC RealZapperCtrl = { ReadRealZapper,0,StrobeRealZapper,UpdateRealZapper,0,0 };
|
||||||
|
|
||||||
|
INPUTC* FCEU_InitRealZapper(int w)
|
||||||
|
{
|
||||||
|
realZapperStrobe[w] = realZapperData[w] = 0;
|
||||||
|
return(&RealZapperCtrl);
|
||||||
|
}
|
|
@ -710,6 +710,7 @@
|
||||||
<ClCompile Include="..\src\input\toprider.cpp" />
|
<ClCompile Include="..\src\input\toprider.cpp" />
|
||||||
<ClCompile Include="..\src\input\virtualboy.cpp" />
|
<ClCompile Include="..\src\input\virtualboy.cpp" />
|
||||||
<ClCompile Include="..\src\input\zapper.cpp" />
|
<ClCompile Include="..\src\input\zapper.cpp" />
|
||||||
|
<ClCompile Include="..\src\input\realzapper.cpp" />
|
||||||
<ClCompile Include="..\src\boards\emu2413.c" />
|
<ClCompile Include="..\src\boards\emu2413.c" />
|
||||||
<ClCompile Include="..\src\utils\ConvertUTF.c" />
|
<ClCompile Include="..\src\utils\ConvertUTF.c" />
|
||||||
<ClCompile Include="..\src\utils\crc32.cpp" />
|
<ClCompile Include="..\src\utils\crc32.cpp" />
|
||||||
|
|
|
@ -1105,6 +1105,9 @@
|
||||||
<ClCompile Include="..\src\input\virtualboy.cpp">
|
<ClCompile Include="..\src\input\virtualboy.cpp">
|
||||||
<Filter>input</Filter>
|
<Filter>input</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\input\realzapper.cpp">
|
||||||
|
<Filter>input</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\drivers\common\args.h">
|
<ClInclude Include="..\src\drivers\common\args.h">
|
||||||
|
|
Loading…
Reference in New Issue