\r
for (i = 0; i < count; i++)\r
{\r
- plat_get_root_dir(bios_path, sizeof(bios_path));\r
- strcat(bios_path, files[i]);\r
+ emu_make_path(bios_path, files[i], sizeof(bios_path) - 4);\r
strcat(bios_path, ".bin");\r
f = fopen(bios_path, "rb");\r
if (f) break;\r
if (ext) strcat(dst, ext);\r
}\r
\r
-static void make_config_cfg(char *cfg)\r
+void emu_make_path(char *buff, const char *end, int size)\r
{\r
- int len;\r
- len = plat_get_root_dir(cfg, 512);\r
- strncpy(cfg + len, PicoConfigFile, 512-6-1-len);\r
+ int pos, end_len;\r
+\r
+ end_len = strlen(end);\r
+ pos = plat_get_root_dir(buff, size);\r
+ strncpy(buff + pos, end, size - pos);\r
+ buff[size - 1] = 0;\r
+ if (pos + end_len > size - 1)\r
+ lprintf("Warning: path truncated: %s\n", buff);\r
+}\r
+\r
+static void make_config_cfg(char *cfg_buff_512)\r
+{\r
+ emu_make_path(cfg_buff_512, PicoConfigFile, 512-6);\r
if (config_slot != 0)\r
{\r
- char *p = strrchr(cfg, '.');\r
- if (p == NULL) p = cfg + strlen(cfg);\r
+ char *p = strrchr(cfg_buff_512, '.');\r
+ if (p == NULL)\r
+ p = cfg_buff_512 + strlen(cfg_buff_512);\r
sprintf(p, ".%i.cfg", config_slot);\r
}\r
- cfg[511] = 0;\r
+ cfg_buff_512[511] = 0;\r
}\r
\r
static void emu_setDefaultConfig(void)\r
}\r
\r
\r
-void emu_writelrom(void)\r
-{\r
- char cfg[512];\r
- make_config_cfg(cfg);\r
- config_writelrom(cfg);\r
-#ifndef NO_SYNC\r
- sync();\r
-#endif\r
-}\r
-\r
/* always using built-in font */\r
\r
#define mk_text_out(name, type, val) \\r
\r
void emu_update_input(void)\r
{\r
- unsigned int allActions[2] = { 0, 0 }, events;\r
- static unsigned int prevEvents = 0;\r
+ static int prev_events = 0;\r
+ int actions[IN_BINDTYPE_COUNT] = { 0, };\r
+ int pl_actions[2];\r
+ int events;\r
\r
- /* FIXME: player2 */\r
- allActions[0] = in_update();\r
+ in_update(actions);\r
\r
- PicoPad[0] = allActions[0] & 0xfff;\r
- PicoPad[1] = allActions[1] & 0xfff;\r
+ pl_actions[0] = actions[IN_BINDTYPE_PLAYER12];\r
+ pl_actions[1] = actions[IN_BINDTYPE_PLAYER12] >> 16;\r
\r
- if (allActions[0] & 0x7000) do_turbo(&PicoPad[0], allActions[0]);\r
- if (allActions[1] & 0x7000) do_turbo(&PicoPad[1], allActions[1]);\r
+ PicoPad[0] = pl_actions[0] & 0xfff;\r
+ PicoPad[1] = pl_actions[1] & 0xfff;\r
\r
- events = (allActions[0] | allActions[1]) & PEV_MASK;\r
+ if (pl_actions[0] & 0x7000)\r
+ do_turbo(&PicoPad[0], pl_actions[0]);\r
+ if (pl_actions[1] & 0x7000)\r
+ do_turbo(&PicoPad[1], pl_actions[1]);\r
+\r
+ events = actions[IN_BINDTYPE_EMU] & PEV_MASK;\r
\r
// volume is treated in special way and triggered every frame\r
if (events & (PEV_VOL_DOWN|PEV_VOL_UP))\r
plat_update_volume(1, events & PEV_VOL_UP);\r
\r
- if ((events ^ prevEvents) & PEV_FF) {\r
+ if ((events ^ prev_events) & PEV_FF) {\r
emu_set_fastforward(events & PEV_FF);\r
plat_update_volume(0, 0);\r
reset_timing = 1;\r
}\r
\r
- events &= ~prevEvents;\r
+ events &= ~prev_events;\r
\r
if (PicoAHW == PAHW_PICO)\r
run_events_pico(events);\r
if (movie_data)\r
update_movie();\r
\r
- prevEvents = (allActions[0] | allActions[1]) & PEV_MASK;\r
+ prev_events = actions[IN_BINDTYPE_EMU] & PEV_MASK;\r
}\r
\r
static void mkdir_path(char *path_with_reserve, int pos, const char *name)\r
\r
void emu_init(void)\r
{\r
- char dir[256];\r
+ char path[512];\r
int pos;\r
\r
/* make dirs for saves */\r
- pos = plat_get_root_dir(dir, sizeof(dir) - 4);\r
- mkdir_path(dir, pos, "mds");\r
- mkdir_path(dir, pos, "srm");\r
- mkdir_path(dir, pos, "brm");\r
+ pos = plat_get_root_dir(path, sizeof(path) - 4);\r
+ mkdir_path(path, pos, "mds");\r
+ mkdir_path(path, pos, "srm");\r
+ mkdir_path(path, pos, "brm");\r
+\r
+ make_config_cfg(path);\r
+ config_readlrom(path);\r
\r
PicoInit();\r
PicoMessage = plat_status_msg_busy_next;\r
SRam.changed = 0;\r
}\r
\r
- if (!(currentConfig.EmuOpt & EOPT_NO_AUTOSVCFG))\r
- emu_writelrom();\r
+ if (!(currentConfig.EmuOpt & EOPT_NO_AUTOSVCFG)) {\r
+ char cfg[512];\r
+ make_config_cfg(cfg);\r
+ config_writelrom(cfg);\r
+#ifndef NO_SYNC\r
+ sync();\r
+#endif\r
+ }\r
\r
PicoExit();\r
}\r