trying to use osso-games-startup as gui
[drnoksnes] / menu.h
1 #ifndef _MENU_H_
2 #define _MENU_H_
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8
9
10 #ifdef __GIZ__
11 #define DIR_SEP "\\"
12 #define DIR_SEP_BAD "/" 
13 #define SYSTEM_DIR              "\\SD Card\\DrPocketSnes"
14 #endif
15
16 #ifdef __GP2X__
17 #include "gp2x_sdk.h"
18
19 #define DIR_SEP "/"
20 #define DIR_SEP_BAD "\\"        
21 #define SYSTEM_DIR              "/mnt/sd/DrPocketSnes"
22 #endif
23
24
25
26
27 #define SNES_OPTIONS_DIR                "options"
28 #define SNES_SRAM_DIR                   "sram"
29 #define SNES_SAVESTATE_DIR              "savestate"
30
31 #define ROM_LIST_FILENAME                       "romlist.bin"
32 #define SRAM_FILE_EXT                           "srm"
33 #define SAVESTATE_EXT                           "sv"
34 #define MENU_OPTIONS_FILENAME           "menu"
35 #define MENU_OPTIONS_EXT                        "opt"
36 #define DEFAULT_ROM_DIR_FILENAME        "romdir"
37 #define DEFAULT_ROM_DIR_EXT                     "opt"
38
39
40 //define emulation modes
41 #define EMU_MODE_NONE   0
42 #define EMU_MODE_SNES   1
43
44 #define SAVESTATE_MODE_SAVE                             0
45 #define SAVESTATE_MODE_LOAD                             1
46 #define SAVESTATE_MODE_DELETE                   2
47
48 #define SNES_OPTIONS_VER                        1
49 #define DRSNES_VERSION                          "version 6.4.4"
50
51 #define ROM_SIZE                0x500000 //ssf2(40mbits)
52 #define MENU_RGB(r,g,b)                 ((r) << 11 | (g) << 6 | (b) << 0 )
53 #define MAX_ROMS                3000
54 #define MAX_CPU                 39
55 #ifndef MAX_PATH
56 #define MAX_PATH                        255
57 #endif
58
59 #define MENU_CPU_SPEED                  100
60 #define MENU_FAST_CPU_SPEED             200
61
62 enum  FILE_TYPE_ENUM
63 {
64         FILE_TYPE_FILE = 0,
65         FILE_TYPE_DIRECTORY
66 };
67
68 enum  MAIN_MENU_ENUM
69 {
70         MAIN_MENU_RETURN = 0,
71         MAIN_MENU_ROM_SELECT,
72         MAIN_MENU_MANAGE_SAVE_STATE,
73         MAIN_MENU_SAVE_SRAM,
74         MAIN_MENU_SNES_OPTIONS,
75         MAIN_MENU_RESET_GAME,
76         MAIN_MENU_EXIT_APP,
77         MAIN_MENU_COUNT
78 };
79
80 enum  LOAD_ROM_ENUM
81 {
82         LOAD_ROM_MENU_SNES = 0,
83         LOAD_ROM_MENU_RETURN,
84         LOAD_ROM_MENU_COUNT
85 };
86
87 enum SNES_MENU_ENUM
88 {
89         SNES_MENU_SOUND = 0,
90         SNES_MENU_SOUND_RATE,
91         SNES_MENU_SOUND_VOL,
92         SNES_MENU_FRAMESKIP,
93         SNES_MENU_REGION,
94         SNES_MENU_FPS,
95         SNES_MENU_TRANSPARENCY,
96 #if defined(__GP2X__)
97         SNES_MENU_CPUSPEED,
98         SNES_MENU_RENDER_MODE,
99         SNES_MENU_GAMMA,
100         SNES_MENU_RAM_SETTINGS,
101         SNES_MENU_MMU_HACK,
102         SNES_MENU_ACTION_BUTTONS,
103 #endif
104         SNES_MENU_ADVANCED_HACKS,
105         SNES_MENU_AUTO_SAVE_SRAM,
106         SNES_MENU_LOAD_GLOBAL,
107         SNES_MENU_SAVE_GLOBAL,
108         SNES_MENU_DELETE_GLOBAL,
109         SNES_MENU_LOAD_CURRENT,
110         SNES_MENU_SAVE_CURRENT,
111         SNES_MENU_DELETE_CURRENT,
112         SNES_MENU_SET_ROMDIR,
113         SNES_MENU_CLEAR_ROMDIR,
114         SNES_MENU_RETURN,
115         SNES_MENU_COUNT
116 };
117
118 enum SAVESTATE_MENU_ENUM
119 {
120         SAVESTATE_MENU_LOAD = 0,
121         SAVESTATE_MENU_SAVE,
122         SAVESTATE_MENU_DELETE,
123         SAVESTATE_MENU_RETURN,
124         SAVESTATE_MENU_COUNT
125 };
126
127 enum HACKS_MENU_ENUM
128 {
129         HACKS_MENU_AUDIO = 0,
130         HACKS_MENU_PALETTE,
131         HACKS_MENU_FIXEDCOL,
132         HACKS_MENU_WINDOW,
133         HACKS_MENU_ADDSUB,
134         HACKS_MENU_OBJ,
135         HACKS_MENU_BG0,
136         HACKS_MENU_BG1,
137         HACKS_MENU_BG2,
138         HACKS_MENU_BG3,
139         HACKS_MENU_RETURN,
140         HACKS_MENU_COUNT
141 };
142
143 enum SRAM_MENU_ENUM
144 {
145         SRAM_MENU_LOAD = 0,
146         SRAM_MENU_SAVE,
147         SRAM_MENU_DELETE,
148         SRAM_MENU_RETURN,
149         SRAM_MENU_COUNT,
150 };
151
152 enum EVENT_TYPES
153 {
154         EVENT_NONE = 0,
155         EVENT_EXIT_APP,
156         EVENT_LOAD_SNES_ROM,
157         EVENT_RUN_SNES_ROM,
158         EVENT_RESET_SNES_ROM
159 };
160
161 enum RENDER_MODE_ENUM
162 {
163         RENDER_MODE_UNSCALED = 0,
164         RENDER_MODE_SCALED
165 };
166
167 #define MENU_TILE_WIDTH      64
168 #define MENU_TILE_HEIGHT     64
169
170 #define GP32_GCC
171
172 #ifdef __GIZ__
173 #define INP_BUTTON_MENU_SELECT                  INP_BUTTON_PLAY
174 #define INP_BUTTON_MENU_CANCEL                  INP_BUTTON_STOP
175 #define INP_BUTTON_MENU_ENTER                   INP_BUTTON_BRIGHT
176 #define INP_BUTTON_MENU_DELETE                  INP_BUTTON_REWIND
177 #define INP_BUTTON_MENU_QUICKSAVE1              INP_BUTTON_R
178 #define INP_BUTTON_MENU_QUICKSAVE2              INP_BUTTON_BRIGHT
179 #define INP_BUTTON_MENU_QUICKLOAD1              INP_BUTTON_L
180 #define INP_BUTTON_MENU_QUICKLOAD2              INP_BUTTON_BRIGHT
181
182 //Menu Text
183 #define MENU_TEXT_LOAD_SAVESTATE                "Press Play to load"
184 #define MENU_TEXT_OVERWRITE_SAVESTATE   "Press Play to overwrite"
185 #define MENU_TEXT_DELETE_SAVESTATE              "Press Play to delete"
186 #define MENU_TEXT_PREVIEW_SAVESTATE     "Press R to preview"
187 #endif
188
189 #ifdef __GP2X__
190 #define INP_BUTTON_MENU_SELECT                  INP_BUTTON_B
191 #define INP_BUTTON_MENU_CANCEL                  INP_BUTTON_X
192 #define INP_BUTTON_MENU_ENTER                   INP_BUTTON_SELECT
193 #define INP_BUTTON_MENU_DELETE                  INP_BUTTON_SELECT
194 #define INP_BUTTON_MENU_QUICKSAVE1              INP_BUTTON_R
195 #define INP_BUTTON_MENU_QUICKSAVE2              INP_BUTTON_SELECT
196 #define INP_BUTTON_MENU_QUICKLOAD1              INP_BUTTON_L
197 #define INP_BUTTON_MENU_QUICKLOAD2              INP_BUTTON_SELECT
198
199
200 //Menu Text
201 #define MENU_TEXT_LOAD_SAVESTATE                "Press B to load"
202 #define MENU_TEXT_OVERWRITE_SAVESTATE   "Press B to overwrite"
203 #define MENU_TEXT_DELETE_SAVESTATE              "Press B to delete"
204 #define MENU_TEXT_PREVIEW_SAVESTATE     "Press Y to preview"
205 #endif
206
207 typedef struct {
208    char name[MAX_ROMS][MAX_PATH];    //  128 entrys,16 Bytes long
209    int size[MAX_ROMS];
210 } DIRDATA;
211
212 //Graphics - moved to objects because they get updated with current gamma setting
213 extern unsigned short menuHeader[];
214 extern unsigned short menuHeaderOrig[];
215 extern unsigned short highLightBar[];
216 extern unsigned short highLightBarOrig[];
217 extern unsigned short menuTile[];
218 extern unsigned short menuTileOrig[];
219
220 extern unsigned char padConfig[];
221 extern float soundRates[];
222 extern char currentWorkingDir[];
223 extern char snesOptionsDir[];
224 extern char snesSramDir[];
225 extern char snesSaveStateDir[];
226 extern unsigned char gammaConv[];
227 extern char lastSaveName[];
228 extern short *soundBuffer;
229 extern unsigned char *RomData;
230 extern int currentEmuMode;
231 extern int lastStage;
232 extern int currFB;
233 extern int prevFB;
234 extern int saveStateSize;
235 extern int romLoaded;
236 extern int frames,taken; // Frames and 60hz ticks
237 extern char showFps;
238 extern char soundRate;
239 extern char soundOn;
240
241 void UpdateMenuGraphicsGamma(void);
242 int RoundDouble(double val);
243 void ClearScreen(unsigned int *buffer,unsigned int data);
244 void LoadSram(char *path,char *romname,char *ext,char *srammem);
245 void SaveSram(char *path,char *romname,char *ext,char *srammem);
246 void DeleteSram(char *path,char *romname,char *ext);
247 int SaveMenuOptions(char *path, char *filename, char *ext, char *optionsmem, int maxsize, int showMessage);
248 int LoadMenuOptions(char *path, char *filename, char *ext, char *optionsmem, int maxsize, int showMessage);
249 int DeleteMenuOptions(char *path, char *filename, char *ext, int showMessage);
250 void SnesDefaultMenuOptions(void);
251 #ifdef __GIZ__
252 void sync(void);
253 #endif
254 // menu.cpp
255 void MenuPause(void);
256 void MenuFlip(void);
257 void SplitFilename(char *wholeFilename, char *filename, char *ext);
258 void CheckDirSep(char *path);
259 int FileSelect(int mode);
260 int MainMenu(int prevAction);
261 void PrintTitle(int flip);
262 void PrintTile(int flip);
263 void PrintBar(int flip, unsigned int givenY);
264
265 int FileScan();
266 extern void loadStateFile(char *filename);
267 extern int quickSavePresent;
268 extern unsigned short cpuSpeedLookup[];
269 extern float gammaLookup[];
270
271 extern char currentRomFilename[];
272 extern char romDir[];
273 extern char snesRomDir[];
274
275 struct SNES_MENU_OPTIONS
276 {
277   unsigned char menuVer;
278   unsigned char frameSkip;
279   unsigned char soundOn;
280   unsigned char cpuSpeed;
281   unsigned char padConfig[32];
282   unsigned char tripleBuffer;
283   unsigned char forceRegion;
284   unsigned char showFps;
285   signed char gamma;
286   unsigned char lcdver;
287   unsigned char stereo;
288   unsigned char soundRate;
289   unsigned char autoSram;
290   unsigned char renderMode;
291   unsigned char volume;
292   unsigned char actionButtons;
293   unsigned char transparency;
294   unsigned char ramSettings;
295   unsigned char mmuHack;
296   unsigned char region;
297   unsigned char soundHack;
298   unsigned short graphHacks;
299   unsigned char spare16;
300   unsigned char spare17;
301   unsigned char spare18;
302   unsigned char spare19;
303   unsigned char spare1A;
304   unsigned char spare1B;
305   unsigned char spare1C;
306   unsigned char spare1D;
307   unsigned char spare1E;
308 };
309
310 extern struct SNES_MENU_OPTIONS snesMenuOptions;
311
312 struct SAVE_STATE
313 {
314   char filename[MAX_PATH+1];
315   char fullFilename[MAX_PATH+1];
316   unsigned int inUse;
317 };
318
319
320 extern struct SAVE_STATE saveState[];  // holds the filenames for the savestate and "inuse" flags
321 extern char saveStateName[];
322
323 // Input.cpp
324 struct INPUT
325 {
326   unsigned int held[32];
327   unsigned int repeat[32];
328 };
329 extern struct INPUT Inp;
330
331 int InputInit();
332 int InputUpdate(int EnableDiagnals);
333
334 #ifdef __cplusplus
335 }
336 #endif
337
338 #endif /* _MENU_H_ */
339
340
341
342
343