X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=drivers%2Fgp2x%2Fgp2x.c;fp=drivers%2Fgp2x%2Fgp2x.c;h=0f3b9aa7dc68d5dc90c5d67bd966de9f127d00ae;hp=0000000000000000000000000000000000000000;hb=22f08d9598e12f15de5e3c2f503c2ad1298dcc17;hpb=9a079c3760813dd9715edab1c7ebc5d43b385bef diff --git a/drivers/gp2x/gp2x.c b/drivers/gp2x/gp2x.c new file mode 100644 index 0000000..0f3b9aa --- /dev/null +++ b/drivers/gp2x/gp2x.c @@ -0,0 +1,248 @@ +#include +#include +#include + +#include "gp2x.h" +#include "gp2x-video.h" +#ifdef NETWORK +#include "unix-netplay.h" +#endif +#include "minimal.h" + +int CLImain(int argc, char *argv[]); +extern void SetVideoScaling(int, int, int); + +//#define SOUND_RATE 44100 +#define SOUND_RATE 22050 + +DSETTINGS Settings; +CFGSTRUCT DriverConfig[]={ + AC(_xscale), + AC(_yscale), + AC(_xscalefs), + AC(_yscalefs), + AC(_efx), + AC(_efxfs), + AC(_sound), + #ifdef DSPSOUND + AC(_f8bit), + #else + AC(_ebufsize), + AC(_lbufsize), + #endif + AC(_fullscreen), + AC(_xres), + AC(_yres), + ACA(joyBMap), + ACA(joyAMap), + ACA(joy), + //ACS(_fshack), + ENDCFGSTRUCT +}; + +//-fshack x Set the environment variable SDL_VIDEODRIVER to \"x\" when +// entering full screen mode and x is not \"0\". + +char *DriverUsage= +"-xres x Set horizontal resolution to x for full screen mode.\n\ +-yres x Set vertical resolution to x for full screen mode.\n\ +-xscale(fs) x Multiply width by x.\n\ +-yscale(fs) x Multiply height by x.\n\ +-efx(fs) x Enable scanlines effect if x is non zero. yscale must be >=2\n\ + and preferably a multiple of 2.\n\ +-fs x Select full screen mode if x is non zero.\n\ +-joyx y Use joystick y as virtual joystick x.\n\ +-sound x Sound.\n\ + 0 = Disabled.\n\ + Otherwise, x = playback rate.\n\ +" +#ifdef DSPSOUND +"-f8bit x Force 8-bit sound.\n\ + 0 = Disabled.\n\ + 1 = Enabled.\n\ +" +#else +"-lbufsize x Internal FCE Ultra sound buffer size. Size = 2^x samples.\n\ +-ebufsize x External SDL sound buffer size. Size = 2^x samples.\n\ +" +#endif +"-connect s Connect to server 's' for TCP/IP network play.\n\ +-server Be a host/server for TCP/IP network play.\n\ +-netport x Use TCP/IP port x for network play."; + +#ifdef NETWORK +static int docheckie[2]={0,0}; +#endif +ARGPSTRUCT DriverArgs[]={ + {"-joy1",0,&joy[0],0},{"-joy2",0,&joy[1],0}, + {"-joy3",0,&joy[2],0},{"-joy4",0,&joy[3],0}, + {"-xscale",0,&_xscale,0}, + {"-yscale",0,&_yscale,0}, + {"-efx",0,&_efx,0}, + {"-xscalefs",0,&_xscalefs,0}, + {"-yscalefs",0,&_yscalefs,0}, + {"-efxfs",0,&_efxfs,0}, + {"-xres",0,&_xres,0}, + {"-yres",0,&_yres,0}, + {"-fs",0,&_fullscreen,0}, + //{"-fshack",0,&_fshack,0x4001}, + {"-sound",0,&_sound,0}, + #ifdef DSPSOUND + {"-f8bit",0,&_f8bit,0}, + #else + {"-lbufsize",0,&_lbufsize,0}, + {"-ebufsize",0,&_ebufsize,0}, + #endif + #ifdef NETWORK + {"-connect",&docheckie[0],&netplayhost,0x4001}, + {"-server",&docheckie[1],0,0}, + {"-netport",0,&Port,0}, + #endif + {0,0,0,0} +}; + + + + + +void GetBaseDirectory(char *BaseDirectory) +{ + char *ol; + + ol="/mnt/sd/roms/nes"; + BaseDirectory[0]=0; + if(ol) + { + strncpy(BaseDirectory,ol,2047); + BaseDirectory[2047]=0; + strcat(BaseDirectory,"/fceultra"); + } +} + +static void SetDefaults(void) +{ + _xres=320; + _yres=240; + _fullscreen=0; + _sound=SOUND_RATE; // 48000 wrong + #ifdef DSPSOUND + _f8bit=0; + #else + _lbufsize=10; + _ebufsize=8; + #endif + _xscale=_yscale=_xscalefs=_yscalefs=1; + _efx=_efxfs=0; + //_fshack=_fshacksave=0; + memset(joy,0,sizeof(joy)); +} + +void DoDriverArgs(void) +{ + int x; + + #ifdef BROKEN + if(_fshack) + { + if(_fshack[0]=='0') + if(_fshack[1]==0) + { + free(_fshack); + _fshack=0; + } + } + #endif + + #ifdef NETWORK + if(docheckie[0]) + netplay=2; + else if(docheckie[1]) + netplay=1; + + if(netplay) + FCEUI_SetNetworkPlay(netplay); + #endif + + for(x=0;x<4;x++) + if(!joy[x]) + { + memset(joyBMap[x],0,sizeof(joyBMap[0])); + memset(joyAMap[x],0,sizeof(joyAMap[0])); + } +} +int InitMouse(void) +{ + return(0); +} +void KillMouse(void){} +void GetMouseData(uint32 *d) +{ +} + +int InitKeyboard(void) +{ + return(1); +} + +int UpdateKeyboard(void) +{ + return(1); +} + +void KillKeyboard(void) +{ + +} + +char *GetKeyboard(void) +{ + return NULL; +} + +#include "unix-basedir.h" +extern int showfps; +extern int swapbuttons; + +int main(int argc, char *argv[]) +{ + + puts("Starting GPFCE - Port version 0.2 05-29-2006"); + puts("Based on FCE Ultra "VERSION_STRING"..."); + puts("Ported by Zheng Zhu\n"); + + // stereo + //gp2x_init (1000, 8, SOUND_RATE, 16, 1, 60); + + // mono 44khz + //gp2x_init (1000, 8, SOUND_RATE<<1, 16, 0, 60); + // mono 22khz + gp2x_init (1000, 8, SOUND_RATE, 16, 0, 60); + + SetDefaults(); + int ret=CLImain(argc,argv); + + // unscale the screen, in case this is bad. + SetVideoScaling(320, 320, 240); + + gp2x_deinit(); + // make sure sound thread has exited cleanly + printf("Exiting main(). terminated"); + if (showfps && swapbuttons) + { + execl("./selector","./selector","./gpfce_showfps_swapbuttons_config",NULL); + } + else if (showfps) + { + execl("./selector","./selector","./gpfce_showfps_config",NULL); + } + else if (swapbuttons) + { + execl("./selector","./selector","./gpfce_swapbuttons_config",NULL); + } + else + { + execl("./selector","./selector","./gpfce_config",NULL); + } + return(ret?0:-1); +} +