/*************************************************************************** Initialize the emulated machine (load the roms, initialize the various subsystems...). Returns 0 if successful. ***************************************************************************/ int init_machine(void) { int i; /* LBO 042400 start */ if (uistring_init (options.language_file) != 0) goto out; /* LBO 042400 end */ if (code_init() != 0) goto out; for (i = 0;i < MAX_MEMORY_REGIONS;i++) { Machine->memory_region[i] = 0; Machine->memory_region_length[i] = 0; Machine->memory_region_type[i] = 0; } if (gamedrv->input_ports) { Machine->input_ports = input_port_allocate(gamedrv->input_ports); if (!Machine->input_ports) goto out_code; Machine->input_ports_default = input_port_allocate(gamedrv->input_ports); if (!Machine->input_ports_default) { input_port_free(Machine->input_ports); Machine->input_ports = 0; goto out_code; } } #ifdef MESS if (!gamedrv->rom) { logerror("Going to load_next tag\n"); goto load_next; } #endif if (readroms() != 0) goto out_free; #ifdef MESS load_next: if (init_devices(gamedrv)) goto out_free; #endif /* Mish: Multi-session safety - set spriteram size to zero before memory map is set up */ spriteram_size=spriteram_2_size=0; /* first of all initialize the memory handlers, which could be used by the */ /* other initialization routines */ cpu_init(); /* load input ports settings (keys, dip switches, and so on) */ settingsloaded = load_input_port_settings(); if( !memory_init() ) goto out_free; if (gamedrv->driver_init) (*gamedrv->driver_init)(); return 0; out_free: input_port_free(Machine->input_ports); Machine->input_ports = 0; input_port_free(Machine->input_ports_default); Machine->input_ports_default = 0; out_code: code_close(); out: return 1; }
/*************************************************************************** Initialize the emulated machine (load the roms, initialize the various subsystems...). Returns 0 if successful. ***************************************************************************/ int init_machine(const char *gamename,int argc,char **argv) { int i; frameskip = 0; for (i = 1;i < argc;i++) { if (stricmp(argv[i],"-frameskip") == 0) { i++; if (i < argc) { frameskip = atoi(argv[i]); if (frameskip < 0) frameskip = 0; if (frameskip > 3) frameskip = 3; } } } i = 0; while (drivers[i] && stricmp(gamename,drivers[i]->name) != 0) i++; if (drivers[i] == 0) { printf("game \"%s\" not supported\n",gamename); return 1; } Machine->gamedrv = gamedrv = drivers[i]; Machine->drv = drv = gamedrv->drv; if (readroms(gamedrv->rom,gamename) != 0) return 1; RAM = Machine->memory_region[drv->cpu[0].memory_region]; ROM = RAM; /* decrypt the ROMs if necessary */ if (gamedrv->rom_decode) { int j; for (j = 0;j < 0x10000;j++) RAM[j] = (*gamedrv->rom_decode)(j); } if (gamedrv->opcode_decode) { int j; /* find the first avaialble memory region pointer */ j = 0; while (Machine->memory_region[j]) j++; if ((ROM = (unsigned char *)malloc(0x10000)) == 0) return 1; Machine->memory_region[j] = ROM; for (j = 0;j < 0x10000;j++) ROM[j] = (*gamedrv->opcode_decode)(j); } /* read audio samples if available */ Machine->samples = readsamples(gamedrv->samplenames,gamename); if (*drv->init_machine && (*drv->init_machine)(gamename) != 0) return 1; if (*drv->vh_init && (*drv->vh_init)(gamename) != 0) return 1; if (*drv->sh_init && (*drv->sh_init)(gamename) != 0) return 1; return 0; }