static void display_rom_load_results(rom_load_data *romdata) { int region; /* final status display */ display_loading_rom_message(NULL, romdata); /* if we had errors, they are fatal */ if (romdata->errors != 0) { /* clean up any regions */ for (region = 0; region < MAX_MEMORY_REGIONS; region++) free_memory_region(Machine, region); /* create the error message and exit fatally */ strcat(romdata->errorbuf, "ERROR: required files are missing, the game cannot be run."); fatalerror_exitcode(MAMERR_MISSING_FILES, "%s", romdata->errorbuf); } /* if we had warnings, output them, but continue */ if (romdata->warnings) { strcat(romdata->errorbuf, "WARNING: the game might not run correctly."); mame_printf_warning("%s\n", romdata->errorbuf); } }
void rom_exit(running_machine *machine) { int i; /* free the memory allocated for various regions */ for (i = 0; i < MAX_MEMORY_REGIONS; i++) free_memory_region(machine, i); /* close all hard drives */ chd_close_all(); }
static int display_rom_load_results(struct rom_load_data *romdata) { int region; /* final status display */ osd_display_loading_rom_message(NULL, romdata); /* only display if we have warnings or errors */ if (romdata->warnings || romdata->errors) { extern int bailing; /* display either an error message or a warning message */ if (romdata->errors) { strcat(romdata->errorbuf, "ERROR: required files are missing, the game cannot be run.\n"); bailing = 1; } else strcat(romdata->errorbuf, "WARNING: the game might not run correctly.\n"); /* display the result */ printf("%s", romdata->errorbuf); /* if we're not getting out of here, wait for a keypress */ if (!options.gui_host && !bailing) { #if 0 int k; /* loop until we get one */ printf ("Press any key to continue\n"); do { k = code_read_async(); } while (k == CODE_NONE || k == KEYCODE_LCONTROL); #endif /* bail on a control + C */ if (keyboard_pressed(KEYCODE_LCONTROL) && keyboard_pressed(KEYCODE_C)) return 1; } } /* clean up any regions */ if (romdata->errors) for (region = 0; region < MAX_MEMORY_REGIONS; region++) free_memory_region(region); /* return true if we had any errors */ return (romdata->errors != 0); }
static void init_machine(running_machine *machine) { mame_private *mame = machine->mame_data; int num; /* initialize basic can't-fail systems here */ cpuintrf_init(machine); sndintrf_init(machine); fileio_init(machine); config_init(machine); output_init(machine); state_init(machine); state_save_allow_registration(TRUE); drawgfx_init(machine); palette_init(machine); render_init(machine); ui_init(machine); generic_machine_init(machine); generic_video_init(machine); mame->rand_seed = 0x9d14abd7; /* initialize the base time (if not doing record/playback) */ if (!Machine->record_file && !Machine->playback_file) time(&mame->base_time); else mame->base_time = 0; /* init the osd layer */ if (osd_init(machine) != 0) fatalerror("osd_init failed"); /* initialize the input system */ /* this must be done before the input ports are initialized */ if (code_init(machine) != 0) fatalerror("code_init failed"); /* initialize the input ports for the game */ /* this must be done before memory_init in order to allow specifying */ /* callbacks based on input port tags */ if (input_port_init(machine, machine->gamedrv->ipt) != 0) fatalerror("input_port_init failed"); /* load the ROMs if we have some */ /* this must be done before memory_init in order to allocate memory regions */ rom_init(machine, machine->gamedrv->rom); /* initialize the timers and allocate a soft_reset timer */ /* this must be done before cpu_init so that CPU's can allocate timers */ timer_init(machine); mame->soft_reset_timer = timer_alloc(soft_reset); /* initialize the memory system for this game */ /* this must be done before cpu_init so that set_context can look up the opcode base */ if (memory_init(machine) != 0) fatalerror("memory_init failed"); /* now set up all the CPUs */ if (cpuexec_init(machine) != 0) fatalerror("cpuexec_init failed"); if (cpuint_init(machine) != 0) fatalerror("cpuint_init failed"); #ifdef MESS /* initialize the devices */ devices_init(machine); #endif /* start the save/load system */ saveload_init(machine); /* call the game driver's init function */ /* this is where decryption is done and memory maps are altered */ /* so this location in the init order is important */ ui_set_startup_text("Initializing...", TRUE); if (machine->gamedrv->driver_init != NULL) (*machine->gamedrv->driver_init)(machine); /* start the audio system */ if (sound_init(machine) != 0) fatalerror("sound_init failed"); /* start the video hardware */ if (video_init(machine) != 0) fatalerror("video_init failed"); /* start the cheat engine */ if (options.cheat) cheat_init(machine); /* call the driver's _START callbacks */ if (machine->drv->machine_start != NULL && (*machine->drv->machine_start)(machine) != 0) fatalerror("Unable to start machine emulation"); if (machine->drv->sound_start != NULL && (*machine->drv->sound_start)(machine) != 0) fatalerror("Unable to start sound emulation"); if (machine->drv->video_start != NULL && (*machine->drv->video_start)(machine) != 0) fatalerror("Unable to start video emulation"); /* free memory regions allocated with REGIONFLAG_DISPOSE (typically gfx roms) */ for (num = 0; num < MAX_MEMORY_REGIONS; num++) if (mame->mem_region[num].flags & ROMREGION_DISPOSE) free_memory_region(machine, num); #ifdef MAME_DEBUG /* initialize the debugger */ if (machine->debug_mode) mame_debug_init(machine); #endif }