+ 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
+ strcpy(path_with_reserve + pos, name);\r
+ if (plat_is_dir(path_with_reserve))\r
+ return;\r
+ if (mkdir(path_with_reserve, 0777) < 0)\r
+ lprintf("failed to create: %s\n", path_with_reserve);\r
+}\r
+\r
+void emu_init(void)\r
+{\r
+ char path[512];\r
+ int pos;\r
+\r
+ /* make dirs for saves */\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
+ PicoMCDopenTray = emu_msg_tray_open;\r
+ PicoMCDcloseTray = menu_loop_tray;\r
+}\r
+\r
+void emu_finish(void)\r
+{\r
+ // save SRAM\r
+ if ((currentConfig.EmuOpt & EOPT_EN_SRAM) && SRam.changed) {\r
+ emu_save_load_game(0, 1);\r
+ SRam.changed = 0;\r
+ }\r
+\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