slight refinements in backup type database recordkeeping, and win32 import save dialog

This commit is contained in:
zeromus 2013-02-27 08:44:52 +00:00
parent df34dec94f
commit 7051021efc
4 changed files with 52 additions and 57 deletions

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2006 yopyop
Copyright (C) 2008-2012 DeSmuME team
Copyright (C) 2008-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -598,7 +598,7 @@ int NDS_LoadROM(const char *filename, const char *physicalName, const char *logi
printf("None");
else
{
printf("%s", save_names[sv]);
printf("%s", save_types[sv].descr);
if (CommonSettings.autodetectBackupMethod == 1)
backup_setManualBackupType(sv+1);
}

View File

@ -1,7 +1,7 @@
/*
Copyright (C) 2006 thoduv
Copyright (C) 2006-2007 Theo Berkau
Copyright (C) 2008-2012 DeSmuME team
Copyright (C) 2008-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -87,38 +87,23 @@ static const u32 saveSizes[] = {512, // 4k
static const u32 saveSizes_count = ARRAY_SIZE(saveSizes);
//the lookup table from user save types to save parameters
const int save_types[][2] = {
{MC_TYPE_AUTODETECT,1},
{MC_TYPE_EEPROM1,MC_SIZE_4KBITS},
{MC_TYPE_EEPROM2,MC_SIZE_64KBITS},
{MC_TYPE_EEPROM2,MC_SIZE_512KBITS},
{MC_TYPE_FRAM,MC_SIZE_256KBITS},
{MC_TYPE_FLASH,MC_SIZE_2MBITS},
{MC_TYPE_FLASH,MC_SIZE_4MBITS},
{MC_TYPE_FLASH,MC_SIZE_8MBITS},
{MC_TYPE_FLASH,MC_SIZE_16MBITS},
{MC_TYPE_FLASH,MC_SIZE_32MBITS},
{MC_TYPE_FLASH,MC_SIZE_64MBITS},
{MC_TYPE_FLASH,MC_SIZE_128MBITS},
{MC_TYPE_FLASH,MC_SIZE_256MBITS},
{MC_TYPE_FLASH,MC_SIZE_512MBITS}
const SAVE_TYPE save_types[] = {
{"Autodetect", MC_TYPE_AUTODETECT,1},
{"EEPROM 4kbit",MC_TYPE_EEPROM1,MC_SIZE_4KBITS},
{"EEPROM 64kbit",MC_TYPE_EEPROM2,MC_SIZE_64KBITS},
{"EEPROM 512kbit",MC_TYPE_EEPROM2,MC_SIZE_512KBITS},
{"FRAM 256kbit",MC_TYPE_FRAM,MC_SIZE_256KBITS},
{"FLASH 2Mbit",MC_TYPE_FLASH,MC_SIZE_2MBITS},
{"FLASH 4Mbit",MC_TYPE_FLASH,MC_SIZE_4MBITS},
{"FLASH 8Mbit",MC_TYPE_FLASH,MC_SIZE_8MBITS},
{"FLASH 16Mbit",MC_TYPE_FLASH,MC_SIZE_16MBITS},
{"FLASH 32Mbit",MC_TYPE_FLASH,MC_SIZE_32MBITS},
{"FLASH 64Mbit",MC_TYPE_FLASH,MC_SIZE_64MBITS},
{"FLASH 128Mbit",MC_TYPE_FLASH,MC_SIZE_128MBITS},
{"FLASH 256Mbit",MC_TYPE_FLASH,MC_SIZE_256MBITS},
{"FLASH 512Mbit",MC_TYPE_FLASH,MC_SIZE_512MBITS}
};
const char *save_names[] = {
"EEPROM 4kbit",
"EEPROM 64kbit",
"EEPROM 512kbit",
"FRAM 256kbit",
"FLASH 2Mbit",
"FLASH 4Mbit",
"FLASH 8Mbit",
"FLASH 16Mbit",
"FLASH 32Mbit",
"FLASH 64Mbit",
"FLASH 128Mbit",
"FLASH 256Mbit",
"FLASH 512Mbit"
};
//forces the currently selected backup type to be current
//(can possibly be used to repair poorly chosen save types discovered late in gameplay i.e. pokemon gamers)
@ -422,8 +407,8 @@ void BackupDevice::reset()
if(state == DETECTING && CommonSettings.manualBackupType != MC_TYPE_AUTODETECT)
{
state = RUNNING;
int savetype = save_types[CommonSettings.manualBackupType][0];
int savesize = save_types[CommonSettings.manualBackupType][1];
int savetype = save_types[CommonSettings.manualBackupType].media_type;
int savesize = save_types[CommonSettings.manualBackupType].size;
ensure((u32)savesize); //expand properly if necessary
resize(savesize); //truncate if necessary
addr_size = addr_size_for_old_save_type(savetype);
@ -440,7 +425,7 @@ u8 BackupDevice::searchFileSaveType(u32 size)
{
for (u8 i = 1; i < MAX_SAVE_TYPES; i++)
{
if (size == save_types[i][1])
if (size == save_types[i].size)
return (i-1);
}
return 0xFF;
@ -896,8 +881,8 @@ static u32 no_gba_fillLeft(u32 size)
{
for (u32 i = 1; i < ARRAY_SIZE(save_types); i++)
{
if (size <= (u32)save_types[i][1])
return (size + (save_types[i][1] - size));
if (size <= (u32)save_types[i].size)
return (size + (save_types[i].size - size));
}
return size;
}
@ -1053,7 +1038,7 @@ void BackupDevice::loadfile()
info.type = advsc.getSaveType();
if (info.type != 0xFF && info.type != 0xFE)
{
u32 adv_size = save_types[info.type+1][1];
u32 adv_size = save_types[info.type+1].size;
if (info.size > adv_size)
info.size = adv_size;
else
@ -1190,8 +1175,8 @@ void BackupDevice::raw_applyUserSettings(u32& size, bool manual)
u32 res = searchFileSaveType(size);
if (res != 0xFF) type = (res + 1); // +1 - skip autodetect
}
int savetype = save_types[type][0];
int savesize = save_types[type][1];
int savetype = save_types[type].media_type;
int savesize = save_types[type].size;
addr_size = addr_size_for_old_save_type(savetype);
if((u32)savesize<size) size = savesize;
resize(savesize);
@ -1350,7 +1335,7 @@ bool BackupDevice::load_movie(EMUFILE* is) {
void BackupDevice::forceManualBackupType()
{
addr_size = addr_size_for_old_save_size(save_types[CommonSettings.manualBackupType][1]);
addr_size = addr_size_for_old_save_size(save_types[CommonSettings.manualBackupType].size);
state = RUNNING;
}

View File

@ -1,7 +1,7 @@
/*
Copyright (C) 2006 thoduv
Copyright (C) 2006 Theo Berkau
Copyright (C) 2008-2012 DeSmuME team
Copyright (C) 2008-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -225,8 +225,14 @@ u8 fw_transfer(memory_chip_t *mc, u8 data);
void backup_setManualBackupType(int type);
void backup_forceManualBackupType();
extern const char *save_names[];
extern const int save_types[][2];
struct SAVE_TYPE
{
const char* descr;
int media_type;
int size;
};
extern const SAVE_TYPE save_types[];
#endif /*__FW_H__*/

View File

@ -1,6 +1,6 @@
/*
Copyright 2006 Theo Berkau
Copyright (C) 2006-2012 DeSmuME team
Copyright (C) 2006-2013 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -53,23 +53,18 @@ BOOL CALLBACK ImportSizeSelect_Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l
EnableWindow(GetDlgItem(hDlg, IDC_IMP_AUTO_ADVANSCENE), false);
}
else
strcpy(buf, save_names[sv]);
strcpy(buf, save_types[sv].descr);
SetWindowText(GetDlgItem(hDlg, IDC_IMP_INFO_ADVANSCENE), buf);
}
else
EnableWindow(GetDlgItem(hDlg, IDC_IMP_AUTO_ADVANSCENE), false);
SetWindowText(GetDlgItem(hDlg, IDC_IMP_INFO_CURRENT), save_names[MMU_new.backupDevice.info.type]);
SetWindowText(GetDlgItem(hDlg, IDC_IMP_INFO_CURRENT), save_types[MMU_new.backupDevice.info.type].descr);
SendDlgItemMessage(hDlg, IDC_IMP_AUTO_CURRENT, BM_SETCHECK, true, 0);
for (u8 i = 1; i <= MAX_SAVE_TYPES; i++)
{
u32 ss = save_types[i][1] * 8 / 1024;
if (ss >= 1024)
sprintf(buf, "%i Mbit", ss / 1024);
else
sprintf(buf, "%i Kbit", ss);
SendDlgItemMessage(hDlg, IDC_IMP_MANUAL_SIZE, CB_ADDSTRING, 0, (LPARAM)buf);
SendDlgItemMessage(hDlg, IDC_IMP_MANUAL_SIZE, CB_ADDSTRING, 0, (LPARAM)save_types[i].descr);
}
SendDlgItemMessage(hDlg, IDC_IMP_MANUAL_SIZE, CB_SETCURSEL, MMU_new.backupDevice.info.type, 0);
@ -87,7 +82,7 @@ BOOL CALLBACK ImportSizeSelect_Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l
{
char sizeS[30] = {0};
memset(&sizeS[0], 0, sizeof(size));
u32 ss = save_types[fileSaveType+1][1] * 8 / 1024;
u32 ss = save_types[fileSaveType+1].size * 8 / 1024;
if (ss >= 1024)
sprintf(sizeS, "%i Mbit", ss / 1024);
else
@ -107,11 +102,20 @@ BOOL CALLBACK ImportSizeSelect_Proc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM l
}
return false;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_IMP_MANUAL_SIZE:
//when the user changes the desired size, automatically select manual radiobutton option
if(HIWORD(wParam) == CBN_SELCHANGE)
{
CheckRadioButton(hDlg,IDC_IMP_AUTO_CURRENT,IDC_IMP_MANUAL,IDC_IMP_MANUAL);
}
break;
case IDOK:
{
u32 res = 0;
@ -175,7 +179,7 @@ bool importSave(HWND hwnd, HINSTANCE hAppInst)
u32 res = DialogBoxW(hAppInst, MAKEINTRESOURCEW(IDD_IMPORT_SAVE_SIZE), hwnd, (DLGPROC)ImportSizeSelect_Proc);
if (res < MAX_SAVE_TYPES)
{
res = NDS_ImportSave(ImportSavFName, save_types[res+1][1]);
res = NDS_ImportSave(ImportSavFName, save_types[res+1].size);
if (res)
{
printf("Save was successfully imported\n");