/* call hiscore_open once after loading a game */ void hiscore_init (running_machine &machine) { memory_range *mem_range = state.mem_range; file_error filerr; const char *db_filename = machine.options().value(OPTION_HISCORE_FILE); /* high score definition file */ const char *name = machine.system().name; state.hiscores_have_been_loaded = 0; while (mem_range) { if (strstr(machine.system().source_file,"cinemat.c") > 0) { machine.cpu[mem_range->cpu]->memory().space(AS_DATA)->write_byte(mem_range->addr, ~mem_range->start_value); machine.cpu[mem_range->cpu]->memory().space(AS_DATA)->write_byte(mem_range->addr + mem_range->num_bytes-1, ~mem_range->end_value); mem_range = mem_range->next; } else { machine.cpu[mem_range->cpu]->memory().space(AS_PROGRAM)->write_byte(mem_range->addr, ~mem_range->start_value); machine.cpu[mem_range->cpu]->memory().space(AS_PROGRAM)->write_byte(mem_range->addr + mem_range->num_bytes-1,~mem_range->end_value); mem_range = mem_range->next; } } state.mem_range = NULL; emu_file f = emu_file(OPEN_FLAG_READ); filerr = f.open(db_filename); if (filerr == FILERR_NONE) { char buffer[MAX_CONFIG_LINE_SIZE]; enum { FIND_NAME, FIND_DATA, FETCH_DATA } mode; mode = FIND_NAME; while (f.gets (buffer, MAX_CONFIG_LINE_SIZE)) { if (mode==FIND_NAME) { if (matching_game_name (buffer, name)) { mode = FIND_DATA; LOG(("hs config found!\n")); } } else if (is_mem_range (buffer)) { const char *pBuf = buffer; mem_range = global_alloc_array(memory_range, sizeof(memory_range)); if (mem_range) { mem_range->cpu = hexstr2num (&pBuf); mem_range->addr = hexstr2num (&pBuf); mem_range->num_bytes = hexstr2num (&pBuf); mem_range->start_value = hexstr2num (&pBuf); mem_range->end_value = hexstr2num (&pBuf); mem_range->next = NULL; { memory_range *last = state.mem_range; while (last && last->next) last = last->next; if (last == NULL) { state.mem_range = mem_range; } else { last->next = mem_range; } } mode = FETCH_DATA; } else { hiscore_free(); break; } } else { /* line is a game name */ if (mode == FETCH_DATA) break; } } f.close (); } timer = machine.scheduler().timer_alloc(FUNC(hiscore_periodic), NULL); timer->adjust(machine.primary_screen->frame_period(), 0, machine.primary_screen->frame_period()); machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(hiscore_close), &machine)); }
/* call hs_open once after loading a game */ void hs_open (void) { FILE *f = NULL; char path[MAX_PATH]; #ifdef N900 sprintf(path, "%s%s", "/opt/cps2emu/config/", db_filename); #else sprintf(path, "%s%s", launchDir, db_filename); #endif if ((f = fopen(path, "rb")) == NULL) { msg_printf("High score DB file is broken.\n"); } else { char buffer[MAX_CONFIG_LINE_SIZE]; enum { FIND_NAME, FIND_DATA, FETCH_DATA } mode; mode = FIND_NAME; hs_free(); state.hiscore_file_size = 0; //LOG(("hs_open: '%s'\n", game_name)); while (fgets (buffer, MAX_CONFIG_LINE_SIZE, f)) { if (mode==FIND_NAME) { if (matching_game_name (buffer)) { mode = FIND_DATA; //LOG(("hs config found!\n")); } } else if (is_mem_range (buffer)) { const char *pBuf = buffer; struct mem_range *mem_range = malloc(sizeof(struct mem_range)); if (mem_range) { mem_range->cpu = hexstr2num (&pBuf); mem_range->addr = hexstr2num (&pBuf); mem_range->num_bytes = hexstr2num (&pBuf); mem_range->start_value = hexstr2num (&pBuf); mem_range->end_value = hexstr2num (&pBuf); state.hiscore_file_size += mem_range->num_bytes; mem_range->next = NULL; { struct mem_range *last = state.mem_range; while (last && last->next) last = last->next; if (last == NULL) state.mem_range = mem_range; else last->next = mem_range; } mode = FETCH_DATA; } else { hs_free(); break; } } else { /* line is a game name */ if (mode == FETCH_DATA) break; } } fclose (f); } state.hiscores_have_been_loaded = 0; if (state.mem_range) { struct mem_range *mem_range = state.mem_range; while (mem_range) { //computer_writemem_byte( // mem_range->cpu, // mem_range->addr, // ~mem_range->start_value //); m68000_write_memory_8(mem_range->addr, ~mem_range->start_value); //computer_writemem_byte( // mem_range->cpu, // mem_range->addr + mem_range->num_bytes-1, // ~mem_range->end_value //); m68000_write_memory_8(mem_range->addr + mem_range->num_bytes-1,~mem_range->end_value); mem_range = mem_range->next; } //printf ("cpu:%d, addr:%d, bytes:%d, start_value:%d, end_value:%d\n", state.mem_range->cpu, state.mem_range->addr, state.mem_range->num_bytes, state.mem_range->start_value, state.mem_range->end_value); } else { option_hiscore = 0; } }
void HiscoreInit() { Debug_HiscoreInitted = 1; if (!CheckHiscoreAllowed()) return; HiscoresInUse = 0; TCHAR szDatFilename[MAX_PATH]; _stprintf(szDatFilename, _T("%shiscore.dat"), szAppHiscorePath); FILE *fp = _tfopen(szDatFilename, _T("r")); if (fp) { char buffer[MAX_CONFIG_LINE_SIZE]; enum { FIND_NAME, FIND_DATA, FETCH_DATA } mode; mode = FIND_NAME; while (fgets(buffer, MAX_CONFIG_LINE_SIZE, fp)) { if (mode == FIND_NAME) { if (matching_game_name(buffer, BurnDrvGetTextA(DRV_NAME))) { mode = FIND_DATA; } } else { if (is_mem_range(buffer)) { if (nHiscoreNumRanges < HISCORE_MAX_RANGES) { const char *pBuf = buffer; HiscoreMemRange[nHiscoreNumRanges].Loaded = 0; HiscoreMemRange[nHiscoreNumRanges].nCpu = hexstr2num(&pBuf); HiscoreMemRange[nHiscoreNumRanges].Address = hexstr2num(&pBuf); HiscoreMemRange[nHiscoreNumRanges].NumBytes = hexstr2num(&pBuf); HiscoreMemRange[nHiscoreNumRanges].StartValue = hexstr2num(&pBuf); HiscoreMemRange[nHiscoreNumRanges].EndValue = hexstr2num(&pBuf); HiscoreMemRange[nHiscoreNumRanges].ApplyNextFrame = 0; HiscoreMemRange[nHiscoreNumRanges].Applied = 0; HiscoreMemRange[nHiscoreNumRanges].Data = (UINT8*)malloc(HiscoreMemRange[nHiscoreNumRanges].NumBytes); memset(HiscoreMemRange[nHiscoreNumRanges].Data, 0, HiscoreMemRange[nHiscoreNumRanges].NumBytes); #if 1 && defined FBA_DEBUG bprintf(PRINT_IMPORTANT, _T("Hi Score Memory Range %i Loaded - CPU %i, Address %x, Bytes %02x, Start Val %x, End Val %x\n"), nHiscoreNumRanges, HiscoreMemRange[nHiscoreNumRanges].nCpu, HiscoreMemRange[nHiscoreNumRanges].Address, HiscoreMemRange[nHiscoreNumRanges].NumBytes, HiscoreMemRange[nHiscoreNumRanges].StartValue, HiscoreMemRange[nHiscoreNumRanges].EndValue); #endif nHiscoreNumRanges++; mode = FETCH_DATA; } else { break; } } else { if (mode == FETCH_DATA) break; } } } fclose(fp); } if (nHiscoreNumRanges) HiscoresInUse = 1; TCHAR szFilename[MAX_PATH]; _stprintf(szFilename, _T("%s%s.hi"), szAppHiscorePath, BurnDrvGetText(DRV_NAME)); fp = _tfopen(szFilename, _T("r")); INT32 Offset = 0; if (fp) { UINT32 nSize = 0; while (!feof(fp)) { fgetc(fp); nSize++; } UINT8 *Buffer = (UINT8*)malloc(nSize); rewind(fp); fgets((char*)Buffer, nSize, fp); for (UINT32 i = 0; i < nHiscoreNumRanges; i++) { for (UINT32 j = 0; j < HiscoreMemRange[i].NumBytes; j++) { HiscoreMemRange[i].Data[j] = Buffer[j + Offset]; } Offset += HiscoreMemRange[i].NumBytes; HiscoreMemRange[i].Loaded = 1; #if 1 && defined FBA_DEBUG bprintf(PRINT_IMPORTANT, _T("Hi Score Memory Range %i Loaded from file\n"), i); #endif } if (Buffer) { free(Buffer); Buffer = NULL; } fclose(fp); } nCpuType = -1; }
/* call hiscore_open once after loading a game */ void hiscore_init (running_machine &machine) { memory_range *mem_range = state.mem_range; address_space *initspace; file_error filerr; const char *name = machine.system().name; state.hiscores_have_been_loaded = 0; while (mem_range) { if (strstr(machine.system().source_file,"cinemat.c") > 0) { initspace = &machine.cpu[mem_range->cpu]->memory().space(AS_DATA); initspace->write_byte(mem_range->addr, ~mem_range->start_value); initspace->write_byte(mem_range->addr + mem_range->num_bytes-1, ~mem_range->end_value); mem_range = mem_range->next; } else { initspace = &machine.cpu[mem_range->cpu]->memory().space(AS_PROGRAM); initspace->write_byte(mem_range->addr, ~mem_range->start_value); initspace->write_byte(mem_range->addr + mem_range->num_bytes-1, ~mem_range->end_value); mem_range = mem_range->next; } } state.mem_range = nullptr; emu_file f(machine.options().high_path(), OPEN_FLAG_READ); filerr = f.open("hiscore.dat"); if (filerr == FILERR_NONE) { char buffer[MAX_CONFIG_LINE_SIZE]; enum { FIND_NAME, FIND_DATA, FETCH_DATA } mode; mode = FIND_NAME; while (f.gets(buffer, MAX_CONFIG_LINE_SIZE)) { if (mode == FIND_NAME) { if (matching_game_name (buffer, name)) mode = FIND_DATA; } else if (is_mem_range (buffer)) { const char *pBuf = buffer; mem_range = (memory_range *)malloc(sizeof(memory_range)); if (mem_range) { mem_range->cpu = hexstr2num (&pBuf); mem_range->addr = hexstr2num (&pBuf); mem_range->num_bytes = hexstr2num (&pBuf); mem_range->start_value = hexstr2num (&pBuf); mem_range->end_value = hexstr2num (&pBuf); mem_range->next = nullptr; { memory_range *last = state.mem_range; while (last && last->next) last = last->next; if (last == nullptr) state.mem_range = mem_range; else last->next = mem_range; } mode = FETCH_DATA; } else { hiscore_free(); break; } } else { /* line is a game name */ if (mode == FETCH_DATA) break; } } f.close(); } timer = machine.scheduler().timer_alloc(FUNC(hiscore_periodic)); timer->adjust(machine.first_screen()->frame_period(), 0, machine.first_screen()->frame_period()); machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(hiscore_close), &machine)); }
/* call hs_open once after loading a game */ void hs_open (const char *name) { mame_file *f = mame_fopen (NULL, db_filename, FILETYPE_HIGHSCORE_DB, 0); state.mem_range = NULL; LOG(("hs_open: '%s'\n", name)); if (f) { char buffer[MAX_CONFIG_LINE_SIZE]; enum { FIND_NAME, FIND_DATA, FETCH_DATA } mode; mode = FIND_NAME; while (mame_fgets (buffer, MAX_CONFIG_LINE_SIZE, f)) { if (mode==FIND_NAME) { if (matching_game_name (buffer, name)) { mode = FIND_DATA; LOG(("hs config found!\n")); } } else if (is_mem_range (buffer)) { const char *pBuf = buffer; struct mem_range *mem_range = osd_malloc(sizeof(struct mem_range)); if (mem_range) { mem_range->cpu = hexstr2num (&pBuf); mem_range->addr = hexstr2num (&pBuf); mem_range->num_bytes = hexstr2num (&pBuf); mem_range->start_value = hexstr2num (&pBuf); mem_range->end_value = hexstr2num (&pBuf); mem_range->next = NULL; { struct mem_range *last = state.mem_range; while (last && last->next) last = last->next; if (last == NULL) { state.mem_range = mem_range; } else { last->next = mem_range; } } mode = FETCH_DATA; } else { hs_free(); break; } } else { /* line is a game name */ if (mode == FETCH_DATA) break; } } mame_fclose (f); } }