X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fgp2x%2Fmain.c;h=e9223f2b1d817f8008cc5192c6a68c55aac93b9d;hb=b2b95d2e0d1fd5e52d03c2152605b09b024c1d0e;hp=d2be777d7aeb620b0ff8f1408af209d56c478451;hpb=35868d35201adb0e4066584d1145c920f5be9b03;p=fceu.git diff --git a/drivers/gp2x/main.c b/drivers/gp2x/main.c index d2be777..e9223f2 100644 --- a/drivers/gp2x/main.c +++ b/drivers/gp2x/main.c @@ -37,6 +37,8 @@ #include "main.h" #include "throttle.h" +#include "menu.h" +#include "gp2x.h" #include "../common/config.h" #include "../common/args.h" @@ -45,6 +47,16 @@ #include "dface.h" +// just for printing some iNES info for user.. +#include "../../fce.h" +#include "../../ines.h" + +// internals +extern char lastLoadedGameName[2048]; +extern uint8 Exit; // exit emu loop flag +void CloseGame(void); + +FCEUGI *fceugi = NULL; static int ntsccol=0,ntschue=-1,ntsctint=-1; int soundvol=70; int inited=0; @@ -52,9 +64,7 @@ int swapbuttons=0; int showfps=0; int srendlinev[2]={0,0}; -//int srendlinev[2]={0,0}; int erendlinev[2]={239,239}; -//int erendlinev[2]={231,239}; int srendline,erendline; @@ -119,6 +129,7 @@ static CFGSTRUCT fceuconfig[]={ AC(eoptions), ACA(srendlinev), ACA(erendlinev), + ACA(lastLoadedGameName), ADDCFGSTRUCT(DriverConfig), ENDCFGSTRUCT }; @@ -189,16 +200,16 @@ static void CloseStuff(int signum) exit(1); } -static void DoArgs(int argc, char *argv[]) +static int DoArgs(int argc, char *argv[]) { static char *cortab[5]={"none","gamepad","zapper","powerpad","arkanoid"}; static int cortabi[5]={SI_NONE,SI_GAMEPAD, - SI_ZAPPER,SI_POWERPAD,SI_ARKANOID}; + SI_ZAPPER,SI_POWERPADA,SI_ARKANOID}; static char *fccortab[5]={"none","arkanoid","shadow","4player","fkb"}; static int fccortabi[5]={SIFC_NONE,SIFC_ARKANOID,SIFC_SHADOW, SIFC_4PLAYER,SIFC_FKB}; - int x; + int x, ret; static char *inputa[2]={0,0}; static char *fcexp=0; static int docheckie[4]; @@ -228,7 +239,7 @@ static void DoArgs(int argc, char *argv[]) }; memset(docheckie,0,sizeof(docheckie)); - ParseArguments(argc, argv, FCEUArgs); + ret=ParseArguments(argc, argv, FCEUArgs); if(cpalette) { if(cpalette[0]=='0') @@ -295,51 +306,97 @@ static void DoArgs(int argc, char *argv[]) } } } + return ret; } #include "usage.h" int CLImain(int argc, char *argv[]) { - FCEUGI *tmp; - int ret; + int last_arg_parsed; + /* TODO if(argc<=1) + { + ShowUsage(argv[0]); + return 1; + }*/ + + if(!DriverInitialize()) + { + return 1; + } - if(!(ret=FCEUI_Initialize())) + if(!FCEUI_Initialize()) return(1); GetBaseDirectory(BaseDirectory); FCEUI_SetBaseDirectory(BaseDirectory); + lastLoadedGameName[0] = 0; CreateDirs(); - if(argc<=1) - { - ShowUsage(argv[0]); - return 1; - } LoadConfig(); - DoArgs(argc-2,&argv[1]); + gp2x_opt_setup(); + last_arg_parsed=DoArgs(argc-1,&argv[1]); if(cpalette) LoadCPalette(); if(InitSound()) inited|=1; - if(!(tmp=FCEUI_LoadGame(argv[argc-1]))) - { - ret=0; - goto dk; - } - ParseGI(tmp); - //RefreshThrottleFPS(); - if(!DriverInitialize()) - { - ret=0; - goto dk; - } - InitOtherInput(); - FCEUI_Emulate(); + if (argc > 1 && !last_arg_parsed) + { + strncpy(lastLoadedGameName, argv[argc-1], sizeof(lastLoadedGameName)); + lastLoadedGameName[sizeof(lastLoadedGameName)-1] = 0; + Exit = 0; + } + else + { + lastLoadedGameName[0] = 0; + Exit = 1; + } + + while (1) + { + if(!Exit) + { + if (fceugi) + CloseGame(); + fceugi=FCEUI_LoadGame(lastLoadedGameName); + if (fceugi) + { + ParseGI(fceugi); + //RefreshThrottleFPS(); + InitOtherInput(); + + // additional print for gpfce + // TODO: handlers for other formats then iNES + { + int MapperNo; + iNES_HEADER *head = iNESGetHead(); + MapperNo = (head->ROM_type>>4); + MapperNo|=(head->ROM_type2&0xF0); + FCEU_DispMessage("%s, Mapper: %d%s%s", PAL?"PAL":"NTSC", MapperNo, (head->ROM_type&2)?", BB":"", (head->ROM_type&4)?", T":""); + } + } + else + strcpy(menuErrorMsg, "failed to load ROM"); + } + if(Exit || !fceugi) + { + int ret; + ret = gp2x_menu_do(); + if (ret == 1) break; // exit emu + if (ret == 2) { // reload ROM + Exit = 0; + continue; + } + } + + gp2x_video_changemode(Settings.scaling == 3 ? 15 : 8); + gp2x_video_RGB_setscaling(0, 320, 240); + gp2x_start_sound(22050, 16, 0); + FCEUI_Emulate(); + } - dk: DriverKill(); - return(ret?0:1); + return 0; } static int DriverInitialize(void) @@ -373,13 +430,13 @@ static void DriverKill(void) inited=0; } -void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count) +void FCEUD_Update(uint8 *xbuf, int16 *Buffer, int Count) { if(!Count && !NoWaiting && !(eoptions&EO_NOTHROTTLE)) SpeedThrottle(); - BlitScreen(XBuf); - if(Count) - WriteSound(Buffer,Count,NoWaiting); + BlitScreen(xbuf); + if(Count && !NoWaiting && !(eoptions&EO_NOTHROTTLE)) + WriteSound(Buffer,Count); FCEUD_UpdateInput(); }