more cleanups
[fceu.git] / drivers / pc / sdl.c
CommitLineData
c62d2810 1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
5232c20c 4#include <pthread.h>
c62d2810 5
6#include "sdl.h"
7#include "sdl-video.h"
8#ifdef NETWORK
9#include "unix-netplay.h"
10#endif
5232c20c 11#include "minimal.h"
12//extern int soundvol;
13int CLImain(int argc, char *argv[]);
14extern int gp2x_in_sound_thread;
15extern void pthread_yield(void);
16extern void SetVideoScaling(int, int, int);
9e1b19d0 17
5232c20c 18//#define SOUND_RATE 44100
19#define SOUND_RATE 22050
c62d2810 20
21DSETTINGS Settings;
22CFGSTRUCT DriverConfig[]={
23 AC(_xscale),
24 AC(_yscale),
25 AC(_xscalefs),
26 AC(_yscalefs),
27 AC(_efx),
28 AC(_efxfs),
29 AC(_sound),
30 #ifdef DSPSOUND
31 AC(_f8bit),
32 #else
33 AC(_ebufsize),
34 AC(_lbufsize),
35 #endif
36 AC(_fullscreen),
37 AC(_xres),
38 AC(_yres),
39 ACA(joyBMap),
40 ACA(joyAMap),
41 ACA(joy),
42 //ACS(_fshack),
43 ENDCFGSTRUCT
44};
45
46//-fshack x Set the environment variable SDL_VIDEODRIVER to \"x\" when
47// entering full screen mode and x is not \"0\".
48
49char *DriverUsage=
50"-xres x Set horizontal resolution to x for full screen mode.\n\
51-yres x Set vertical resolution to x for full screen mode.\n\
52-xscale(fs) x Multiply width by x.\n\
53-yscale(fs) x Multiply height by x.\n\
54-efx(fs) x Enable scanlines effect if x is non zero. yscale must be >=2\n\
55 and preferably a multiple of 2.\n\
56-fs x Select full screen mode if x is non zero.\n\
57-joyx y Use joystick y as virtual joystick x.\n\
58-sound x Sound.\n\
59 0 = Disabled.\n\
60 Otherwise, x = playback rate.\n\
61"
62#ifdef DSPSOUND
63"-f8bit x Force 8-bit sound.\n\
64 0 = Disabled.\n\
65 1 = Enabled.\n\
66"
67#else
68"-lbufsize x Internal FCE Ultra sound buffer size. Size = 2^x samples.\n\
69-ebufsize x External SDL sound buffer size. Size = 2^x samples.\n\
70"
71#endif
72"-connect s Connect to server 's' for TCP/IP network play.\n\
73-server Be a host/server for TCP/IP network play.\n\
74-netport x Use TCP/IP port x for network play.";
75
5232c20c 76#ifdef NETWORK
c62d2810 77static int docheckie[2]={0,0};
5232c20c 78#endif
c62d2810 79ARGPSTRUCT DriverArgs[]={
80 {"-joy1",0,&joy[0],0},{"-joy2",0,&joy[1],0},
81 {"-joy3",0,&joy[2],0},{"-joy4",0,&joy[3],0},
82 {"-xscale",0,&_xscale,0},
83 {"-yscale",0,&_yscale,0},
84 {"-efx",0,&_efx,0},
85 {"-xscalefs",0,&_xscalefs,0},
86 {"-yscalefs",0,&_yscalefs,0},
87 {"-efxfs",0,&_efxfs,0},
88 {"-xres",0,&_xres,0},
89 {"-yres",0,&_yres,0},
90 {"-fs",0,&_fullscreen,0},
91 //{"-fshack",0,&_fshack,0x4001},
92 {"-sound",0,&_sound,0},
93 #ifdef DSPSOUND
94 {"-f8bit",0,&_f8bit,0},
95 #else
96 {"-lbufsize",0,&_lbufsize,0},
97 {"-ebufsize",0,&_ebufsize,0},
98 #endif
99 #ifdef NETWORK
100 {"-connect",&docheckie[0],&netplayhost,0x4001},
101 {"-server",&docheckie[1],0,0},
102 {"-netport",0,&Port,0},
103 #endif
104 {0,0,0,0}
105};
106
5232c20c 107
108
109
110
111void GetBaseDirectory(char *BaseDirectory)
112{
113 char *ol;
114
5232c20c 115 ol="/mnt/sd/roms/nes";
5232c20c 116 BaseDirectory[0]=0;
117 if(ol)
118 {
119 strncpy(BaseDirectory,ol,2047);
120 BaseDirectory[2047]=0;
5232c20c 121 strcat(BaseDirectory,"/fceultra");
5232c20c 122 }
123}
124
c62d2810 125static void SetDefaults(void)
126{
127 _xres=320;
128 _yres=240;
129 _fullscreen=0;
5232c20c 130 _sound=SOUND_RATE; // 48000 wrong
c62d2810 131 #ifdef DSPSOUND
132 _f8bit=0;
133 #else
134 _lbufsize=10;
135 _ebufsize=8;
136 #endif
137 _xscale=_yscale=_xscalefs=_yscalefs=1;
138 _efx=_efxfs=0;
139 //_fshack=_fshacksave=0;
140 memset(joy,0,sizeof(joy));
141}
142
143void DoDriverArgs(void)
144{
145 int x;
146
147 #ifdef BROKEN
148 if(_fshack)
149 {
150 if(_fshack[0]=='0')
151 if(_fshack[1]==0)
152 {
153 free(_fshack);
154 _fshack=0;
155 }
156 }
157 #endif
158
159 #ifdef NETWORK
160 if(docheckie[0])
161 netplay=2;
162 else if(docheckie[1])
163 netplay=1;
164
165 if(netplay)
166 FCEUI_SetNetworkPlay(netplay);
167 #endif
168
169 for(x=0;x<4;x++)
9e1b19d0 170 if(!joy[x])
c62d2810 171 {
172 memset(joyBMap[x],0,sizeof(joyBMap[0]));
173 memset(joyAMap[x],0,sizeof(joyAMap[0]));
174 }
175}
176int InitMouse(void)
177{
178 return(0);
179}
180void KillMouse(void){}
181void GetMouseData(uint32 *d)
182{
c62d2810 183}
184
185int InitKeyboard(void)
186{
187 return(1);
188}
189
190int UpdateKeyboard(void)
191{
192 return(1);
193}
194
195void KillKeyboard(void)
196{
197
198}
199
200char *GetKeyboard(void)
201{
5232c20c 202 return NULL;
c62d2810 203}
9e1b19d0 204
c62d2810 205#include "unix-basedir.h"
5232c20c 206extern int showfps;
207extern int swapbuttons;
c62d2810 208
209int main(int argc, char *argv[])
210{
5232c20c 211
9e1b19d0 212 puts("Starting GPFCE - Port version 0.2 05-29-2006");
5232c20c 213 puts("Based on FCE Ultra "VERSION_STRING"...");
214 puts("Ported by Zheng Zhu\n");
9e1b19d0 215
5232c20c 216 // stereo
217 //gp2x_init (1000, 8, SOUND_RATE, 16, 1, 60);
9e1b19d0 218
5232c20c 219 // mono 44khz
220 //gp2x_init (1000, 8, SOUND_RATE<<1, 16, 0, 60);
221 // mono 22khz
222 gp2x_init (1000, 8, SOUND_RATE, 16, 0, 60);
9e1b19d0 223
5232c20c 224 SetDefaults();
225 int ret=CLImain(argc,argv);
226
227 // unscale the screen, in case this is bad.
228 SetVideoScaling(320, 320, 240);
229
230 gp2x_deinit();
231 // make sure sound thread has exited cleanly
232 while (gp2x_in_sound_thread) pthread_yield();
233 printf("Sound thread exited\n");
234 printf("Exiting main(). terminated");
235 if (showfps && swapbuttons)
236 {
237 execl("./selector","./selector","./gpfce_showfps_swapbuttons_config",NULL);
238 }
239 else if (showfps)
240 {
241 execl("./selector","./selector","./gpfce_showfps_config",NULL);
242 }
243 else if (swapbuttons)
244 {
245 execl("./selector","./selector","./gpfce_swapbuttons_config",NULL);
246 }
247 else
248 {
249 execl("./selector","./selector","./gpfce_config",NULL);
250 }
251 return(ret?0:-1);
c62d2810 252}
253