SDL_bool init_game(char *rom_name) { DRIVER *dr; char *drconf,*gpath; dr=dr_get_by_name(rom_name); if (!dr) { #ifdef USE_GUI gui_error_box(20,80,264,60, "Error!","No valid romset found for\n%s\n", file_basename(rom_name)); #else printf("No valid romset found for %s\n",rom_name); #endif return SDL_FALSE; } if (conf.game!=NULL) { save_nvram(conf.game); if (conf.sound) { close_sdl_audio(); YM2610_sh_stop(); streams_sh_stop(); } free_game_memory(); } /* open transpack if need */ trans_pack_open(CF_STR(cf_get_item_by_name("transpack"))); //open_rom(rom_name); if (dr_load_game(dr,rom_name)==SDL_FALSE) { #ifdef USE_GUI gui_error_box(20,80,264,60, "Error!","Couldn't load\n%s\n", file_basename(rom_name)); #else printf("Can't load %s\n",rom_name); #endif return SDL_FALSE; } /* per game config */ gpath=get_gngeo_dir(); drconf=alloca(strlen(gpath)+strlen(dr->name)+strlen(".cf")+1); sprintf(drconf,"%s%s.cf",gpath,dr->name); cf_open_file(drconf); open_bios(); open_nvram(conf.game); init_sdl(); sdl_set_title(conf.game); init_neo(conf.game); if (conf.sound) init_sdl_audio(); return SDL_TRUE; }
int main(int argc, char *argv[]) { char *rom_name; #ifdef __AMIGA__ BPTR file_lock = GetProgramDir(); SetProgramDir(file_lock); #endif signal(SIGSEGV, catch_me); #ifdef WII // SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE); fatInitDefault(); #endif cf_init(); /* must be the first thing to do */ cf_init_cmd_line(); cf_open_file(NULL); /* Open Default configuration file */ rom_name=cf_parse_cmd_line(argc,argv); /* print effect/blitter list if asked by user */ if (!strcmp(CF_STR(cf_get_item_by_name("effect")),"help")) { print_effect_list(); exit(0); } if (!strcmp(CF_STR(cf_get_item_by_name("blitter")),"help")) { print_blitter_list(); exit(0); } init_sdl(); /* GP2X stuff */ #ifdef GP2X gp2x_init(); #endif if (gn_init_skin()!=SDL_TRUE) { printf("Can't load skin...\n"); exit(1); } reset_frame_skip(); if (conf.debug) conf.sound=0; /* Launch the specified game, or the rom browser if no game was specified*/ if (!rom_name) { // rom_browser_menu(); run_menu(); printf("GAME %s\n",conf.game); if (conf.game==NULL) return 0; } else { if (init_game(rom_name)!=SDL_TRUE) { printf("Can't init %s...\n",rom_name); exit(1); } } /* If asked, do a .gno dump and exit*/ if (CF_BOOL(cf_get_item_by_name("dump"))) { char dump[8+4+1]; sprintf(dump,"%s.gno",rom_name); dr_save_gno(&memory.rom,dump); close_game(); return 0; } if (conf.debug) debug_loop(); else main_loop(); close_game(); return 0; }