mirror of
https://github.com/MickGyver/DaemonBite-Retro-Controllers-USB
synced 2024-11-30 21:22:18 -05:00
PCE mode B enabled
I have added support for mode B (e.g. AvePad 6) for games like Street Fighter II
This commit is contained in:
parent
362c9d136d
commit
1b10b74c6e
@ -34,7 +34,7 @@ extern const char* gp_serial;
|
|||||||
// The numbers after colon are bit fields, meaning how many bits the field uses.
|
// The numbers after colon are bit fields, meaning how many bits the field uses.
|
||||||
// Remove those if there are problems
|
// Remove those if there are problems
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t buttons : 4;
|
uint8_t buttons : 8;
|
||||||
int8_t X;
|
int8_t X;
|
||||||
int8_t Y;
|
int8_t Y;
|
||||||
} GamepadReport;
|
} GamepadReport;
|
||||||
|
@ -73,13 +73,17 @@ Gamepad_ Gamepad[GAMEPAD_COUNT];
|
|||||||
|
|
||||||
// Controllers
|
// Controllers
|
||||||
uint8_t buttons[2][2] = {{0,0},{0,0}};
|
uint8_t buttons[2][2] = {{0,0},{0,0}};
|
||||||
uint8_t buttonsPrev[2][2] = {{0,0},{0,0}};
|
uint8_t buttonsPrevDPad[2] = {0,0};
|
||||||
|
uint8_t buttonsPrevA[2] = {0,0};
|
||||||
|
uint8_t buttonsPrevB[2] = {0,0};
|
||||||
uint8_t gp = 0;
|
uint8_t gp = 0;
|
||||||
|
|
||||||
// Turbo timing
|
// Turbo timing
|
||||||
uint32_t microsNow = 0;
|
uint32_t microsNow = 0;
|
||||||
uint32_t microsEnable = 0;
|
uint32_t microsEnable = 0;
|
||||||
|
|
||||||
|
int suma[2]={5,5};
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
// Set D0-D3 as inputs and enable pull-up resistors (port1 data pins)
|
// Set D0-D3 as inputs and enable pull-up resistors (port1 data pins)
|
||||||
@ -133,8 +137,11 @@ void loop() { while(1)
|
|||||||
// Send data to USB if values have changed
|
// Send data to USB if values have changed
|
||||||
for(gp=0; gp<GAMEPAD_COUNT; gp++)
|
for(gp=0; gp<GAMEPAD_COUNT; gp++)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
suma[gp] = ((buttons[gp][0] & DOWN) >> DOWN_SH) + ((buttons[gp][0] & UP) >> UP_SH) + ((buttons[gp][0] & RIGHT) >> RIGHT_SH) + ((buttons[gp][0] & LEFT) >> LEFT_SH);
|
||||||
|
|
||||||
// Has any buttons changed state?
|
// Has any buttons changed state?
|
||||||
if (buttons[gp][0] != buttonsPrev[gp][0] || buttons[gp][1] != buttonsPrev[gp][1] )
|
/* if (buttons[gp][0] != buttonsPrev[gp][0] || buttons[gp][1] != buttonsPrev[gp][1] )
|
||||||
{
|
{
|
||||||
Gamepad[gp]._GamepadReport.buttons = buttons[gp][1];
|
Gamepad[gp]._GamepadReport.buttons = buttons[gp][1];
|
||||||
Gamepad[gp]._GamepadReport.Y = ((buttons[gp][0] & DOWN) >> DOWN_SH) - ((buttons[gp][0] & UP) >> UP_SH);
|
Gamepad[gp]._GamepadReport.Y = ((buttons[gp][0] & DOWN) >> DOWN_SH) - ((buttons[gp][0] & UP) >> UP_SH);
|
||||||
@ -143,6 +150,24 @@ void loop() { while(1)
|
|||||||
buttonsPrev[gp][1] = buttons[gp][1];
|
buttonsPrev[gp][1] = buttons[gp][1];
|
||||||
Gamepad[gp].send();
|
Gamepad[gp].send();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((suma[gp] == 4) && (buttons[gp][1]!=buttonsPrevB[gp])){
|
||||||
|
Gamepad[gp]._GamepadReport.buttons = (buttons[gp][1] & B00001111) << 4;
|
||||||
|
buttonsPrevB[gp] = buttons[gp][1];
|
||||||
|
Gamepad[gp].send();
|
||||||
|
}
|
||||||
|
else if ((suma[gp] < 4) && ((buttons[gp][0]!=buttonsPrevDPad[gp]) || (buttons[gp][1]!=buttonsPrevA[gp]))){
|
||||||
|
Gamepad[gp]._GamepadReport.buttons = (buttons[gp][1] & B00001111);
|
||||||
|
Gamepad[gp]._GamepadReport.Y = ((buttons[gp][0] & DOWN) >> DOWN_SH) - ((buttons[gp][0] & UP) >> UP_SH);
|
||||||
|
Gamepad[gp]._GamepadReport.X = ((buttons[gp][0] & RIGHT) >> RIGHT_SH) - ((buttons[gp][0] & LEFT) >> LEFT_SH);
|
||||||
|
buttonsPrevDPad[gp] = buttons[gp][0];
|
||||||
|
buttonsPrevA[gp] = buttons[gp][1];
|
||||||
|
Gamepad[gp].send();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
Loading…
Reference in New Issue
Block a user