c6c6c9cd |
1 | // (c) Copyright 2006-2009 notaz, All rights reserved. |
e5f426aa |
2 | |
c7eb229a |
3 | #include "port_config.h" |
4 | |
e5f426aa |
5 | typedef enum |
6 | { |
7 | MB_NONE = 1, /* no auto processing */ |
1fb0dd88 |
8 | MB_OPT_ONOFF, /* ON/OFF setting */ |
9 | MB_OPT_RANGE, /* [min-max] setting */ |
713c9224 |
10 | MB_OPT_CUSTOM, /* custom value */ |
11 | MB_OPT_CUSTONOFF, |
12 | MB_OPT_CUSTRANGE, |
fcdefcf6 |
13 | MB_OPT_ENUM, |
e5f426aa |
14 | } menu_behavior; |
15 | |
16 | typedef enum |
17 | { |
18 | MA_NONE = 1, |
19 | MA_MAIN_RESUME_GAME, |
20 | MA_MAIN_SAVE_STATE, |
21 | MA_MAIN_LOAD_STATE, |
22 | MA_MAIN_RESET_GAME, |
23 | MA_MAIN_LOAD_ROM, |
e5f426aa |
24 | MA_MAIN_CONTROLS, |
25 | MA_MAIN_CREDITS, |
26 | MA_MAIN_PATCHES, |
27 | MA_MAIN_EXIT, |
28 | MA_OPT_RENDERER, |
29 | MA_OPT_SCALING, |
f4750ee0 |
30 | MA_OPT_VSCALING, |
e5f426aa |
31 | MA_OPT_ACC_SPRITES, |
32 | MA_OPT_SHOW_FPS, |
33 | MA_OPT_FRAMESKIP, |
34 | MA_OPT_ENABLE_SOUND, |
35 | MA_OPT_SOUND_QUALITY, |
36 | MA_OPT_ARM940_SOUND, |
37 | MA_OPT_6BUTTON_PAD, |
38 | MA_OPT_REGION, |
39 | MA_OPT_SRAM_STATES, |
40 | MA_OPT_CONFIRM_STATES, |
41 | MA_OPT_SAVE_SLOT, |
42 | MA_OPT_CPU_CLOCKS, |
43 | MA_OPT_SCD_OPTS, |
44 | MA_OPT_ADV_OPTS, |
8ab3e3c1 |
45 | MA_OPT_DISP_OPTS, /* psp */ |
e5f426aa |
46 | MA_OPT_SAVECFG, |
47 | MA_OPT_SAVECFG_GAME, |
48 | MA_OPT_LOADCFG, |
a8869ad1 |
49 | MA_OPT_INTERLACED, /* giz */ |
ca482e5d |
50 | MA_OPT_ROTATION, /* uiq */ |
cc41eb4f |
51 | MA_OPT_TEARING_FIX, /* wiz */ |
e5f426aa |
52 | MA_OPT2_GAMMA, |
53 | MA_OPT2_A_SN_GAMMA, |
c77ca79e |
54 | MA_OPT2_DBLBUFF, /* giz */ |
e5f426aa |
55 | MA_OPT2_VSYNC, |
56 | MA_OPT2_ENABLE_Z80, |
57 | MA_OPT2_ENABLE_YM2612, |
58 | MA_OPT2_ENABLE_SN76496, |
59 | MA_OPT2_GZIP_STATES, |
60 | MA_OPT2_NO_LAST_ROM, |
a8869ad1 |
61 | MA_OPT2_RAMTIMINGS, /* gp2x */ |
62 | MA_OPT2_SQUIDGEHACK, /* gp2x */ |
9caf44b5 |
63 | MA_OPT2_STATUS_LINE, /* psp */ |
c6196c0f |
64 | MA_OPT2_NO_FRAME_LIMIT, /* psp */ |
1ca2ea4f |
65 | MA_OPT2_SVP_DYNAREC, |
95dc5c5e |
66 | MA_OPT2_NO_SPRITE_LIM, |
053fd9b4 |
67 | MA_OPT2_NO_IDLE_LOOPS, |
e5f426aa |
68 | MA_OPT2_DONE, |
8ab3e3c1 |
69 | MA_OPT3_SCALE, /* psp (all OPT3) */ |
70 | MA_OPT3_HSCALE32, |
71 | MA_OPT3_HSCALE40, |
72 | MA_OPT3_PRES_NOSCALE, |
c6196c0f |
73 | MA_OPT3_PRES_SCALE43, |
8ab3e3c1 |
74 | MA_OPT3_PRES_FULLSCR, |
75 | MA_OPT3_FILTERING, |
3ec29f01 |
76 | MA_OPT3_VSYNC, |
2445b7cb |
77 | MA_OPT3_GAMMAA, |
6fc57144 |
78 | MA_OPT3_BLACKLVL, |
c7eb229a |
79 | MA_OPT3_LAYER_X, |
80 | MA_OPT3_LAYER_Y, |
81 | MA_OPT3_LAYER_W, |
82 | MA_OPT3_LAYER_H, |
8ab3e3c1 |
83 | MA_OPT3_DONE, |
e5f426aa |
84 | MA_CDOPT_TESTBIOS_USA, |
85 | MA_CDOPT_TESTBIOS_EUR, |
86 | MA_CDOPT_TESTBIOS_JAP, |
87 | MA_CDOPT_LEDS, |
88 | MA_CDOPT_CDDA, |
89 | MA_CDOPT_PCM, |
90 | MA_CDOPT_READAHEAD, |
91 | MA_CDOPT_SAVERAM, |
92 | MA_CDOPT_SCALEROT_CHIP, |
93 | MA_CDOPT_BETTER_SYNC, |
94 | MA_CDOPT_DONE, |
db1d3564 |
95 | MA_32XOPT_ENABLE_32X, |
5a681086 |
96 | MA_32XOPT_RENDERER, |
db1d3564 |
97 | MA_32XOPT_PWM, |
fcdefcf6 |
98 | MA_32XOPT_MSH2_CYCLES, |
99 | MA_32XOPT_SSH2_CYCLES, |
f0f0d2df |
100 | MA_CTRL_PLAYER1, |
101 | MA_CTRL_PLAYER2, |
102 | MA_CTRL_EMU, |
103 | MA_CTRL_TURBO_RATE, |
45285368 |
104 | MA_CTRL_DEADZONE, |
713c9224 |
105 | MA_CTRL_DEV_FIRST, |
106 | MA_CTRL_DEV_NEXT, |
f0f0d2df |
107 | MA_CTRL_DONE, |
e5f426aa |
108 | } menu_id; |
109 | |
110 | typedef struct |
111 | { |
42171343 |
112 | const char *name; |
e5f426aa |
113 | menu_behavior beh; |
114 | menu_id id; |
1fb0dd88 |
115 | void *var; /* for on-off/range settings */ |
116 | int mask; /* bit to toggle for on/off */ |
713c9224 |
117 | signed short min; /* for ranged integer settings, to be sign-extended */ |
118 | signed short max; |
c7eb229a |
119 | unsigned int enabled:1; |
120 | unsigned int need_to_save:1; |
121 | unsigned int selectable:1; |
713c9224 |
122 | int (*handler)(menu_id id, int keys); |
123 | const char * (*generate_name)(menu_id id, int *offs); |
fcdefcf6 |
124 | const void *data; |
125 | const char *help; |
e5f426aa |
126 | } menu_entry; |
127 | |
713c9224 |
128 | #define mee_handler_id(name, id, handler) \ |
fcdefcf6 |
129 | { name, MB_NONE, id, NULL, 0, 0, 0, 1, 0, 1, handler, NULL, NULL, NULL } |
1fb0dd88 |
130 | |
713c9224 |
131 | #define mee_handler(name, handler) \ |
132 | mee_handler_id(name, MA_NONE, handler) |
133 | |
713c9224 |
134 | #define mee_label(name) \ |
fcdefcf6 |
135 | { name, MB_NONE, MA_NONE, NULL, 0, 0, 0, 1, 0, 0, NULL, NULL, NULL, NULL } |
713c9224 |
136 | |
137 | #define mee_label_mk(id, name_func) \ |
fcdefcf6 |
138 | { "", MB_NONE, id, NULL, 0, 0, 0, 1, 0, 0, NULL, name_func, NULL, NULL } |
139 | |
140 | #define mee_onoff_h(name, id, var, mask, help) \ |
141 | { name, MB_OPT_ONOFF, id, &(var), mask, 0, 0, 1, 1, 1, NULL, NULL, NULL, help } |
713c9224 |
142 | |
143 | #define mee_onoff(name, id, var, mask) \ |
fcdefcf6 |
144 | mee_onoff_h(name, id, var, mask, NULL) |
713c9224 |
145 | |
146 | #define mee_range(name, id, var, min, max) \ |
fcdefcf6 |
147 | { name, MB_OPT_RANGE, id, &(var), 0, min, max, 1, 1, 1, NULL, NULL, NULL, NULL } |
148 | |
c7eb229a |
149 | #define mee_range_hide(name, id, var, min, max) \ |
150 | { name, MB_OPT_RANGE, id, &(var), 0, min, max, 0, 1, 0, NULL, NULL, NULL, NULL } |
151 | |
fcdefcf6 |
152 | #define mee_cust_s_h(name, id, need_save, handler, name_func, help) \ |
153 | { name, MB_OPT_CUSTOM, id, NULL, 0, 0, 0, 1, need_save, 1, handler, name_func, NULL, help } |
154 | |
155 | #define mee_cust_h(name, id, handler, name_func, help) \ |
156 | mee_cust_s_h(name, id, 1, handler, name_func, help) |
713c9224 |
157 | |
158 | #define mee_cust(name, id, handler, name_func) \ |
fcdefcf6 |
159 | mee_cust_h(name, id, handler, name_func, NULL) |
160 | |
161 | #define mee_cust_nosave(name, id, handler, name_func) \ |
162 | mee_cust_s_h(name, id, 0, handler, name_func, NULL) |
713c9224 |
163 | |
164 | #define mee_onoff_cust(name, id, var, mask, name_func) \ |
fcdefcf6 |
165 | { name, MB_OPT_CUSTONOFF, id, &(var), mask, 0, 0, 1, 1, 1, NULL, name_func, NULL, NULL } |
713c9224 |
166 | |
167 | #define mee_range_cust(name, id, var, min, max, name_func) \ |
fcdefcf6 |
168 | { name, MB_OPT_CUSTRANGE, id, &(var), 0, min, max, 1, 1, 1, NULL, name_func, NULL, NULL } |
169 | |
170 | #define mee_enum_h(name, id, var, names_list, help) \ |
171 | { name, MB_OPT_ENUM, id, &(var), 0, 0, 0, 1, 1, 1, NULL, NULL, names_list, help } |
172 | |
173 | #define mee_enum(name, id, var, names_list) \ |
174 | mee_enum_h(name, id, var, names_list, NULL) |
1fb0dd88 |
175 | |
176 | #define mee_end \ |
fcdefcf6 |
177 | { NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL } |
1fb0dd88 |
178 | |
1ca2ea4f |
179 | typedef struct |
180 | { |
181 | char *name; |
182 | int mask; |
183 | } me_bind_action; |
184 | |
f0f0d2df |
185 | extern me_bind_action me_ctrl_actions[15]; |
1ca2ea4f |
186 | extern me_bind_action emuctrl_actions[]; // platform code |
187 | |
c7eb229a |
188 | extern void *g_menubg_src_ptr; |
697746df |
189 | extern void *g_menubg_ptr; |
c7eb229a |
190 | extern void *g_menuscreen_ptr; |
d40231e2 |
191 | #if MSCREEN_SIZE_FIXED |
c7eb229a |
192 | #define g_menuscreen_w MSCREEN_WIDTH |
193 | #define g_menuscreen_h MSCREEN_HEIGHT |
194 | #else |
195 | extern int g_menuscreen_w; |
196 | extern int g_menuscreen_h; |
197 | #endif |
697746df |
198 | |
c6c6c9cd |
199 | void menu_init(void); |
200 | void text_out16(int x, int y, const char *texto, ...); |
201 | void me_update_msg(const char *msg); |
202 | |
823b9004 |
203 | void menu_romload_prepare(const char *rom_name); |
204 | void menu_romload_end(void); |
205 | |
74f5e726 |
206 | void menu_loop(void); |
207 | int menu_loop_tray(void); |
208 | |
713c9224 |
209 | menu_entry *me_list_get_first(void); |
210 | menu_entry *me_list_get_next(void); |
e5f426aa |
211 | |