int cli_info_listxml(core_options *options, const char *gamename) { /* since print_mame_xml expands the machine driver, we need to set things up */ init_resource_tracking(); cpuintrf_init(NULL); sndintrf_init(NULL); print_mame_xml(stdout, drivers, gamename); /* clean up our tracked resources */ exit_resource_tracking(); return MAMERR_NONE; }
int cpu_init(void) { int cpunum; /* initialize the interfaces first */ if (cpuintrf_init()) return 1; /* loop over all our CPUs */ for (cpunum = 0; cpunum < MAX_CPU; cpunum++) { int cputype = Machine->drv->cpu[cpunum].cpu_type; /* if this is a dummy, stop looking */ if (cputype == CPU_DUMMY) break; /* set the save state tag */ state_save_set_current_tag(cpunum + 1); /* initialize the cpuinfo struct */ memset(&cpu[cpunum], 0, sizeof(cpu[cpunum])); cpu[cpunum].suspend = SUSPEND_REASON_RESET; cpu[cpunum].clockscale = cputype_get_interface(cputype)->overclock; /* compute the cycle times */ sec_to_cycles[cpunum] = cpu[cpunum].clockscale * Machine->drv->cpu[cpunum].cpu_clock; cycles_to_sec[cpunum] = 1.0 / sec_to_cycles[cpunum]; /* initialize this CPU */ if (cpuintrf_init_cpu(cpunum, cputype)) return 1; } /* compute the perfect interleave factor */ compute_perfect_interleave(); /* save some stuff in tag 0 */ state_save_set_current_tag(0); state_save_register_INT32("cpu", 0, "watchdog count", &watchdog_counter, 1); /* reset the IRQ lines and save those */ if (cpuint_init()) return 1; return 0; }
int cli_info_listsamples(core_options *options, const char *gamename) { int count = 0; #if (HAS_SAMPLES) int drvindex; /* since we expand the machine driver, we need to set things up */ init_resource_tracking(); cpuintrf_init(NULL); sndintrf_init(NULL); /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { machine_config *config = machine_config_alloc(drivers[drvindex]->machine_config); int sndnum; /* find samples interfaces */ for (sndnum = 0; sndnum < MAX_SOUND && config->sound[sndnum].type != SOUND_DUMMY; sndnum++) if (config->sound[sndnum].type == SOUND_SAMPLES) { const char *const *samplenames = ((const struct Samplesinterface *)config->sound[sndnum].config)->samplenames; int sampnum; /* if the list is legit, walk it and print the sample info */ if (samplenames != NULL) for (sampnum = 0; samplenames[sampnum] != NULL; sampnum++) mame_printf_info("%s\n", samplenames[sampnum]); } count++; machine_config_free(config); } /* clean up our tracked resources */ exit_resource_tracking(); #else mame_printf_error("Samples not supported in this build\n"); #endif return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
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 }