\r
#include <stdio.h>\r
#include <stdlib.h>\r
-#include <ctype.h> // tolower\r
#ifndef NO_SYNC\r
#include <unistd.h>\r
#endif\r
#include "fonts.h"\r
#include "lprintf.h"\r
#include "config.h"\r
-#include "common.h"\r
#include "plat.h"\r
\r
#include <pico/pico_int.h>\r
char noticeMsg[64] = { 0, };\r
int state_slot = 0;\r
int config_slot = 0, config_slot_current = 0;\r
-int kb_combo_keys = 0, kb_combo_acts = 0; // keys and actions which need button combos\r
int pico_inp_mode = 0;\r
int engineState = PGS_Menu;\r
\r
static int movie_size = 0;\r
\r
\r
-// utilities\r
+/* don't use tolower() for easy old glibc binary compatibility */\r
static void strlwr_(char *string)\r
{\r
char *p;\r
for (p = string; *p; p++)\r
- *p = (char)tolower(*p);\r
+ if ('A' <= *p && *p <= 'Z')\r
+ *p += 'a' - 'A';\r
}\r
\r
static int try_rfn_cut(char *fname)\r
if (bios_file) *bios_file = bios_path;\r
return 1;\r
} else {\r
- sprintf(menuErrorMsg, "no %s BIOS files found, read docs",\r
+ sprintf(bios_path, "no %s BIOS files found, read docs",\r
region != 4 ? (region == 8 ? "EU" : "JAP") : "USA");\r
- lprintf("%s\n", menuErrorMsg);\r
+ me_update_msg(bios_path);\r
return 0;\r
}\r
}\r
\r
// detect wrong extensions\r
if (!strcmp(ext, ".srm") || !strcmp(ext, "s.gz") || !strcmp(ext, ".mds")) { // s.gz ~ .mds.gz\r
- sprintf(menuErrorMsg, "Not a ROM/CD selected.");\r
+ me_update_msg("Not a ROM/CD selected.");\r
return 0;\r
}\r
\r
int dummy;\r
FILE *movie_file = fopen(rom_fname, "rb");\r
if(!movie_file) {\r
- sprintf(menuErrorMsg, "Failed to open movie.");\r
+ me_update_msg("Failed to open movie.");\r
return 0;\r
}\r
fseek(movie_file, 0, SEEK_END);\r
movie_size = ftell(movie_file);\r
fseek(movie_file, 0, SEEK_SET);\r
if(movie_size < 64+3) {\r
- sprintf(menuErrorMsg, "Invalid GMV file.");\r
+ me_update_msg("Invalid GMV file.");\r
fclose(movie_file);\r
return 0;\r
}\r
movie_data = malloc(movie_size);\r
if(movie_data == NULL) {\r
- sprintf(menuErrorMsg, "low memory.");\r
+ me_update_msg("low memory.");\r
fclose(movie_file);\r
return 0;\r
}\r
fread(movie_data, 1, movie_size, movie_file);\r
fclose(movie_file);\r
if (strncmp((char *)movie_data, "Gens Movie TEST", 15) != 0) {\r
- sprintf(menuErrorMsg, "Invalid GMV file.");\r
+ me_update_msg("Invalid GMV file.");\r
return 0;\r
}\r
dummy = try_rfn_cut(rom_fname) || try_rfn_cut(rom_fname);\r
if (!dummy) {\r
- sprintf(menuErrorMsg, "Could't find a ROM for movie.");\r
+ me_update_msg("Could't find a ROM for movie.");\r
return 0;\r
}\r
get_ext(rom_fname, ext);\r
PicoPatchLoad(rom_fname);\r
dummy = try_rfn_cut(rom_fname) || try_rfn_cut(rom_fname);\r
if (!dummy) {\r
- sprintf(menuErrorMsg, "Could't find a ROM to patch.");\r
+ me_update_msg("Could't find a ROM to patch.");\r
return 0;\r
}\r
get_ext(rom_fname, ext);\r
\r
rom = pm_open(used_rom_name);\r
if (!rom) {\r
- sprintf(menuErrorMsg, "Failed to open ROM/CD image");\r
+ me_update_msg("Failed to open ROM/CD image");\r
goto fail;\r
}\r
\r
if (cd_state < 0) {\r
- sprintf(menuErrorMsg, "Invalid CD image");\r
+ me_update_msg("Invalid CD image");\r
goto fail;\r
}\r
\r
rom_loaded = 0;\r
\r
if ( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) {\r
- if (ret == 2) sprintf(menuErrorMsg, "Out of memory");\r
- else if (ret == 3) sprintf(menuErrorMsg, "Read failed");\r
- else sprintf(menuErrorMsg, "PicoCartLoad() failed.");\r
- lprintf("%s\n", menuErrorMsg);\r
+ if (ret == 2) me_update_msg("Out of memory");\r
+ else if (ret == 3) me_update_msg("Read failed");\r
+ else me_update_msg("PicoCartLoad() failed.");\r
goto fail2;\r
}\r
pm_close(rom);\r
if (rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||\r
((*(unsigned char *)(rom_data+4)<<16)|(*(unsigned short *)(rom_data+6))) >= (int)rom_size) {\r
if (rom_data) free(rom_data);\r
- sprintf(menuErrorMsg, "Not a ROM selected.");\r
+ me_update_msg("Not a ROM selected.");\r
goto fail2;\r
}\r
\r
\r
lprintf("PicoCartInsert(%p, %d);\n", rom_data, rom_size);\r
if (PicoCartInsert(rom_data, rom_size)) {\r
- sprintf(menuErrorMsg, "Failed to load ROM.");\r
+ me_update_msg("Failed to load ROM.");\r
goto fail2;\r
}\r
\r
if (cd_state != CIT_NOT_CD) {\r
ret = Insert_CD(rom_fname, cd_state);\r
if (ret != 0) {\r
- sprintf(menuErrorMsg, "Insert_CD() failed, invalid CD image?");\r
- lprintf("%s\n", menuErrorMsg);\r
+ me_update_msg("Insert_CD() failed, invalid CD image?");\r
goto fail2;\r
}\r
}\r
}\r
}\r
\r
+ plat_validate_config();\r
+\r
// some sanity checks\r
- if (currentConfig.CPUclock < 10 || currentConfig.CPUclock > 4096) currentConfig.CPUclock = 200;\r
#ifdef PSP\r
+ /* TODO: mv to plat_validate_config() */\r
+ if (currentConfig.CPUclock < 10 || currentConfig.CPUclock > 4096) currentConfig.CPUclock = 200;\r
if (currentConfig.gamma < -4 || currentConfig.gamma > 16) currentConfig.gamma = 0;\r
if (currentConfig.gamma2 < 0 || currentConfig.gamma2 > 2) currentConfig.gamma2 = 0;\r
-#else\r
- if (currentConfig.gamma < 10 || currentConfig.gamma > 300) currentConfig.gamma = 100;\r
#endif\r
- if (currentConfig.volume < 0 || currentConfig.volume > 99) currentConfig.volume = 50;\r
-#ifdef __GP2X__\r
- // if volume keys are unbound, bind them to volume control\r
- if (!currentConfig.KeyBinds[23] && !currentConfig.KeyBinds[22]) {\r
- currentConfig.KeyBinds[23] = 1<<29; // vol up\r
- currentConfig.KeyBinds[22] = 1<<30; // vol down\r
- }\r
-#endif\r
- if (ret == 0) config_slot_current = config_slot;\r
+ if (currentConfig.volume < 0 || currentConfig.volume > 99)\r
+ currentConfig.volume = 50;\r
+\r
+ if (ret == 0)\r
+ config_slot_current = config_slot;\r
+\r
return (ret == 0);\r
}\r
\r
\r
#undef mk_text_out\r
\r
-#ifdef PSP\r
-#define MAX_COMBO_KEY 23\r
-#else\r
-#define MAX_COMBO_KEY 31\r
-#endif\r
-\r
-// FIXME\r
-void emu_findKeyBindCombos(void)\r
-{\r
- int act, u;\r
-\r
- // find out which keys and actions are combos\r
- kb_combo_keys = kb_combo_acts = 0;\r
- for (act = 0; act < 32; act++)\r
- {\r
- int keyc = 0, keyc2 = 0;\r
- if (act == 16 || act == 17) continue; // player2 flag\r
- if (act > 17)\r
- {\r
- for (u = 0; u <= MAX_COMBO_KEY; u++)\r
- if (currentConfig.KeyBinds[u] & (1 << act)) keyc++;\r
- }\r
- else\r
- {\r
- for (u = 0; u <= MAX_COMBO_KEY; u++)\r
- if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1\r
- (currentConfig.KeyBinds[u] & (1 << act))) keyc++;\r
- for (u = 0; u <= MAX_COMBO_KEY; u++)\r
- if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2\r
- (currentConfig.KeyBinds[u] & (1 << act))) keyc2++;\r
- if (keyc2 > keyc) keyc = keyc2;\r
- }\r
- if (keyc > 1)\r
- {\r
- // loop again and mark those keys and actions as combo\r
- for (u = 0; u <= MAX_COMBO_KEY; u++)\r
- {\r
- if (currentConfig.KeyBinds[u] & (1 << act)) {\r
- kb_combo_keys |= 1 << u;\r
- kb_combo_acts |= 1 << act;\r
- }\r
- }\r
- }\r
- }\r
-\r
- // printf("combo keys/acts: %08x %08x\n", kb_combo_keys, kb_combo_acts);\r
-}\r
-\r
\r
void emu_updateMovie(void)\r
{\r