fixed weird exception occuring

This commit is contained in:
ekeeke31 2009-01-13 17:00:37 +00:00
parent 3ee65ad74b
commit e822832b99
6 changed files with 47 additions and 78 deletions

View File

@ -1139,7 +1139,6 @@ void MainMenu ()
{ {
crccheck = crc32 (0, &sram.sram[0], 0x10000); crccheck = crc32 (0, &sram.sram[0], 0x10000);
if (genromsize && (crccheck != sram.crc)) strcpy (menutitle, "*** SRAM has been modified ***"); if (genromsize && (crccheck != sram.crc)) strcpy (menutitle, "*** SRAM has been modified ***");
else sprintf(menutitle, "%d FPS", FramesPerSecond);
ret = domenu (&items[0], count, 0); ret = domenu (&items[0], count, 0);
switch (ret) switch (ret)

View File

@ -119,7 +119,6 @@ void reloadrom ()
* M A I N * M A I N
* *
***************************************************************************/ ***************************************************************************/
int FramesPerSecond = 0;
int frameticker = 0; int frameticker = 0;
bool fat_enabled = 0; bool fat_enabled = 0;
@ -131,10 +130,6 @@ int main (int argc, char *argv[])
DI_Init(); DI_Init();
#endif #endif
long long now, prev;
int RenderedFrameCount = 0;
int FrameCount = 0;
/* initialize OGC subsystems */ /* initialize OGC subsystems */
ogc_video__init(); ogc_video__init();
ogc_input__init(); ogc_input__init();
@ -183,67 +178,12 @@ int main (int argc, char *argv[])
reloadrom (); reloadrom ();
} }
/* Show Menu */ /* Show Menu first */
MainMenu(); ConfigRequested = 1;
ConfigRequested = 0;
/* Reset frame sync */
frameticker = 0;
FrameCount = 0;
RenderedFrameCount = 0;
/* Start Audio & Video */
ogc_audio__start();
ogc_video__start();
/* Emulation Loop */ /* Emulation Loop */
while (1) while (1)
{ {
if (gc_pal < 0)
{
/* this code is NEVER executed */
/* strangely, when removing it, this makes the program crashing (why ?) */
prev = now = gettime();
while (diff_usec(prev, now) < 1) now = gettime();
prev = now;
}
else
{
if (frameticker > 1)
{
/* frameskipping */
frameticker--;
system_frame (1);
/* update audio only */
ogc_audio__update();
}
else
{
/* frame sync */
while (!frameticker) usleep(1);
/* frame rendering */
system_frame (0);
RenderedFrameCount++;
/* update video & audio */
ogc_audio__update();
ogc_video__update();
}
frameticker--;
}
/* check rendered frames (FPS) */
FrameCount++;
if (FrameCount == vdp_rate)
{
FramesPerSecond = RenderedFrameCount;
RenderedFrameCount = 0;
FrameCount = 0;
}
/* Check for Menu request */ /* Check for Menu request */
if (ConfigRequested) if (ConfigRequested)
{ {
@ -257,13 +197,35 @@ int main (int argc, char *argv[])
/* reset frame sync */ /* reset frame sync */
frameticker = 0; frameticker = 0;
FrameCount = 0;
RenderedFrameCount = 0;
/* restart Audio & Video */ /* start Audio & Video */
ogc_audio__start(); ogc_audio__start();
ogc_video__start(); ogc_video__start();
} }
if (frameticker > 1)
{
/* frameskipping */
frameticker--;
system_frame (1);
/* update audio only */
ogc_audio__update();
}
else
{
/* frame sync */
while (!frameticker) usleep(1);
/* frame rendering */
system_frame (0);
/* update video & audio */
ogc_audio__update();
ogc_video__update();
}
frameticker--;
} }
return 0; return 0;

View File

@ -28,8 +28,8 @@ extern u8 soundbuffer[2][3840];
extern int mixbuffer; extern int mixbuffer;
extern void ogc_audio__init(void); extern void ogc_audio__init(void);
extern void ogc_audio__stop(void);
extern void ogc_audio__start(void); extern void ogc_audio__start(void);
extern void ogc_audio__stop(void);
extern void ogc_audio__update(void); extern void ogc_audio__update(void);
#endif #endif

View File

@ -536,7 +536,6 @@ static void gxReset(void)
/* resynchronize field & restore VSYNC handler */ /* resynchronize field & restore VSYNC handler */
whichfb = odd_frame; whichfb = odd_frame;
VIDEO_SetNextFramebuffer (xfb[whichfb]);
VIDEO_SetPreRetraceCallback(xfb_swap); VIDEO_SetPreRetraceCallback(xfb_swap);
VIDEO_Flush(); VIDEO_Flush();
VIDEO_WaitVSync(); VIDEO_WaitVSync();
@ -655,9 +654,18 @@ void ogc_video__update()
draw_square (); draw_square ();
GX_DrawDone (); GX_DrawDone ();
/* copy EFB to current XFB */ /* special case: interlaced display */
GX_CopyDisp (xfb[odd_frame], GX_TRUE); if (interlaced && !config.render && (odd_frame == whichfb))
GX_Flush (); {
/* resynchronize frame emulation */
odd_frame = whichfb ^1;
}
else
{
/* copy EFB to current XFB */
GX_CopyDisp (xfb[whichfb], GX_TRUE);
GX_Flush ();
}
} }
/* Initialize VIDEO subsystem */ /* Initialize VIDEO subsystem */

View File

@ -24,15 +24,16 @@
#ifndef _GC_VIDEO_H_ #ifndef _GC_VIDEO_H_
#define _GC_VIDEO_H_ #define _GC_VIDEO_H_
extern unsigned int *xfb[2];
extern int whichfb;
extern int gc_pal;
extern GXRModeObj *tvmodes[6];
extern GXRModeObj *vmode;
extern u8 *texturemem;
extern void ogc_video__init(void); extern void ogc_video__init(void);
extern void ogc_video__start(void); extern void ogc_video__start(void);
extern void ogc_video__stop(void); extern void ogc_video__stop(void);
extern void ogc_video__update(void); extern void ogc_video__update(void);
extern int gc_pal;
extern unsigned int *xfb[2];
extern int whichfb;
extern GXRModeObj *tvmodes[6];
extern GXRModeObj *vmode;
extern u8 *texturemem;
#endif #endif

View File

@ -39,7 +39,6 @@ extern void memfile_autoload();
extern int peripherals; extern int peripherals;
extern int frameticker; extern int frameticker;
extern int FramesPerSecond;
extern int Shutdown; extern int Shutdown;
extern bool fat_enabled; extern bool fat_enabled;