slight refinements in backup type database recordkeeping, and win32 import save dialog
This commit is contained in:
parent
df34dec94f
commit
7051021efc
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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__*/
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue