static const char *file_ext[] = { ".gba", ".bin", ".zip", NULL };
-#ifdef ARM_ARCH
-void ChangeWorkingDirectory(char *exe)
+#ifndef PSP_BUILD
+static void ChangeWorkingDirectory(char *exe)
{
#ifndef _WIN32_WCE
char *s = strrchr(exe, '/');
}
#endif
}
+
+static void switch_to_romdir(void)
+{
+ char buff[256];
+ int r;
+
+ file_open(romdir_file, "romdir.txt", read);
+
+ if(file_check_valid(romdir_file))
+ {
+ r = file_read(romdir_file, buff, sizeof(buff) - 1);
+ if (r > 0)
+ {
+ buff[r] = 0;
+ while (r > 0 && isspace(buff[r-1]))
+ buff[--r] = 0;
+ chdir(buff);
+ }
+ file_close(romdir_file);
+ }
+}
+
+static void save_romdir(void)
+{
+ char buff[512];
+
+ snprintf(buff, sizeof(buff), "%s" PATH_SEPARATOR "romdir.txt", main_path);
+ file_open(romdir_file, buff, write);
+
+ if(file_check_valid(romdir_file))
+ {
+ if (getcwd(buff, sizeof(buff)))
+ {
+ file_write(romdir_file, buff, strlen(buff));
+ }
+ file_close(romdir_file);
+ }
+}
+#else
+void ChangeWorkingDirectory(char *exe) {}
+static void switch_to_romdir(void) {}
+static void save_romdir(void) {}
#endif
void init_main()
int main(int argc, char *argv[])
{
+ char bios_filename[512];
+ int ret;
+
#ifdef PSP_BUILD
sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0,
vblank_interrupt_handler, NULL);
// Copy the directory path of the executable into main_path
-#ifdef ARM_ARCH
// ChangeWorkingDirectory will null out the filename out of the path
ChangeWorkingDirectory(argv[0]);
-#endif
getcwd(main_path, 512);
init_video();
-#ifdef GP2X_BUILD
- char bios_filename[512];
- sprintf(bios_filename, "%s/%s", main_path, "gba_bios.bin");
- if(load_bios(bios_filename) == -1)
-#else
- if(load_bios("gba_bios.bin") == -1)
-#endif
+ sprintf(bios_filename, "%s" PATH_SEPARATOR "%s", main_path, "gba_bios.bin");
+ ret = load_bios(bios_filename);
+ if (ret != 0)
+ ret = load_bios("gba_bios.bin");
+ if (ret != 0)
{
gui_action_type gui_action = CURSOR_NONE;
debug_screen_start();
+ debug_screen_printl(" ");
debug_screen_printl("Sorry, but gpSP requires a Gameboy Advance BIOS ");
debug_screen_printl("image to run correctly. Make sure to get an ");
debug_screen_printl("authentic one, it'll be exactly 16384 bytes large ");
debug_screen_printl(" ");
debug_screen_printl("When you do get it name it gba_bios.bin and put it");
#ifdef PND_BUILD
- debug_screen_printl("in <CD card>/pandora/appdata/gpsp/ . ");
+ debug_screen_printl("in <SD card>/pandora/appdata/gpsp/ . ");
#else
debug_screen_printl("in the same directory as gpSP. ");
#endif
}
init_main();
- init_sound();
+ init_sound(1);
init_input();
else
{
char load_filename[512];
+ switch_to_romdir();
if(load_file(file_ext, load_filename) == -1)
{
menu(copy_screen());
frame_ticks++;
#ifdef PC_BUILD
- printf("frame update (%x), %d instructions total, %d RAM flushes\n",
+/* printf("frame update (%x), %d instructions total, %d RAM flushes\n",
reg[REG_PC], instruction_count - last_frame, flush_ram_count);
last_frame = instruction_count;
-
+*/
/* printf("%d gbc audio updates\n", gbc_update_count);
printf("%d oam updates\n", oam_update_count); */
gbc_update_count = 0;
void quit()
{
+ save_romdir();
+
if(!update_backup_flag)
update_backup_force();
strcpy(dot_position, extension);
}
+// make path: <main_path>/<romname>.<ext>
+void make_rpath(char *buff, size_t size, const char *ext)
+{
+ char *p;
+ p = strrchr(gamepak_filename, PATH_SEPARATOR_CHAR);
+ if (p == NULL)
+ p = gamepak_filename;
+
+ snprintf(buff, size, "%s/%s", main_path, p);
+ p = strrchr(buff, '.');
+ if (p != NULL)
+ strcpy(p, ext);
+}
+
#define main_savestate_builder(type) \
void main_##type##_savestate(file_tag_type savestate_file) \
{ \