int cli_info_listclones(core_options *options, const char *gamename) { int drvindex, count = 0; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) { const game_driver *clone_of = driver_get_clone(drivers[drvindex]); /* if we are a clone, and either our name matches the gamename, or the clone's name matches, display us */ if (clone_of != NULL && (clone_of->flags & GAME_IS_BIOS_ROOT) == 0) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0 || mame_strwildcmp(gamename, clone_of->name) == 0) { /* print the header on the first one */ if (count == 0) mame_printf_info("Name: Clone of:\n"); /* output the remaining information */ mame_printf_info("%-8s %-8s\n", drivers[drvindex]->name, clone_of->name); count++; } } /* return an error if none found */ return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
static void match_roms(core_options *options, const char *hash, int length, int *found) { int drvindex; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex] != NULL; drvindex++) { machine_config *config = global_alloc(machine_config(drivers[drvindex]->machine_config)); const rom_entry *region, *rom; const rom_source *source; /* iterate over sources, regions and files within the region */ for (source = rom_first_source(drivers[drvindex], config); source != NULL; source = rom_next_source(drivers[drvindex], config, source)) for (region = rom_first_region(drivers[drvindex], source); region; region = rom_next_region(region)) for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) if (hash_data_is_equal(hash, ROM_GETHASHDATA(rom), 0)) { int baddump = hash_data_has_info(ROM_GETHASHDATA(rom), HASH_INFO_BAD_DUMP); /* output information about the match */ if (*found != 0) mame_printf_info(" "); mame_printf_info("= %s%-20s %-10s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), drivers[drvindex]->name, drivers[drvindex]->description); (*found)++; } global_free(config); } softlist_match_roms( options, hash, length, found ); }
static void identify_data(const char *name, const UINT8 *data, int length, romident_status *status) { char hash[HASH_BUF_SIZE]; UINT8 *tempjed = NULL; astring *basename; int found = 0; jed_data jed; /* if this is a '.jed' file, process it into raw bits first */ if (core_filename_ends_with(name, ".jed") && jed_parse(data, length, &jed) == JEDERR_NONE) { /* now determine the new data length and allocate temporary memory for it */ length = jedbin_output(&jed, NULL, 0); tempjed = malloc(length); if (tempjed == NULL) return; /* create a binary output of the JED data and use that instead */ jedbin_output(&jed, tempjed, length); data = tempjed; } /* compute the hash of the data */ hash_data_clear(hash); hash_compute(hash, data, length, HASH_SHA1 | HASH_CRC); /* output the name */ status->total++; basename = core_filename_extract_base(astring_alloc(), name, FALSE); mame_printf_info("%-20s", astring_c(basename)); astring_free(basename); /* see if we can find a match in the ROMs */ match_roms(hash, length, &found); /* if we didn't find it, try to guess what it might be */ if (found == 0) { /* if not a power of 2, assume it is a non-ROM file */ if ((length & (length - 1)) != 0) { mame_printf_info("NOT A ROM\n"); status->nonroms++; } /* otherwise, it's just not a match */ else mame_printf_info("NO MATCH\n"); } /* if we did find it, count it as a match */ else status->matches++; /* free any temporary JED data */ if (tempjed != NULL) free(tempjed); }
/*------------------------------------------------- softlist_match_roms - scan for a matching software ROM by hash -------------------------------------------------*/ static void softlist_match_roms(core_options *options, const char *hash, int length, int *found) { int drvindex; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex] != NULL; drvindex++) { machine_config *config = global_alloc(machine_config(drivers[drvindex]->machine_config)); for (const device_config *dev = config->m_devicelist.first(SOFTWARE_LIST); dev != NULL; dev = dev->typenext()) { software_list_config *swlist = (software_list_config *)downcast<const legacy_device_config_base *>(dev)->inline_config(); for ( int i = 0; i < DEVINFO_STR_SWLIST_MAX - DEVINFO_STR_SWLIST_0; i++ ) { if ( swlist->list_name[i] ) { software_list *list = software_list_open( options, swlist->list_name[i], FALSE, NULL ); for ( software_info *swinfo = software_list_find( list, "*", NULL ); swinfo != NULL; swinfo = software_list_find( list, "*", swinfo ) ) { for ( software_part *part = software_find_part( swinfo, NULL, NULL ); part != NULL; part = software_part_next( part ) ) { for ( const rom_entry *region = part->romdata; region != NULL; region = rom_next_region(region) ) { for ( const rom_entry *rom = rom_first_file(region); rom != NULL; rom = rom_next_file(rom) ) { if ( hash_data_is_equal(hash, ROM_GETHASHDATA(rom), 0) ) { int baddump = hash_data_has_info(ROM_GETHASHDATA(rom), HASH_INFO_BAD_DUMP); /* output information about the match */ if (*found != 0) mame_printf_info(" "); mame_printf_info("= %s%-20s %s:%s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), swlist->list_name[i], swinfo->shortname, swinfo->longname); (*found)++; } } } } } software_list_close( list ); } } } global_free(config); } }
static void display_help(void) { #ifndef MESS mame_printf_info("M.A.M.E. v%s - Multiple Arcade Machine Emulator\n" "Copyright Nicola Salmoria and the MAME Team\n\n", build_version); mame_printf_info("%s\n", mame_disclaimer); mame_printf_info("Usage: MAME gamename [options]\n\n" " MAME -showusage for a brief list of options\n" " MAME -showconfig for a list of configuration options\n" " MAME -createconfig to create a " CONFIGNAME ".ini\n\n" "For usage instructions, please consult the file windows.txt\n"); #else mess_display_help(); #endif }
static void video_exit(running_machine *machine) { // free the overlay effect if (effect_bitmap != NULL) bitmap_free(effect_bitmap); effect_bitmap = NULL; // possibly kill the debug window #ifdef MAME_DEBUG if (options.mame_debug) debugwin_destroy_windows(); #endif // free all of our monitor information while (win_monitor_list != NULL) { win_monitor_info *temp = win_monitor_list; win_monitor_list = temp->next; free(temp); } // print a final result to the stdout if (fps_frames_displayed != 0) { osd_ticks_t tps = osd_ticks_per_second(); mame_printf_info("Average FPS: %f (%d frames)\n", (double)tps / (fps_end_time - fps_start_time) * fps_frames_displayed, fps_frames_displayed); } }
void options_output_help(void) { options_data *data; /* loop over all items */ for (data = datalist; data != NULL; data = data->next) { /* header: just print */ if ((data->flags & OPTION_HEADER) != 0) mame_printf_info("\n#\n# %s\n#\n", data->description); /* otherwise, output entries for all non-deprecated items */ else if ((data->flags & (OPTION_DEPRECATED | OPTION_INTERNAL)) == 0 && data->description != NULL) mame_printf_info("-%-20s%s\n", data->names[0], data->description); } }
int cli_info_listsamples(core_options *options, const char *gamename) { int count = 0; int drvindex; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex] != NULL; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { machine_config *config = global_alloc(machine_config(drivers[drvindex]->machine_config)); const device_config_sound_interface *sound = NULL; /* find samples interfaces */ for (bool gotone = config->m_devicelist.first(sound); gotone; gotone = sound->next(sound)) if (sound->devconfig().type() == SOUND_SAMPLES) { const char *const *samplenames = ((const samples_interface *)sound->devconfig().static_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++; global_free(config); } return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
static int execute_simple_commands(core_options *options, const char *exename) { /* help? */ if (options_get_bool(options, CLIOPTION_HELP)) { display_help(); return MAMERR_NONE; } /* showusage? */ if (options_get_bool(options, CLIOPTION_SHOWUSAGE)) { mame_printf_info("Usage: %s [%s] [options]\n\nOptions:\n", exename, GAMENOUN); options_output_help(options, help_output); return MAMERR_NONE; } /* validate? */ if (options_get_bool(options, CLIOPTION_VALIDATE)) { extern int mame_validitychecks(const game_driver *driver); return mame_validitychecks(NULL); } return -1; }
int cli_info_listcrc(core_options *options, const char *gamename) { int drvindex, count = 0; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { const rom_entry *region, *rom; /* iterate over regions, and then ROMs within the region */ for (region = rom_first_region(drivers[drvindex]); region; region = rom_next_region(region)) for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) { char hashbuf[HASH_BUF_SIZE]; /* if we have a CRC, display it */ if (hash_data_extract_printable_checksum(ROM_GETHASHDATA(rom), HASH_CRC, hashbuf)) mame_printf_info("%s %-12s %s\n", hashbuf, ROM_GETNAME(rom), drivers[drvindex]->description); } count++; } /* return an error if none found */ return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
int cli_info_listfull(core_options *options, const char *gamename) { int drvindex, count = 0; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if ((drivers[drvindex]->flags & GAME_NO_STANDALONE) == 0 && mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { /* print the header on the first one */ if (count == 0) mame_printf_info("Name: Description:\n"); /* output the remaining information */ mame_printf_info("%-10s\"%s\"\n", drivers[drvindex]->name, drivers[drvindex]->description); count++; } /* return an error if none found */ return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
int cli_info_listbrothers(core_options *options, const char *gamename) { UINT8 *didit = global_alloc_array_clear(UINT8, driver_list_get_count(drivers)); int drvindex, count = 0; astring filename; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex] != NULL; drvindex++) if (!didit[drvindex] && mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { int matchindex; didit[drvindex] = TRUE; if (count > 0) mame_printf_info("\n"); mame_printf_info("%s ... other drivers in %s:\n", drivers[drvindex]->name, core_filename_extract_base(&filename, drivers[drvindex]->source_file, FALSE)->cstr()); /* now iterate again over drivers, finding those with the same source file */ for (matchindex = 0; drivers[matchindex]; matchindex++) if (matchindex != drvindex && strcmp(drivers[drvindex]->source_file, drivers[matchindex]->source_file) == 0) { const char *matchstring = (mame_strwildcmp(gamename, drivers[matchindex]->name) == 0) ? "-> " : " "; const game_driver *clone_of = driver_get_clone(drivers[matchindex]); if (clone_of != NULL && (clone_of->flags & GAME_IS_BIOS_ROOT) == 0) mame_printf_info("%s%-16s [%s]\n", matchstring, drivers[matchindex]->name, clone_of->name); else mame_printf_info("%s%s\n", matchstring, drivers[matchindex]->name); didit[matchindex] = TRUE; } count++; } /* return an error if none found */ global_free(didit); return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
static void match_roms(const char *hash, int length, int *found) { int drvindex; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) { const rom_entry *region, *rom; /* iterate over regions and files within the region */ for (region = rom_first_region(drivers[drvindex]); region; region = rom_next_region(region)) for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) if (hash_data_is_equal(hash, ROM_GETHASHDATA(rom), 0)) { int baddump = hash_data_has_info(ROM_GETHASHDATA(rom), HASH_INFO_BAD_DUMP); /* output information about the match */ if (*found != 0) mame_printf_info(" "); mame_printf_info("= %s%-20s %s\n", baddump ? "(BAD) " : "", ROM_GETNAME(rom), drivers[drvindex]->description); (*found)++; } } }
int cli_info_listsource(core_options *options, const char *gamename) { int drvindex, count = 0; astring filename; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex] != NULL; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { /* output the remaining information */ mame_printf_info("%-16s %s\n", drivers[drvindex]->name, core_filename_extract_base(&filename, drivers[drvindex]->source_file, FALSE)->cstr()); count++; } /* return an error if none found */ return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
int cli_info_listsource(core_options *options, const char *gamename) { astring *filename = astring_alloc(); int drvindex, count = 0; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { /* output the remaining information */ mame_printf_info("%-8s %s\n", drivers[drvindex]->name, astring_c(core_filename_extract_base(filename, drivers[drvindex]->source_file, FALSE))); count++; } /* return an error if none found */ astring_free(filename); return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
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 READ32_HANDLER( decathlt_prot_r ) { UINT32 *ROM = (UINT32 *)memory_region(REGION_USER1); if (offset==2) { //UINT32 retval; /* I think the address and data are scrambled.. */ UINT32 retvalue = /*rand() | (rand()<<16);*/ ROM[(decathlt_protregs[0])]; decathlt_protregs[0]++; decathlt_lastcount++; return retvalue; // reads this, then the game writes it to vram... } else { mame_printf_info("%06x Decathlete prot R offset %04x mask %08x regs %08x, %08x, %08x, %08x\n",activecpu_get_pc(), offset, mem_mask, decathlt_protregs[0], decathlt_protregs[1], decathlt_protregs[2], decathlt_protregs[3]); } return decathlt_protregs[offset]; }
static void measure_fps(sdl_window_info *window, UINT32 dc, int update) { const unsigned long frames_skip4fps = 100; static int64_t lastTime=0, sumdt=0, startTime=0; static unsigned long frames = 0; int64_t currentTime, t0; double dt; double tps; osd_ticks_t tps_t; tps_t = osd_ticks_per_second(); tps = (double) tps_t; t0 = osd_ticks(); window->draw(window, dc, update); frames++; currentTime = osd_ticks(); if(startTime==0||frames==frames_skip4fps) startTime=currentTime; if( frames>=frames_skip4fps ) sumdt+=currentTime-t0; if( (currentTime-lastTime)>1L*osd_ticks_per_second() && frames>frames_skip4fps ) { dt = (double) (currentTime-startTime) / tps; // in decimale sec. mame_printf_info("%6.2lfs, %4lu F, " "avrg game: %5.2lf FPS %.2lf ms/f, " "avrg video: %5.2lf FPS %.2lf ms/f, " "last video: %5.2lf FPS %.2lf ms/f\n", dt, frames-frames_skip4fps, (double)(frames-frames_skip4fps)/dt, // avrg game fps ( (currentTime-startTime) / ((frames-frames_skip4fps)) ) * 1000.0 / osd_ticks_per_second(), (double)(frames-frames_skip4fps)/((double)(sumdt) / tps), // avrg vid fps ( sumdt / ((frames-frames_skip4fps)) ) * 1000.0 / tps, 1.0/((currentTime-t0) / osd_ticks_per_second()), // this vid fps (currentTime-t0) * 1000.0 / tps ); lastTime = currentTime; } }
void video_manager::exit() { // stop recording any movie end_recording(); // free all the graphics elements for (int i = 0; i < MAX_GFX_ELEMENTS; i++) gfx_element_free(machine().gfx[i]); // free the snapshot target machine().render().target_free(m_snap_target); m_snap_bitmap.reset(); // print a final result if we have at least 2 seconds' worth of data if (m_overall_emutime.seconds >= 1) { osd_ticks_t tps = osd_ticks_per_second(); double final_real_time = (double)m_overall_real_seconds + (double)m_overall_real_ticks / (double)tps; double final_emu_time = m_overall_emutime.as_double(); mame_printf_info("Average speed: %.2f%% (%d seconds)\n", 100 * final_emu_time / final_real_time, (m_overall_emutime + attotime(0, ATTOSECONDS_PER_SECOND / 2)).seconds); } }
static int GetCustomVideoModes(ConfigSettings *cs, ModeLine VideoMode[MAX_MODELINES]) { HKEY hKey; int dwIndex = 0, j = -1; int hactive, vactive, vfreq; LONG lRes; TCHAR dv[1024]; TCHAR *DefaultVideo = NULL; DWORD type; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\VIDEO"), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { TCHAR *chsrc, *chdst; DefaultVideo = reg_query_string(hKey, TEXT("\\Device\\Video0")); RegCloseKey(hKey); if (DefaultVideo == NULL) { mame_printf_error("SwitchRes: Failed opening \\Device\\Video0 registry\n"); return -1; } chdst = dv; for (chsrc = DefaultVideo + 18; *chsrc != 0; chsrc++) *chdst++ = *chsrc; *chdst = 0; } else { mame_printf_error("SwitchRes: Failed opening DefaultVideo registry\n"); return -1; } if (cs->verbose) mame_printf_verbose("SwitchRes: DefaultVideo '%s'\n", utf8_from_tstring(dv)); if ((lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, dv, 0, KEY_ALL_ACCESS, &hKey)) == ERROR_SUCCESS) { type = 0; TCHAR lpValueName[1024]; char lpData[1024]; DWORD lpcValueName = 1024; DWORD lpcData = 1024; while (RegEnumValue (hKey, dwIndex, lpValueName, &lpcValueName, NULL, &type, (LPBYTE)lpData, &lpcData) != ERROR_NO_MORE_ITEMS) { dwIndex++; if (_tcsstr(lpValueName, TEXT("DALDTMCRTBCD"))) { int hhh = 0, hhi = 0, hhf = 0, hht = 0, vvv = 0, vvi = 0, vvf = 0, vvt = 0, interlace = 0; double dotclock = 0; int checksum; int i = 0, k = 0; int active = 0; if (cs->verbose) mame_printf_verbose("SwitchRes: %s:\n ", utf8_from_tstring(lpValueName)); dotclock = (double)CustomModeDataWord(38, lpData); hhh = (int)RealRes(CustomModeDataWord(10, lpData)); hhi = (int)RealRes(CustomModeDataWord(14, lpData)); hhf = (int)RealRes(CustomModeDataWord(18, lpData)) + hhi; hht = (int)RealRes(CustomModeDataWord(6, lpData)); vvv = CustomModeDataWord(26, lpData); vvi = CustomModeDataWord(30, lpData); vvf = CustomModeDataWord(34, lpData) + vvi; vvt = CustomModeDataWord(22, lpData); interlace = (lpData[3] == 0x0e)?1:0; checksum = CustomModeDataWordBCD(66, lpData); if (cs->verbose) mame_printf_verbose("SwitchRes: (%d/%d) Modeline %.6f %d %d %d %d %d %d %d %d%s\n", checksum, (int)lpcData, (double)((double)dotclock * 10000.0)/1000000.0, (int)RealRes (hhh), (int)RealRes (hhi), (int)RealRes (hhf), (int)RealRes (hht), vvv, vvi, vvf, vvt, (interlace)?" interlace":""); if (sscanf(utf8_from_tstring(lpValueName), "DALDTMCRTBCD%dx%dx0x%d", &hactive, &vactive, &vfreq) != 3) { if (sscanf(utf8_from_tstring(lpValueName), "DALDTMCRTBCD%dX%dX0X%d", &hactive, &vactive, &vfreq) != 3) { mame_printf_info("SwitchRes: Failed getting resolution values from %s\n", utf8_from_tstring(lpValueName)); continue; } } for (k = 0; k < MAX_MODELINES; k++) { if (VideoMode[k].hactive == hactive && VideoMode[k].vactive == vactive && VideoMode[k].vfreq == vfreq) { active = 1; break; } } if (active) { sprintf(VideoMode[k].name, "%dx%d@%d", hactive, vactive, vfreq); VideoMode[k].a_width = hactive; VideoMode[k].a_height = vactive; sprintf(VideoMode[k].resolution, "%dx%d@%d", hactive, vactive, vfreq); VideoMode[k].vfreq = vfreq; VideoMode[k].a_vfreq = (double)(dotclock * 10000.0) / (vvt * hht); VideoMode[k].pclock = dotclock * 10000; VideoMode[k].hactive = hhh; VideoMode[k].hbegin = hhi; VideoMode[k].hend = hhf; VideoMode[k].htotal = hht; VideoMode[k].vactive = vvv; VideoMode[k].vbegin = vvi; VideoMode[k].vend = vvf; VideoMode[k].vtotal = vvt; VideoMode[k].interlace = interlace; VideoMode[k].doublescan = 0; VideoMode[k].custom = 1; for(i=0; i < lpcValueName; i++) { VideoMode[k].label[i] = lpValueName[i]; } VideoMode[k].regdata_size = lpcData; for(i=0; i < VideoMode[k].regdata_size; i++) { VideoMode[k].regdata[i] = lpData[i]; if (cs->verbose > 4) mame_printf_verbose("[%02X]", lpData[i]); } if (cs->verbose > 4) mame_printf_verbose("\n"); j++; } } lpcValueName = 1024; lpcData = 1024; } RegCloseKey(hKey); } else { mame_printf_error("SwitchRes: Failed opening %s registry entry with error %d\n", utf8_from_tstring(dv), (int)lRes); j = -1; } if (DefaultVideo != NULL) global_free(DefaultVideo); return j; }
static WRITE32_HANDLER( decathlt_prot_w ) { decathlt_protregs[offset] = (data&mem_mask)|(decathlt_protregs[offset]&~mem_mask); // decathlt_protregs[0] = 0x0c00000/4; if (offset==0) // seems to set a (scrambled?) source address { decathlt_part ^=1; if (decathlt_part==0) mame_printf_info("last count was %06x\n",decathlt_lastcount); decathlt_lastcount = 0; mame_printf_info("%06x Decathlete prot W offset %04x data %08x, regs %08x, %08x, %08x, %08x\n",activecpu_get_pc(), offset, data, decathlt_protregs[0], decathlt_protregs[1], decathlt_protregs[2], decathlt_protregs[3]); } if (offset==1) // uploads 2 tables... { if (mem_mask==0xffff0000) { if (data == 0x80000000) { mame_printf_info("changed to upload mode 1\n"); decathlt_prot_uploadmode = 1; decathlt_prot_uploadoffset = 0; } else if (data == 0x80800000) { mame_printf_info("changed to upload mode 2\n"); decathlt_prot_uploadmode = 2; decathlt_prot_uploadoffset = 0; } else { mame_printf_info("unknown upload mode\n"); decathlt_prot_uploadmode = 2; decathlt_prot_uploadoffset = 0; } // mame_printf_info("ARGH! %08x %08x\n",mem_mask,data); } else if (mem_mask==0x0000ffff) { if (decathlt_prot_uploadmode==1) { if (decathlt_prot_uploadoffset>=24) { mame_printf_info("upload mode 1 error, too big\n"); return; } mame_printf_info("uploading table 1 %04x %04x\n",decathlt_prot_uploadoffset, data&0xffff); decathlt_prottable1[decathlt_prot_uploadoffset]=data&0xffff; decathlt_prot_uploadoffset++; { /* 0x18 (24) values in this table, rom data is 0x1800000 long, maybe it has something to do with that? or 24-address bits? uploaded values appear to be 12-bit, some are repeated */ FILE* fp; fp = fopen("table1","wb"); { fwrite(&decathlt_prottable2,24,2,fp); } fclose(fp); } } else if (decathlt_prot_uploadmode==2) { if (decathlt_prot_uploadoffset>=128) { mame_printf_info("upload mode 2 error, too big\n"); return; } mame_printf_info("uploading table 2 %04x %04x\n",decathlt_prot_uploadoffset, data&0xffff); decathlt_prottable2[decathlt_prot_uploadoffset]=data&0xffff; decathlt_prot_uploadoffset++; { /* the table uploaded here is a 256 byte table with 256 unique values, remaps something? */ FILE* fp; fp = fopen("table2","wb"); { fwrite(&decathlt_prottable2,128,2,fp); } fclose(fp); } } else { mame_printf_info("unknown upload mode!\n"); } } } if (offset>1) { mame_printf_info("higher offset write\n"); } }
void emulator_info::printf_usage(const char *par1, const char *par2) { mame_printf_info(USAGE, par1, par2); }
static int info_verifysamples(core_options *options, const char *gamename) { int correct = 0; int incorrect = 0; int notfound = FALSE; int drvindex; /* now iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { audit_record *audit; int audit_records; int res; /* audit the samples in this set */ audit_records = audit_samples(options, drivers[drvindex], &audit); res = audit_summary(drivers[drvindex], audit_records, audit, TRUE); if (audit_records > 0) free(audit); else continue; /* if not found, print a message and set the flag */ if (res == NOTFOUND) { mame_printf_error("sampleset \"%s\" not found!\n", drivers[drvindex]->name); notfound = TRUE; } /* else display information about what we discovered */ else { mame_printf_info("sampleset %s ", drivers[drvindex]->name); /* switch off of the result */ switch (res) { case INCORRECT: mame_printf_info("is bad\n"); incorrect++; break; case CORRECT: mame_printf_info("is good\n"); correct++; break; case BEST_AVAILABLE: mame_printf_info("is best available\n"); correct++; break; } } } /* clear out any cached files */ zip_file_cache_clear(); /* if we didn't get anything at all because of an unsupported set, display message */ if (correct + incorrect == 0) { if (!notfound) mame_printf_error("sampleset \"%s\" not supported!\n", gamename); return MAMERR_NO_SUCH_GAME; } /* otherwise, print a summary */ else { mame_printf_info("%d samplesets found, %d were OK.\n", correct + incorrect, correct); return (incorrect > 0) ? MAMERR_MISSING_FILES : MAMERR_NONE; } }
static int info_verifyroms(core_options *options, const char *gamename) { int correct = 0; int incorrect = 0; int notfound = 0; int drvindex; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { audit_record *audit; int audit_records; int res; /* audit the ROMs in this set */ audit_records = audit_images(options, drivers[drvindex], AUDIT_VALIDATE_FAST, &audit); res = audit_summary(drivers[drvindex], audit_records, audit, TRUE); if (audit_records > 0) free(audit); /* if not found, count that and leave it at that */ if (res == NOTFOUND) notfound++; /* else display information about what we discovered */ else { const game_driver *clone_of; /* output the name of the driver and its clone */ mame_printf_info("romset %s ", drivers[drvindex]->name); clone_of = driver_get_clone(drivers[drvindex]); if (clone_of != NULL) mame_printf_info("[%s] ", clone_of->name); /* switch off of the result */ switch (res) { case INCORRECT: mame_printf_info("is bad\n"); incorrect++; break; case CORRECT: mame_printf_info("is good\n"); correct++; break; case BEST_AVAILABLE: mame_printf_info("is best available\n"); correct++; break; } } } /* clear out any cached files */ zip_file_cache_clear(); /* if we didn't get anything at all, display a generic end message */ if (correct + incorrect == 0) { if (notfound > 0) mame_printf_info("romset \"%s\" not found!\n", gamename); else mame_printf_info("romset \"%s\" not supported!\n", gamename); return MAMERR_NO_SUCH_GAME; } /* otherwise, print a summary */ else { mame_printf_info("%d romsets found, %d were OK.\n", correct + incorrect, correct); return (incorrect > 0) ? MAMERR_MISSING_FILES : MAMERR_NONE; } }
int cli_info_listroms(core_options *options, const char *gamename) { int drvindex, count = 0; /* iterate over drivers */ for (drvindex = 0; drivers[drvindex]; drvindex++) if (mame_strwildcmp(gamename, drivers[drvindex]->name) == 0) { const rom_entry *region, *rom, *chunk; /* print the header */ if (count > 0) mame_printf_info("\n"); mame_printf_info("This is the list of the ROMs required for driver \"%s\".\n" "Name Size Checksum\n", drivers[drvindex]->name); /* iterate over regions and then ROMs within the region */ for (region = drivers[drvindex]->rom; region; region = rom_next_region(region)) for (rom = rom_first_file(region); rom; rom = rom_next_file(rom)) { const char *name = ROM_GETNAME(rom); const char* hash = ROM_GETHASHDATA(rom); char hashbuf[HASH_BUF_SIZE]; int length = -1; /* accumulate the total length of all chunks */ if (ROMREGION_ISROMDATA(region)) { length = 0; for (chunk = rom_first_chunk(rom); chunk; chunk = rom_next_chunk(chunk)) length += ROM_GETLENGTH(chunk); } /* start with the name */ mame_printf_info("%-12s ", name); /* output the length next */ if (length >= 0) mame_printf_info("%7d", length); else mame_printf_info(" "); /* output the hash data */ if (!hash_data_has_info(hash, HASH_INFO_NO_DUMP)) { if (hash_data_has_info(hash, HASH_INFO_BAD_DUMP)) mame_printf_info(" BAD"); hash_data_print(hash, 0, hashbuf); mame_printf_info(" %s", hashbuf); } else mame_printf_info(" NO GOOD DUMP KNOWN"); /* end with a CR */ mame_printf_info("\n"); } count++; } return (count > 0) ? MAMERR_NONE : MAMERR_NO_SUCH_GAME; }
static void help_output(const char *s) { mame_printf_info("%s", s); }
int audit_summary(const game_driver *gamedrv, int count, const audit_record *records, int output) { int overall_status = CORRECT; int recnum; /* no count AND no records means not found */ if (count == 0 && records == NULL) return NOTFOUND; /* loop over records */ for (recnum = 0; recnum < count; recnum++) { const audit_record *record = &records[recnum]; int best_new_status = INCORRECT; /* skip anything that's fine */ if (record->substatus == SUBSTATUS_GOOD) continue; /* output the game name, file name, and length (if applicable) */ if (output) { mame_printf_info("%-8s: %s", gamedrv->name, record->name); if (record->explength > 0) mame_printf_info(" (%d bytes)", record->explength); mame_printf_info(" - "); } /* use the substatus for finer details */ switch (record->substatus) { case SUBSTATUS_GOOD_NEEDS_REDUMP: if (output) mame_printf_info("NEEDS REDUMP\n"); best_new_status = BEST_AVAILABLE; break; case SUBSTATUS_FOUND_NODUMP: if (output) mame_printf_info("NO GOOD DUMP KNOWN\n"); best_new_status = BEST_AVAILABLE; break; case SUBSTATUS_FOUND_BAD_CHECKSUM: if (output) { char hashbuf[512]; mame_printf_info("INCORRECT CHECKSUM:\n"); hash_data_print(record->exphash, 0, hashbuf); mame_printf_info("EXPECTED: %s\n", hashbuf); hash_data_print(record->hash, 0, hashbuf); mame_printf_info(" FOUND: %s\n", hashbuf); } break; case SUBSTATUS_FOUND_WRONG_LENGTH: if (output) mame_printf_info("INCORRECT LENGTH: %d bytes\n", record->length); break; case SUBSTATUS_NOT_FOUND: if (output) mame_printf_info("NOT FOUND\n"); break; case SUBSTATUS_NOT_FOUND_NODUMP: if (output) mame_printf_info("NOT FOUND - NO GOOD DUMP KNOWN\n"); best_new_status = BEST_AVAILABLE; break; case SUBSTATUS_NOT_FOUND_OPTIONAL: if (output) mame_printf_info("NOT FOUND BUT OPTIONAL\n"); best_new_status = BEST_AVAILABLE; break; case SUBSTATUS_NOT_FOUND_PARENT: if (output) mame_printf_info("NOT FOUND (shared with parent)\n"); break; case SUBSTATUS_NOT_FOUND_BIOS: if (output) mame_printf_info("NOT FOUND (BIOS)\n"); break; } /* downgrade the overall status if necessary */ overall_status = MAX(overall_status, best_new_status); } return overall_status; }
bool legacy_image_device_base::load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args) { image_error_t err; UINT32 open_plan[4]; int i; bool softload = FALSE; /* first unload the image */ unload(); /* clear any possible error messages */ clear_error(); /* we are now loading */ m_is_loading = TRUE; /* record the filename */ err = set_image_filename(path); if (err) goto done; /* Check if there's a software list defined for this device and use that if we're not creating an image */ softload = load_software_part( this, path, &m_software_info_ptr, &m_software_part_ptr, &m_full_software_name ); if (is_create || (!softload && m_software_info_ptr==NULL)) { /* determine open plan */ determine_open_plan(is_create, open_plan); /* attempt to open the file in various ways */ for (i = 0; !m_file && open_plan[i]; i++) { /* open the file */ err = load_image_by_path(open_plan[i], path); if (err && (err != IMAGE_ERROR_FILENOTFOUND)) goto done; } } /* Copy some image information when we have been loaded through a software list */ if ( m_software_info_ptr ) { m_longname = m_software_info_ptr->longname; m_manufacturer = m_software_info_ptr->publisher; m_year = m_software_info_ptr->year; //m_playable = m_software_info_ptr->supported; } /* did we fail to find the file? */ if (!is_loaded() && !softload) { err = IMAGE_ERROR_FILENOTFOUND; goto done; } /* call device load or create */ m_create_format = create_format; m_create_args = create_args; if (m_init_phase==FALSE) { err = (image_error_t)finish_load(); if (err) goto done; } /* success! */ done: if (m_err) { if (!m_init_phase) { if (machine->phase() == MACHINE_PHASE_RUNNING) popmessage("Error: Unable to %s image '%s': %s\n", is_create ? "create" : "load", path, error()); else mame_printf_error("Error: Unable to %s image '%s': %s", is_create ? "create" : "load", path, error()); } clear(); } else { /* do we need to reset the CPU? only schedule it if load/create is successful */ if ((attotime_compare(timer_get_time(device().machine), attotime_zero) > 0) && m_image_config.is_reset_on_load()) device().machine->schedule_hard_reset(); else { if (!m_init_phase) { if (machine->phase() == MACHINE_PHASE_RUNNING) popmessage("Image '%s' was successfully %s.", path, is_create ? "created" : "loaded"); else mame_printf_info("Image '%s' was successfully %s.\n", path, is_create ? "created" : "loaded"); } } } return err ? IMAGE_INIT_FAIL : IMAGE_INIT_PASS; }
bool device_image_interface::load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args, bool just_load) { UINT32 open_plan[4]; int i; bool softload = FALSE; m_from_swlist = FALSE; // if the path contains no period, we are using softlists, so we won't create an image astring pathstr(path); bool filename_has_period = (pathstr.rchr(0, '.') != -1) ? TRUE : FALSE; /* first unload the image */ unload(); /* clear any possible error messages */ clear_error(); /* we are now loading */ m_is_loading = TRUE; /* record the filename */ m_err = set_image_filename(path); if (m_err) goto done; /* Check if there's a software list defined for this device and use that if we're not creating an image */ if (!filename_has_period && !just_load) { softload = load_software_part( device().machine().options(), this, path, &m_software_info_ptr, &m_software_part_ptr, &m_full_software_name, &m_software_list_name ); // if we had launched from softlist with a specified part, e.g. "shortname:part" // we would have recorded the wrong name, so record it again based on software_info if (m_software_info_ptr && m_full_software_name) m_err = set_image_filename(m_full_software_name); m_from_swlist = TRUE; } if (is_create || filename_has_period) { /* determine open plan */ determine_open_plan(is_create, open_plan); /* attempt to open the file in various ways */ for (i = 0; !m_file && open_plan[i]; i++) { /* open the file */ m_err = load_image_by_path(open_plan[i], path); if (m_err && (m_err != IMAGE_ERROR_FILENOTFOUND)) goto done; } } /* Copy some image information when we have been loaded through a software list */ if ( m_software_info_ptr ) { m_longname = m_software_info_ptr->longname; m_manufacturer = m_software_info_ptr->publisher; m_year = m_software_info_ptr->year; //m_playable = m_software_info_ptr->supported; } /* did we fail to find the file? */ if (!is_loaded() && !softload) { m_err = IMAGE_ERROR_FILENOTFOUND; goto done; } /* call device load or create */ m_create_format = create_format; m_create_args = create_args; if (m_init_phase==FALSE) { m_err = (image_error_t)finish_load(); if (m_err) goto done; } /* success! */ done: if (just_load) { if(m_err) clear(); return m_err ? IMAGE_INIT_FAIL : IMAGE_INIT_PASS; } if (m_err!=0) { if (!m_init_phase) { if (device().machine().phase() == MACHINE_PHASE_RUNNING) popmessage("Error: Unable to %s image '%s': %s\n", is_create ? "create" : "load", path, error()); else mame_printf_error("Error: Unable to %s image '%s': %s", is_create ? "create" : "load", path, error()); } clear(); } else { /* do we need to reset the CPU? only schedule it if load/create is successful */ if (device().machine().time() > attotime::zero && is_reset_on_load()) device().machine().schedule_hard_reset(); else { if (!m_init_phase) { if (device().machine().phase() == MACHINE_PHASE_RUNNING) popmessage("Image '%s' was successfully %s.", path, is_create ? "created" : "loaded"); else mame_printf_info("Image '%s' was successfully %s.\n", path, is_create ? "created" : "loaded"); } } } return m_err ? IMAGE_INIT_FAIL : IMAGE_INIT_PASS; }
static void mame_puts_info(const char *s) { mame_printf_info("%s", s); }