fixed: broken fs0, sram saves
[fceu.git] / drivers / cli / sdl.c
CommitLineData
63bd5be0 1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include "sdl.h"
6#include "sdl-video.h"
7#ifdef NETWORK
8#include "unix-netplay.h"
9#endif
10
11DSETTINGS Settings;
12CFGSTRUCT DriverConfig[]={
13 AC(_xscale),
14 AC(_yscale),
15 AC(_xscalefs),
16 AC(_yscalefs),
17 AC(_efx),
18 AC(_efxfs),
19 AC(_sound),
20 #ifdef DSPSOUND
21 AC(_f8bit),
22 #else
23 AC(_ebufsize),
24 AC(_lbufsize),
25 #endif
26 AC(_fullscreen),
27 AC(_xres),
28 AC(_yres),
29 ACA(joyBMap),
30 ACA(joyAMap),
31 ACA(joy),
32 //ACS(_fshack),
33 ENDCFGSTRUCT
34};
35
36//-fshack x Set the environment variable SDL_VIDEODRIVER to \"x\" when
37// entering full screen mode and x is not \"0\".
38
39char *DriverUsage=
40"-xres x Set horizontal resolution to x for full screen mode.\n\
41-yres x Set vertical resolution to x for full screen mode.\n\
42-xscale(fs) x Multiply width by x.\n\
43-yscale(fs) x Multiply height by x.\n\
44-efx(fs) x Enable scanlines effect if x is non zero. yscale must be >=2\n\
45 and preferably a multiple of 2.\n\
46-fs x Select full screen mode if x is non zero.\n\
47-joyx y Use joystick y as virtual joystick x.\n\
48-sound x Sound.\n\
49 0 = Disabled.\n\
50 Otherwise, x = playback rate.\n\
51"
52#ifdef DSPSOUND
53"-f8bit x Force 8-bit sound.\n\
54 0 = Disabled.\n\
55 1 = Enabled.\n\
56"
57#else
58"-lbufsize x Internal FCE Ultra sound buffer size. Size = 2^x samples.\n\
59-ebufsize x External SDL sound buffer size. Size = 2^x samples.\n\
60"
61#endif
62"-connect s Connect to server 's' for TCP/IP network play.\n\
63-server Be a host/server for TCP/IP network play.\n\
64-netport x Use TCP/IP port x for network play.";
65
66//static int docheckie[2]={0,0};
67ARGPSTRUCT DriverArgs[]={
68 {"-joy1",0,&joy[0],0},{"-joy2",0,&joy[1],0},
69 {"-joy3",0,&joy[2],0},{"-joy4",0,&joy[3],0},
70 {"-xscale",0,&_xscale,0},
71 {"-yscale",0,&_yscale,0},
72 {"-efx",0,&_efx,0},
73 {"-xscalefs",0,&_xscalefs,0},
74 {"-yscalefs",0,&_yscalefs,0},
75 {"-efxfs",0,&_efxfs,0},
76 {"-xres",0,&_xres,0},
77 {"-yres",0,&_yres,0},
78 {"-fs",0,&_fullscreen,0},
79 //{"-fshack",0,&_fshack,0x4001},
80 {"-sound",0,&_sound,0},
81 #ifdef DSPSOUND
82 {"-f8bit",0,&_f8bit,0},
83 #else
84 {"-lbufsize",0,&_lbufsize,0},
85 {"-ebufsize",0,&_ebufsize,0},
86 #endif
87 #ifdef NETWORK
88 {"-connect",&docheckie[0],&netplayhost,0x4001},
89 {"-server",&docheckie[1],0,0},
90 {"-netport",0,&Port,0},
91 #endif
92 {0,0,0,0}
93};
94
95static void SetDefaults(void)
96{
97 _xres=320;
98 _yres=240;
99 _fullscreen=0;
100 _sound=48000;
101 #ifdef DSPSOUND
102 _f8bit=0;
103 #else
104 _lbufsize=10;
105 _ebufsize=8;
106 #endif
107 _xscale=_yscale=_xscalefs=_yscalefs=1;
108 _efx=_efxfs=0;
109 //_fshack=_fshacksave=0;
110 memset(joy,0,sizeof(joy));
111}
112
113void DoDriverArgs(void)
114{
115 int x;
116
117 #ifdef BROKEN
118 if(_fshack)
119 {
120 if(_fshack[0]=='0')
121 if(_fshack[1]==0)
122 {
123 free(_fshack);
124 _fshack=0;
125 }
126 }
127 #endif
128
129 #ifdef NETWORK
130 if(docheckie[0])
131 netplay=2;
132 else if(docheckie[1])
133 netplay=1;
134
135 if(netplay)
136 FCEUI_SetNetworkPlay(netplay);
137 #endif
138
139 for(x=0;x<4;x++)
140 if(!joy[x])
141 {
142 memset(joyBMap[x],0,sizeof(joyBMap[0]));
143 memset(joyAMap[x],0,sizeof(joyAMap[0]));
144 }
145}
146int InitMouse(void)
147{
148 return(0);
149}
150void KillMouse(void){}
151void GetMouseData(uint32 *d)
152{
153 int x,y;
154 uint32 t;
155
156 t=SDL_GetMouseState(&x,&y);
157 d[2]=0;
158 if(t&SDL_BUTTON(1))
159 d[2]|=1;
160 if(t&SDL_BUTTON(3))
161 d[2]|=2;
162 t=PtoV(x,y);
163 d[0]=t&0xFFFF;
164 d[1]=(t>>16)&0xFFFF;
165}
166
167int InitKeyboard(void)
168{
169 return(1);
170}
171
172int UpdateKeyboard(void)
173{
174 return(1);
175}
176
177void KillKeyboard(void)
178{
179
180}
181
182char *GetKeyboard(void)
183{
184 SDL_PumpEvents();
185 return (char *)SDL_GetKeyState(0);
186}
187#include "unix-basedir.h"
188
189int CLImain(int argc, char *argv[]);
190int main(int argc, char *argv[])
191{
192 puts("\nStarting FCE Ultra "VERSION_STRING"...\n");
193 if(SDL_Init(0))
194 {
195 printf("Could not initialize SDL: %s.\n", SDL_GetError());
196 return(-1);
197 }
198 SetDefaults();
199
200 #ifdef BROKEN
201 if(getenv("SDL_VIDEODRIVER"))
202 {
203 if((_fshacksave=malloc(strlen(getenv("SDL_VIDEODRIVER"))+1)))
204 strcpy(_fshacksave,getenv("SDL_VIDEODRIVER"));
205 }
206 else
207 _fshacksave=0;
208 #endif
209
210 {
211 int ret=CLImain(argc,argv);
212 SDL_Quit();
213 return(ret);
214 }
215}
216