static SDL_bool load_glproc() { static int init=0; CONF_ITEM *cf_libgl=cf_get_item_by_name("libglpath"); if (init) return SDL_TRUE; init=1; if (SDL_GL_LoadLibrary(CF_STR(cf_libgl))==-1) { printf("Unable to load OpenGL library: %s\n", CF_STR(cf_libgl)); return SDL_FALSE; } pglClearColor = SDL_GL_GetProcAddress("glClearColor"); pglClear = SDL_GL_GetProcAddress("glClear"); pglEnable = SDL_GL_GetProcAddress("glEnable"); pglViewport = SDL_GL_GetProcAddress("glViewport"); pglTexParameteri = SDL_GL_GetProcAddress("glTexParameteri"); pglPixelStorei = SDL_GL_GetProcAddress("glPixelStorei"); pglTexImage2D = SDL_GL_GetProcAddress("glTexImage2D"); pglBegin = SDL_GL_GetProcAddress("glBegin"); pglEnd = SDL_GL_GetProcAddress("glEnd"); pglTexCoord2f = SDL_GL_GetProcAddress("glTexCoord2f"); pglVertex2f = SDL_GL_GetProcAddress("glVertex2f"); return SDL_TRUE; }
void cf_reset_to_default(void) { int i,j; CONF_ITEM *cf; for (i = 0; i < 128; i++) { for (j = 0; j < cf_hash[i].nb_item; j++) { cf = cf_hash[i].conf[j]; if (cf && !cf->modified && !(cf->flags & CF_SETBYCMD)) { switch (cf->type) { case CFT_INT: CF_VAL(cf) = cf->data.dt_int.default_val; break; case CFT_BOOLEAN: CF_BOOL(cf) = cf->data.dt_bool.default_bool; break; case CFT_STRING: CF_STR(cf)=rstrcpy(CF_STR(cf), cf->data.dt_str.default_str, 254); break; case CFT_ARRAY: memcpy(cf->data.dt_array.array, cf->data.dt_array.default_array, CF_ARRAY_SIZE(cf) * sizeof (int)); //read_array(CF_ARRAY(cf), val, CF_ARRAY_SIZE(cf)); break; default: break; } } } } }
char* cf_parse_cmd_line(int argc, char *argv[]) { int c; CONF_ITEM *cf; option_index = optind = 0; #ifdef WII return NULL; #endif while ((c = getopt_long(argc, argv, shortopt, longopt, &option_index)) != EOF) { //if (c != 0) { // printf("c=%d\n",c); cf = cf_get_item_by_val(c&0xFFF); if (cf) { cf->flags |= CF_SETBYCMD; // printf("flags %s set on cmd line\n", cf->name); switch (cf->type) { case CFT_INT: CF_VAL(cf) = atoi(optarg); break; case CFT_BOOLEAN: if (c & 0x1000) CF_BOOL(cf) = 0; else CF_BOOL(cf) = 1; break; case CFT_STRING: strcpy(CF_STR(cf), optarg); //printf("conf %s %s\n",CF_STR(cf),optarg); break; case CFT_ARRAY: read_array(CF_ARRAY(cf), optarg, CF_ARRAY_SIZE(cf)); break; case CFT_ACTION_ARG: strcpy(CF_STR(cf), optarg); if (cf->action) { exit(cf->action(cf)); } break; case CFT_ACTION: if (cf->action) { exit(cf->action(cf)); } break; case CFT_STR_ARRAY: /* TODO */ break; } //} } } cf_cache_conf(); if (optind >= argc) return NULL; return strdup(argv[optind]); }
static WIDGET* init_game_gui(void) { WIDGET *frame,*label,*glist,*button,*pix_frame; char *ld_label_str; frame=(WIDGET*)gui_frame_create(NULL,2,19,300,203,FRAME_SHADOW_ETCHED_IN,"Load game"); /* Game list selection */ glist=(WIDGET*)gui_slist_create(NULL,158,8,140,181); gui_container_add(GUI_CONTAINER(frame),glist); GUI_SLIST(glist)->sel_double_click=game_list_double_click; GUI_SLIST(glist)->sel_change=game_list_sel_change; #ifdef __QNXNTO__ GUI_SLIST(glist)->l=create_list_from_dir("shared/misc/gngeo/ROMS/"); glist->pdata1=strdup("shared/misc/gngeo/ROMS/"); #else GUI_SLIST(glist)->l=create_list_from_dir(CF_STR(cf_get_item_by_name("rompath"))); glist->pdata1=strdup(CF_STR(cf_get_item_by_name("rompath"))); #endif GUI_SLIST(glist)->get_label=get_glist_label; gui_slist_update(GUI_SLIST(glist)); /* Loading progress bar */ ld_pbar=(WIDGET*)gui_progressbar_create(NULL,107,191,191,10); gui_container_add(GUI_CONTAINER(frame),ld_pbar); ld_label=(WIDGET*)gui_label_create(NULL,20,193,1,1,""); gui_container_add(GUI_CONTAINER(frame),ld_label); /* some Check button */ button=(WIDGET*)gui_check_button_create(NULL,4,179,150,10,"Show only NeoGeo's rom"); GUI_CHECK_BUTTON(button)->toggle=game_list_show_rom_only_toggle; button->pdata1=glist; gui_container_add(GUI_CONTAINER(frame),button); gui_widget_add_keyfocus(desktop,button); /* We want glist after check button in the key focus list */ gui_widget_add_keyfocus(desktop,GUI_SLIST(glist)->text); /* Game information */ pix_frame=(WIDGET*)gui_frame_create(NULL,2,8,154,114,FRAME_SHADOW_IN,NULL); gui_container_add(GUI_CONTAINER(frame),pix_frame); game_pix=(WIDGET*)gui_gpix_create(NULL,1,1,152,112); screenshots=NULL; gui_gpix_set_pixmap(GUI_GPIX(game_pix),screenshots); gui_container_add(GUI_CONTAINER(pix_frame),game_pix); info_label=(WIDGET*)gui_label_create(NULL,5,125,1,1,""); gui_container_add(GUI_CONTAINER(frame),info_label); return frame; }
void cf_cache_conf(void) { char *country; char *system; /* cache some frequently used conf item */ // printf("Update Conf Cache, sample rate=%d -> %d\n",conf.sample_rate,CF_VAL(cf_get_item_by_name("samplerate"))); conf.rendermode = CF_VAL(cf_get_item_by_name("rendermode")); conf.vpad_alpha = CF_VAL(cf_get_item_by_name("vpad_alpha")); conf.wiimote = CF_VAL(cf_get_item_by_name("wiimote")); conf.sound = CF_BOOL(cf_get_item_by_name("sound")); conf.vsync = CF_BOOL(cf_get_item_by_name("vsync")); conf.sample_rate = CF_VAL(cf_get_item_by_name("samplerate")); conf.debug = CF_BOOL(cf_get_item_by_name("debug")); conf.raster = CF_BOOL(cf_get_item_by_name("raster")); conf.pal = CF_BOOL(cf_get_item_by_name("pal")); conf.autoframeskip = CF_BOOL(cf_get_item_by_name("autoframeskip")); conf.show_fps = CF_BOOL(cf_get_item_by_name("showfps")); conf.sleep_idle = CF_BOOL(cf_get_item_by_name("sleepidle")); conf.screen320 = CF_BOOL(cf_get_item_by_name("screen320")); #ifdef GP2X conf.accurate940 = CF_BOOL(cf_get_item_by_name("940sync")); #endif country = CF_STR(cf_get_item_by_name("country")); system = CF_STR(cf_get_item_by_name("system")); if (!strcmp(system, "unibios")) { conf.system = SYS_UNIBIOS; } else { if (!strcmp(system, "home")) { conf.system = SYS_HOME; } else { conf.system = SYS_ARCADE; } } if (!strcmp(country, "japan")) { conf.country = CTY_JAPAN; } else if (!strcmp(country, "usa")) { conf.country = CTY_USA; } else if (!strcmp(country, "asia")) { conf.country = CTY_ASIA; } else { conf.country = CTY_EUROPE; } }
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; }
char *get_zip_name(char *name) { char *zip; char *path = CF_STR(cf_get_item_by_name("rompath")); if (file_is_zip(name)) { zip=malloc(strlen(name)+1); strcpy(zip,name); } else { int len = strlen(path) + strlen(name) + 6; zip = malloc(len); sprintf(zip,"%s/%s.zip",path,name); } return zip; }
bool init_event(void) { int i; // printf("sizeof joymap=%d nb_joy=%d\n",sizeof(JOYMAP),conf.nb_joy); jmap=calloc(sizeof(JOYMAP),1); #ifdef WII conf.nb_joy = 4; #else conf.nb_joy = SDL_NumJoysticks(); #endif if( conf.nb_joy>0) { if (conf.joy!=NULL) free(conf.joy); conf.joy=calloc(sizeof(SDL_Joystick*),conf.nb_joy); SDL_JoystickEventState(SDL_ENABLE); jmap->jbutton=calloc(conf.nb_joy,sizeof(struct BUT_MAP*)); jmap->jaxe= calloc(conf.nb_joy,sizeof(struct BUT_MAPJAXIS*)); jmap->jhat= calloc(conf.nb_joy,sizeof(struct BUT_MAP*)); /* Open all the available joystick */ for (i=0;i<conf.nb_joy;i++) { conf.joy[i]=SDL_JoystickOpen(i); /* printf("joy \"%s\", axe:%d, button:%d\n", SDL_JoystickName(i), SDL_JoystickNumAxes(conf.joy[i])+ (SDL_JoystickNumHats(conf.joy[i]) * 2), SDL_JoystickNumButtons(conf.joy[i]));*/ jmap->jbutton[i]=calloc(SDL_JoystickNumButtons(conf.joy[i]),sizeof(struct BUT_MAP)); jmap->jaxe[i]=calloc(SDL_JoystickNumAxes(conf.joy[i]),sizeof(struct BUT_MAPJAXIS)); jmap->jhat[i]=calloc(SDL_JoystickNumHats(conf.joy[i]),sizeof(struct BUT_MAP)); } } create_joymap_from_string(1,CF_STR(cf_get_item_by_name("p1control"))); create_joymap_from_string(2,CF_STR(cf_get_item_by_name("p2control"))); return true; }
bool cf_open_file(char *filename) { /* if filename==NULL, we use the default one: $HOME/.gngeo/gngeorc */ FILE *f; int i = 0; char *buf=NULL; char *name=NULL, *ptr; CONF_ITEM *cf; f = fopen(filename, "rb"); if (! f) { printf("ERROR: Unable to open %s\n",filename); return false; } buf=calloc(8192,sizeof(char)); while (!feof(f)) { i = 0; my_fgets(buf, 8190, f); if (discard_line(buf)) continue; ptr=get_token(buf, " =", &name); cf = cf_get_item_by_name(name); if (cf && !(cf->flags & CF_SETBYCMD) && (!cf->modified)) { switch (cf->type) { case CFT_INT: CF_VAL(cf) = atoi(ptr); break; case CFT_BOOLEAN: CF_BOOL(cf) = (strcasecmp(ptr, "true") == 0 ? true : false); break; case CFT_STRING: printf("ST: %s\n",ptr); CF_STR(cf)=rstrcpy(CF_STR(cf), ptr, 8190); break; case CFT_ARRAY: read_array(CF_ARRAY(cf), ptr, CF_ARRAY_SIZE(cf)); break; case CFT_ACTION: case CFT_ACTION_ARG: /* action are not available in the conf file */ break; case CFT_STR_ARRAY: CF_STR_ARRAY(cf) = read_str_array(ptr, &CF_STR_ARRAY_SIZE(cf)); break; } } else { /*printf("Unknow option %s\n",name);*/ /* unknow option...*/ } } if (name) free(name); if (buf) free(buf); cf_cache_conf(); return true; }
bool cf_save_file(char *filename, int flags) { char *conf_file = NULL; char *conf_file_dst; FILE *f; FILE *f_dst; int i = 0, j, a; char buf[512]; char *name=NULL, *ptr; CONF_ITEM *cf; if (! sstrlen(filename)) conf_file=cf_default_path(conf_file, "gngeorc", ""); else conf_file=rstrcpy(conf_file, filename, 1024); conf_file_dst = alloca(strlen(conf_file) + 4); sprintf(conf_file_dst, "%s.t", conf_file); if ((f_dst = fopen(conf_file_dst, "w")) == 0) { //printf("Unable to open %s\n",conf_file); if (conf_file) free(conf_file); return false; } if ((f = fopen(conf_file, "rb"))) { //printf("Loading current .cf\n"); while (!feof(f)) { i = 0; my_fgets(buf, 510, f); if (discard_line(buf)) { fprintf(f_dst, "%s\n", buf); continue; } //this is an odd approach, seeks to replace existing config //items in the order they exist in config file? ptr=get_token(buf, " ", &name); cf = cf_get_item_by_name(name); if (cf) { if (cf->modified) { cf->modified = 0; switch (cf->type) { case CFT_INT: fprintf(f_dst, "%s %d\n", cf->name, CF_VAL(cf)); break; case CFT_BOOLEAN: if (CF_BOOL(cf)) fprintf(f_dst, "%s true\n", cf->name); else fprintf(f_dst, "%s false\n", cf->name); break; case CFT_STRING: fprintf(f_dst, "%s %s\n", cf->name, CF_STR(cf)); break; case CFT_ARRAY: fprintf(f_dst, "%s ", cf->name); for (a = 0; a < CF_ARRAY_SIZE(cf) - 1; a++) fprintf(f_dst, "%d,", CF_ARRAY(cf)[a]); fprintf(f_dst, "%d\n", CF_ARRAY(cf)[a]); break; case CFT_ACTION: case CFT_ACTION_ARG: break; case CFT_STR_ARRAY: printf("TODO: Save CFT_STR_ARRAY\n"); break; } } else fprintf(f_dst, "%s\n", buf); } } fclose(f); } /* Now save options that were not in the previous file */ for (i = 0; i < 128; i++) { for (j = 0; j < cf_hash[i].nb_item; j++) { cf = cf_hash[i].conf[j]; //printf("Option %s %d\n",cf->name,cf->modified); if (cf->modified!=0) { cf->modified=0; switch (cf->type) { case CFT_INT: fprintf(f_dst, "%s %d\n", cf->name, CF_VAL(cf)); break; case CFT_BOOLEAN: if (CF_BOOL(cf)) fprintf(f_dst, "%s true\n", cf->name); else fprintf(f_dst, "%s false\n", cf->name); break; case CFT_STRING: fprintf(f_dst, "%s %s\n", cf->name, CF_STR(cf)); break; case CFT_ARRAY: fprintf(f_dst, "%s ", cf->name); for (a = 0; a < CF_ARRAY_SIZE(cf) - 1; a++) fprintf(f_dst, "%d,", CF_ARRAY(cf)[a]); fprintf(f_dst, "%d\n", CF_ARRAY(cf)[a]); break; case CFT_ACTION: case CFT_ACTION_ARG: /* action are not available in the conf file */ break; case CFT_STR_ARRAY: printf("TODO: Save CFT_STR_ARRAY\n"); break; } } } } fclose(f_dst); remove(conf_file); rename(conf_file_dst, conf_file); if (name) free(name); if (conf_file) free(conf_file); return 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; }
bool cf_open_file(char *filename) { /* if filename==NULL, we use the default one: $HOME/Documents/gngeorc */ char *conf_file = filename; FILE *f; int i = 0; char buf[512]; char name[32]; char val[255]; CONF_ITEM *cf; if (!conf_file) { #ifdef EMBEDDED_FS int len = strlen("gngeorc") + strlen(ROOTPATH"conf/") + 1; conf_file = (char *) alloca(len * sizeof (char)); sprintf(conf_file, ROOTPATH"conf/gngeorc"); #elif __AMIGA__ int len = strlen("gngeorc") + strlen("/PROGDIR/data/") + 1; conf_file = (char *) alloca(len * sizeof (char)); sprintf(conf_file, "/PROGDIR/data/gngeorc"); #else int len = strlen("gngeorc") + strlen(getenv("HOME")) + strlen("/Documents/") + 1; conf_file = (char *) alloca(len * sizeof (char)); sprintf(conf_file, "%s/Documents/gngeorc", getenv("HOME")); #endif } if ((f = fopen(conf_file, "rb")) == 0) { //printf("Unable to open %s\n",conf_file); return false; } while (!feof(f)) { i = 0; my_fgets(buf, 510, f); if (discard_line(buf)) continue; /* TODO: Verify this on Win32 */ sscanf(buf, "%s %s", name, val); //sscanf(buf, "%s ", name); //strncpy(val,buf+strlen(name)+1,254); // printf("%s|%s|\n",name,val); cf = cf_get_item_by_name(name); if (cf && !(cf->flags & CF_SETBYCMD) && (!cf->modified)) { // printf("Option %s\n",cf->name); switch (cf->type) { case CFT_INT: CF_VAL(cf) = atoi(val); // printf("got val: %d\n",CF_VAL(cf)); break; case CFT_BOOLEAN: CF_BOOL(cf) = (strcasecmp(val, "true") == 0 ? true : false); break; case CFT_STRING: strncpy(CF_STR(cf), val, 254); break; case CFT_ARRAY: read_array(CF_ARRAY(cf), val, CF_ARRAY_SIZE(cf)); break; case CFT_ACTION: case CFT_ACTION_ARG: /* action are not available in the conf file */ break; case CFT_STR_ARRAY: CF_STR_ARRAY(cf) = read_str_array(val, &CF_STR_ARRAY_SIZE(cf)); break; } } else { /*printf("Unknow option %s\n",name);*/ /* unknow option...*/ } } cf_cache_conf(); return true; }
bool cf_save_file(char *filename, int flags) { char *conf_file = filename; char *conf_file_dst; FILE *f; FILE *f_dst; int i = 0, j, a; char buf[512]; char name[32]; char val[255]; CONF_ITEM *cf; if (!conf_file) { #ifdef EMBEDDED_FS int len = strlen("gngeorc") + strlen(ROOTPATH"conf/") + 1; conf_file = (char *) alloca(len * sizeof (char)); sprintf(conf_file, ROOTPATH"conf/gngeorc"); #elif __AMIGA__ int len = strlen("gngeorc") + strlen("/PROGDIR/data/") + 1; conf_file = (char *) alloca(len * sizeof (char)); sprintf(conf_file, "/PROGDIR/data/gngeorc"); #else /* POSIX */ int len = strlen("gngeorc") + strlen(getenv("HOME")) + strlen("/Documents/") + 1; conf_file = (char *) alloca(len * sizeof (char)); sprintf(conf_file, "%s/Documents/gngeorc", getenv("HOME")); #endif } conf_file_dst = alloca(strlen(conf_file) + 4); sprintf(conf_file_dst, "%s.t", conf_file); if ((f_dst = fopen(conf_file_dst, "w")) == 0) { //printf("Unable to open %s\n",conf_file); return false; } if ((f = fopen(conf_file, "rb"))) { //printf("Loading current .cf\n"); while (!feof(f)) { i = 0; my_fgets(buf, 510, f); if (discard_line(buf)) { fprintf(f_dst, "%s\n", buf); continue; } //sscanf(buf, "%s %s", name, val); sscanf(buf, "%s ", name); strncpy(val, buf + strlen(name) + 1, 254); cf = cf_get_item_by_name(name); if (cf) { if (cf->modified) { cf->modified = 0; switch (cf->type) { case CFT_INT: fprintf(f_dst, "%s %d\n", cf->name, CF_VAL(cf)); break; case CFT_BOOLEAN: if (CF_BOOL(cf)) fprintf(f_dst, "%s true\n", cf->name); else fprintf(f_dst, "%s false\n", cf->name); break; case CFT_STRING: fprintf(f_dst, "%s %s\n", cf->name, CF_STR(cf)); break; case CFT_ARRAY: fprintf(f_dst, "%s ", cf->name); for (a = 0; a < CF_ARRAY_SIZE(cf) - 1; a++) fprintf(f_dst, "%d,", CF_ARRAY(cf)[a]); fprintf(f_dst, "%d\n", CF_ARRAY(cf)[a]); break; case CFT_ACTION: case CFT_ACTION_ARG: break; case CFT_STR_ARRAY: printf("TODO: Save CFT_STR_ARRAY\n"); break; } } else fprintf(f_dst, "%s\n", buf); } } fclose(f); } /* Now save options that were not in the previous file */ for (i = 0; i < 128; i++) { for (j = 0; j < cf_hash[i].nb_item; j++) { cf = cf_hash[i].conf[j]; //printf("Option %s %d\n",cf->name,cf->modified); if (cf->modified!=0) { cf->modified=0; switch (cf->type) { case CFT_INT: fprintf(f_dst, "%s %d\n", cf->name, CF_VAL(cf)); break; case CFT_BOOLEAN: if (CF_BOOL(cf)) fprintf(f_dst, "%s true\n", cf->name); else fprintf(f_dst, "%s false\n", cf->name); break; case CFT_STRING: fprintf(f_dst, "%s %s\n", cf->name, CF_STR(cf)); break; case CFT_ARRAY: fprintf(f_dst, "%s ", cf->name); for (a = 0; a < CF_ARRAY_SIZE(cf) - 1; a++) fprintf(f_dst, "%d,", CF_ARRAY(cf)[a]); fprintf(f_dst, "%d\n", CF_ARRAY(cf)[a]); break; case CFT_ACTION: case CFT_ACTION_ARG: /* action are not available in the conf file */ break; case CFT_STR_ARRAY: printf("TODO: Save CFT_STR_ARRAY\n"); break; } } } } fclose(f_dst); remove(conf_file); rename(conf_file_dst, conf_file); return true; }
void open_bios(void) { FILE *f; char *romfile; char *path = CF_STR(cf_get_item_by_name("rompath"));//conf.rom_path; int len = strlen(path) + 15; if (conf.game!=NULL) free_bios_memory(); /* allocation de la ram */ memory.ram = (Uint8 *) malloc(0x10000); memset(memory.ram,0,0x10000); memory.sfix_board = (Uint8 *) malloc(0x20000); memory.ng_lo = (Uint8 *) malloc(0x10000); /* partie video */ memory.pal1 = (Uint8 *) malloc(0x2000); memory.pal2 = (Uint8 *) malloc(0x2000); memory.pal_pc1 = (Uint8 *) malloc(0x2000); memory.pal_pc2 = (Uint8 *) malloc(0x2000); memset(memory.video, 0, 0x20000); romfile = (char *) malloc(len); memset(romfile, 0, len); if (!conf.special_bios) { memory.bios = (Uint8 *) malloc(0x20000); memory.bios_size=0x20000; /* try new bios */ if (conf.system==SYS_HOME) { sprintf(romfile, "%s/aes-bios.bin", path); } else { if (conf.country==CTY_JAPAN) { sprintf(romfile, "%s/vs-bios.rom", path); } else if (conf.country==CTY_USA) { sprintf(romfile, "%s/usa_2slt.bin", path); } else if (conf.country==CTY_ASIA) { sprintf(romfile, "%s/asia-s3.rom", path); } else { sprintf(romfile, "%s/sp-s2.sp1", path); } } f = fopen(romfile, "rb"); if (f == NULL) { printf("Can't find %s\n", romfile); exit(1); } fread(memory.bios, 1, 0x20000, f); fclose(f); } sprintf(romfile, "%s/ng-sfix.rom", path); f = fopen(romfile, "rb"); if (f == NULL) { /* try new bios */ sprintf(romfile, "%s/sfix.sfx", path); f = fopen(romfile, "rb"); if (f == NULL) { printf("Can't find %s\n", romfile); exit(1); } } fread(memory.sfix_board, 1, 0x20000, f); fclose(f); sprintf(romfile, "%s/ng-lo.rom", path); f = fopen(romfile, "rb"); if (f == NULL) { /* try new bios */ sprintf(romfile, "%s/000-lo.lo", path); f = fopen(romfile, "rb"); if (f == NULL) { printf("Can't find %s\n", romfile); exit(1); } } fread(memory.ng_lo, 1, 0x10000, f); fclose(f); /* convert bios fix char */ convert_all_char(memory.sfix_board, 0x20000, memory.fix_board_usage); fix_usage = memory.fix_board_usage; current_pal = memory.pal1; current_fix = memory.sfix_board; current_pc_pal = (Uint16 *) memory.pal_pc1; free(romfile); }