trigger button press when GameCube L/R are 50%+ depressed

remove sync using vsync - use timers for sync only
This commit is contained in:
dborth 2012-02-05 21:31:38 +00:00
parent 6cb97df316
commit f65c3d01c3
6 changed files with 42 additions and 119 deletions

View File

@ -416,6 +416,13 @@ static void decodepad (int chan)
else if(sin(angle) < -THRES) else if(sin(angle) < -THRES)
jp |= PAD_BUTTON_DOWN; jp |= PAD_BUTTON_DOWN;
} }
// Count as pressed if down far enough (~50% down)
if (userInput[chan].pad.triggerL > 0x80)
jp |= PAD_TRIGGER_L;
if (userInput[chan].pad.triggerR > 0x80)
jp |= PAD_TRIGGER_R;
#ifdef HW_RVL #ifdef HW_RVL
/*** /***
Wii Joystick (classic, nunchuk) input Wii Joystick (classic, nunchuk) input

View File

@ -78,7 +78,6 @@ bool8 S9xOpenSoundDevice(void)
/* eke-eke */ /* eke-eke */
void S9xInitSync() void S9xInitSync()
{ {
FrameTimer = 0;
prev = gettime(); prev = gettime();
} }
@ -86,6 +85,8 @@ void S9xInitSync()
void S9xSyncSpeed () void S9xSyncSpeed ()
{ {
unsigned int timediffallowed = Settings.TurboMode ? 0 : Settings.FrameTime;
while (!S9xSyncSound()) while (!S9xSyncSound())
usleep(10); usleep(10);
@ -94,17 +95,12 @@ void S9xSyncSpeed ()
if (Settings.TurboMode) if (Settings.TurboMode)
skipFrms = Settings.TurboSkipFrames; skipFrms = Settings.TurboSkipFrames;
if (timerstyle == 0) /* use Wii vertical sync (VSYNC) with NTSC roms */ now = gettime();
if (diff_usec(prev, now) > timediffallowed)
{ {
while (FrameTimer == 0) /* Timer has already expired */
{ if (IPPU.SkippedFrames < skipFrms)
usleep(50);
}
if (FrameTimer > skipFrms)
FrameTimer = skipFrms;
if ((FrameTimer > 1) && (IPPU.SkippedFrames < skipFrms))
{ {
IPPU.SkippedFrames++; IPPU.SkippedFrames++;
IPPU.RenderThisFrame = FALSE; IPPU.RenderThisFrame = FALSE;
@ -115,42 +111,20 @@ void S9xSyncSpeed ()
IPPU.RenderThisFrame = TRUE; IPPU.RenderThisFrame = TRUE;
} }
} }
else /* use internal timer for PAL roms */ else
{ {
unsigned int timediffallowed = Settings.TurboMode ? 0 : Settings.FrameTime; /*** Ahead - so hold up ***/
now = gettime(); while (diff_usec(prev, now) < timediffallowed)
if (diff_usec(prev, now) > timediffallowed)
{ {
/* Timer has already expired */ now = gettime();
if (IPPU.SkippedFrames < skipFrms) usleep(50);
{
IPPU.SkippedFrames++;
IPPU.RenderThisFrame = FALSE;
}
else
{
IPPU.SkippedFrames = 0;
IPPU.RenderThisFrame = TRUE;
}
} }
else IPPU.RenderThisFrame = TRUE;
{ IPPU.SkippedFrames = 0;
/*** Ahead - so hold up ***/
while (diff_usec(prev, now) < timediffallowed)
{
now = gettime();
usleep(50);
}
IPPU.RenderThisFrame = TRUE;
IPPU.SkippedFrames = 0;
}
prev = now;
} }
if (!Settings.TurboMode) prev = now;
FrameTimer--;
return; return;
} }

View File

@ -182,31 +182,6 @@ void ipl_set_config(unsigned char c)
} }
#endif #endif
/****************************************************************************
* setFrameTimerMethod()
* change frametimer method depending on whether ROM is NTSC or PAL
***************************************************************************/
void setFrameTimerMethod()
{
/*
Set frametimer method
(timerstyle: 0=NTSC vblank, 1=PAL int timer)
*/
if ( Settings.PAL ) {
if(vmode_60hz)
timerstyle = 1;
else
timerstyle = 0;
} else {
if(vmode_60hz)
timerstyle = 0;
else
timerstyle = 1;
}
return;
}
/**************************************************************************** /****************************************************************************
* IOS Check * IOS Check
***************************************************************************/ ***************************************************************************/
@ -449,9 +424,6 @@ main(int argc, char *argv[])
AudioStart (); AudioStart ();
FrameTimer = 0;
setFrameTimerMethod (); // set frametimer method every time a ROM is loaded
CheckVideo = 2; // force video update CheckVideo = 2; // force video update
prevRenderedFrameCount = IPPU.RenderedFramesCount; prevRenderedFrameCount = IPPU.RenderedFramesCount;
currentMode = GCSettings.render; currentMode = GCSettings.render;

View File

@ -67,8 +67,7 @@ int gameScreenPngSize = 0;
u32 FrameTimer = 0; u32 FrameTimer = 0;
bool vmode_60hz = true; static bool vmode_60hz = true;
int timerstyle = 0;
bool progressive = 0; bool progressive = 0;
#define HASPECT 320 #define HASPECT 320

View File

@ -36,8 +36,6 @@ extern bool progressive;
extern u8 * gameScreenPng; extern u8 * gameScreenPng;
extern int gameScreenPngSize; extern int gameScreenPngSize;
extern u32 FrameTimer; extern u32 FrameTimer;
extern bool vmode_60hz;
extern int timerstyle;
extern int CheckVideo; extern int CheckVideo;
#endif #endif

View File

@ -18,7 +18,7 @@
#include <ppc/timebase.h> #include <ppc/timebase.h>
#include <xenon_sound/sound.h> #include <xenon_sound/sound.h>
int FrameTimer, timerstyle = 1; int FrameTimer = 0;
unsigned long long prev, now; unsigned long long prev, now;
unsigned long long gettime(void) unsigned long long gettime(void)
@ -128,7 +128,6 @@ void S9xGenerateSound()
/* eke-eke */ /* eke-eke */
void S9xInitSync() void S9xInitSync()
{ {
FrameTimer = 0;
prev = gettime(); prev = gettime();
} }
@ -140,18 +139,15 @@ void S9xSyncSpeed ()
if (Settings.TurboMode) if (Settings.TurboMode)
skipFrms = Settings.TurboSkipFrames; skipFrms = Settings.TurboSkipFrames;
if (timerstyle == 0) /* use NGC vertical sync (VSYNC) with NTSC roms */ unsigned int timediffallowed = Settings.TurboMode ? 0 : Settings.FrameTime;
now = gettime();
if (diff_usec(prev, now) > timediffallowed)
{ {
while (FrameTimer == 0) printf("L\n");
{ /* Timer has already expired */
udelay(50); if (IPPU.SkippedFrames < skipFrms)
}
if (FrameTimer > skipFrms)
FrameTimer = skipFrms;
if ((FrameTimer > 1) && (IPPU.SkippedFrames < skipFrms))
{ {
IPPU.SkippedFrames++; IPPU.SkippedFrames++;
IPPU.RenderThisFrame = FALSE; IPPU.RenderThisFrame = FALSE;
@ -162,43 +158,20 @@ void S9xSyncSpeed ()
IPPU.RenderThisFrame = TRUE; IPPU.RenderThisFrame = TRUE;
} }
} }
else /* use internal timer for PAL roms */ else
{ {
unsigned int timediffallowed = Settings.TurboMode ? 0 : Settings.FrameTime; /*** Ahead - so hold up ***/
now = gettime(); while (diff_usec(prev, now) < timediffallowed)
if (diff_usec(prev, now) > timediffallowed)
{ {
printf("L\n"); now = gettime();
/* Timer has already expired */ udelay(50);
if (IPPU.SkippedFrames < skipFrms)
{
IPPU.SkippedFrames++;
IPPU.RenderThisFrame = FALSE;
}
else
{
IPPU.SkippedFrames = 0;
IPPU.RenderThisFrame = TRUE;
}
} }
else IPPU.RenderThisFrame = TRUE;
{ IPPU.SkippedFrames = 0;
/*** Ahead - so hold up ***/
while (diff_usec(prev, now) < timediffallowed)
{
now = gettime();
udelay(50);
}
IPPU.RenderThisFrame = TRUE;
IPPU.SkippedFrames = 0;
}
prev = now;
} }
if (!Settings.TurboMode) prev = now;
FrameTimer--;
return; return;
} }