- initialize fake firmware user settings on NDS reset when not using external firmware;
winport:
- using global structure for fake firmware user settings;
This commit is contained in:
mtabachenko 2013-05-29 10:13:06 +00:00
parent abd0aef26f
commit 0bdfe338b7
10 changed files with 54 additions and 53 deletions

View File

@ -2523,6 +2523,9 @@ void NDS_Reset()
{ {
//fake firmware boot-up process //fake firmware boot-up process
// Create the dummy firmware
NDS_CreateDummyFirmware(&CommonSettings.fw_config);
//copy the arm9 program to the address specified by rom header //copy the arm9 program to the address specified by rom header
u32 src = header->ARM9src; u32 src = header->ARM9src;
u32 dst = header->ARM9cpy; u32 dst = header->ARM9cpy;

View File

@ -522,7 +522,7 @@ extern struct TCommonSettings {
strcpy(ARM9BIOS, "biosnds9.bin"); strcpy(ARM9BIOS, "biosnds9.bin");
strcpy(ARM7BIOS, "biosnds7.bin"); strcpy(ARM7BIOS, "biosnds7.bin");
strcpy(Firmware, "firmware.bin"); strcpy(Firmware, "firmware.bin");
NDS_FillDefaultFirmwareConfigData(&InternalFirmConf); NDS_FillDefaultFirmwareConfigData(&fw_config);
/* WIFI mode: adhoc = 0, infrastructure = 1 */ /* WIFI mode: adhoc = 0, infrastructure = 1 */
wifi.mode = 1; wifi.mode = 1;
@ -559,7 +559,7 @@ extern struct TCommonSettings {
bool UseExtFirmware; bool UseExtFirmware;
char Firmware[256]; char Firmware[256];
bool BootFromFirmware; bool BootFromFirmware;
struct NDS_fw_config_data InternalFirmConf; NDS_fw_config_data fw_config;
NDS_CONSOLE_TYPE ConsoleType; NDS_CONSOLE_TYPE ConsoleType;
bool DebugConsole; bool DebugConsole;

View File

@ -375,14 +375,13 @@ bool CFIRMWARE::load()
} }
memcpy(&header, data, sizeof(header)); memcpy(&header, data, sizeof(header));
if ((header.fw_identifier[0] != 'M') || if ((header.fw_identifier & 0x00FFFFFF) != 0x0043414D)
(header.fw_identifier[1] != 'A') || {
(header.fw_identifier[2] != 'C')) delete [] data;
{ data = NULL;
delete [] data; fclose(fp);
fclose(fp); return false;
return false; }
}
shift1 = ((header.shift_amounts >> 0) & 0x07); shift1 = ((header.shift_amounts >> 0) & 0x07);
shift2 = ((header.shift_amounts >> 3) & 0x07); shift2 = ((header.shift_amounts >> 3) & 0x07);
@ -401,7 +400,7 @@ bool CFIRMWARE::load()
ARM9bootAddr = part1ram; ARM9bootAddr = part1ram;
ARM7bootAddr = part2ram; ARM7bootAddr = part2ram;
if(initKeycode(T1ReadLong(data, 0x08), 1, 0xC) == FALSE) if(initKeycode(header.fw_identifier, 1, 0xC) == FALSE)
{ {
delete [] data; delete [] data;
fclose(fp); fclose(fp);
@ -423,7 +422,7 @@ bool CFIRMWARE::load()
data[0x1F] = 0x00; data[0x1F] = 0x00;
#endif #endif
if(initKeycode(T1ReadLong(data, 0x08), 2, 0xC) == FALSE) if(initKeycode(header.fw_identifier, 2, 0xC) == FALSE)
{ {
delete [] data; delete [] data;
fclose(fp); fclose(fp);
@ -872,8 +871,8 @@ int NDS_CreateDummyFirmware( struct NDS_fw_config_data *user_settings)
//Wifi settings CRC16 //Wifi settings CRC16
(*(u16*)(MMU.fw.data + 0x2A)) = calc_CRC16(0, (MMU.fw.data + 0x2C), 0x138); (*(u16*)(MMU.fw.data + 0x2A)) = calc_CRC16(0, (MMU.fw.data + 0x2C), 0x138);
if (&CommonSettings.InternalFirmConf != user_settings) if (&CommonSettings.fw_config != user_settings)
memcpy(&CommonSettings.InternalFirmConf, user_settings, sizeof(struct NDS_fw_config_data)); memcpy(&CommonSettings.fw_config, user_settings, sizeof(struct NDS_fw_config_data));
return TRUE ; return TRUE ;
} }

View File

@ -50,13 +50,18 @@ public:
static std::string GetExternalFilePath(); static std::string GetExternalFilePath();
u32 getID()
{
return header.fw_identifier;
}
struct HEADER struct HEADER
{ {
u16 part3_rom_gui9_addr; // 000h u16 part3_rom_gui9_addr; // 000h
u16 part4_rom_wifi7_addr; // 002h u16 part4_rom_wifi7_addr; // 002h
u16 part34_gui_wifi_crc16; // 004h u16 part34_gui_wifi_crc16; // 004h
u16 part12_boot_crc16; // 006h u16 part12_boot_crc16; // 006h
u8 fw_identifier[4]; // 008h u32 fw_identifier; // 008h
u16 part1_rom_boot9_addr; // 00Ch u16 part1_rom_boot9_addr; // 00Ch
u16 part1_ram_boot9_addr; // 00Eh u16 part1_ram_boot9_addr; // 00Eh
u16 part2_rom_boot7_addr; // 010h u16 part2_rom_boot7_addr; // 010h

View File

@ -321,20 +321,20 @@ int MovieData::dump(EMUFILE* fp, bool binary)
* This would cause strange behaviour if the user could set UTF-16 but * This would cause strange behaviour if the user could set UTF-16 but
* they cannot yet. * they cannot yet.
*/ */
for (i = 0; i < CommonSettings.InternalFirmConf.nickname_len; i++) { for (i = 0; i < CommonSettings.fw_config.nickname_len; i++) {
temp_str[i] = CommonSettings.InternalFirmConf.nickname[i]; temp_str[i] = CommonSettings.fw_config.nickname[i];
} }
temp_str[i] = '\0'; temp_str[i] = '\0';
fp->fprintf("firmNickname %s\n", temp_str); fp->fprintf("firmNickname %s\n", temp_str);
for (i = 0; i < CommonSettings.InternalFirmConf.message_len; i++) { for (i = 0; i < CommonSettings.fw_config.message_len; i++) {
temp_str[i] = CommonSettings.InternalFirmConf.message[i]; temp_str[i] = CommonSettings.fw_config.message[i];
} }
temp_str[i] = '\0'; temp_str[i] = '\0';
fp->fprintf("firmMessage %s\n", temp_str); fp->fprintf("firmMessage %s\n", temp_str);
fp->fprintf("firmFavColour %d\n", CommonSettings.InternalFirmConf.fav_colour); fp->fprintf("firmFavColour %d\n", CommonSettings.fw_config.fav_colour);
fp->fprintf("firmBirthMonth %d\n", CommonSettings.InternalFirmConf.birth_month); fp->fprintf("firmBirthMonth %d\n", CommonSettings.fw_config.birth_month);
fp->fprintf("firmBirthDay %d\n", CommonSettings.InternalFirmConf.birth_day); fp->fprintf("firmBirthDay %d\n", CommonSettings.fw_config.birth_day);
fp->fprintf("firmLanguage %d\n", CommonSettings.InternalFirmConf.language); fp->fprintf("firmLanguage %d\n", CommonSettings.fw_config.language);
} }
fp->fprintf("rtcStartNew %s\n", rtcStart.ToString().c_str()); fp->fprintf("rtcStartNew %s\n", rtcStart.ToString().c_str());
@ -577,7 +577,7 @@ const char* _CDECL_ FCEUI_LoadMovie(const char *fname, bool _read_only, bool tas
// reset firmware (some games can write to it) // reset firmware (some games can write to it)
if (CommonSettings.UseExtFirmware == false) if (CommonSettings.UseExtFirmware == false)
{ {
NDS_CreateDummyFirmware(&CommonSettings.InternalFirmConf); NDS_CreateDummyFirmware(&CommonSettings.fw_config);
} }
NDS_Reset(); NDS_Reset();
@ -692,7 +692,7 @@ void FCEUI_SaveMovie(const char *fname, std::wstring author, int flag, std::stri
// reset firmware (some games can write to it) // reset firmware (some games can write to it)
if (CommonSettings.UseExtFirmware == false) if (CommonSettings.UseExtFirmware == false)
{ {
NDS_CreateDummyFirmware(&CommonSettings.InternalFirmConf); NDS_CreateDummyFirmware(&CommonSettings.fw_config);
} }
NDS_Reset(); NDS_Reset();

View File

@ -74,7 +74,7 @@ static void WriteFirmConfig( struct NDS_fw_config_data *fw_config)
BOOL CALLBACK FirmConfig_Proc(HWND dialog,UINT komunikat,WPARAM wparam,LPARAM lparam) BOOL CALLBACK FirmConfig_Proc(HWND dialog,UINT komunikat,WPARAM wparam,LPARAM lparam)
{ {
struct NDS_fw_config_data *fw_config = &win_fw_config; struct NDS_fw_config_data *fw_config = &CommonSettings.fw_config;
int i; int i;
char temp_str[27]; char temp_str[27];
@ -147,7 +147,8 @@ BOOL CALLBACK FirmConfig_Proc(HWND dialog,UINT komunikat,WPARAM wparam,LPARAM lp
WriteFirmConfig( fw_config); WriteFirmConfig( fw_config);
EndDialog(dialog,0); EndDialog(dialog,0);
NDS_CreateDummyFirmware( fw_config); if (CommonSettings.UseExtFirmware == 0)
NDS_CreateDummyFirmware( fw_config);
return 1; return 1;
} }
else else

View File

@ -18,8 +18,7 @@
#ifndef FIRMCONFIG_H #ifndef FIRMCONFIG_H
#define FIRMCONFIG_H #define FIRMCONFIG_H
#include <windows.h>
extern struct NDS_fw_config_data win_fw_config;
BOOL CALLBACK FirmConfig_Proc(HWND dialog,UINT komunikat,WPARAM wparam,LPARAM lparam); BOOL CALLBACK FirmConfig_Proc(HWND dialog,UINT komunikat,WPARAM wparam,LPARAM lparam);

View File

@ -87,7 +87,7 @@ LRESULT GInfo_Paint(HWND hDlg, WPARAM wParam, LPARAM lParam)
const RomBanner& banner = gameInfo.getRomBanner(); const RomBanner& banner = gameInfo.getRomBanner();
sprintf(text, "%ws", banner.titles[win_fw_config.language]); sprintf(text, "%ws", banner.titles[CommonSettings.fw_config.language]); // TODO: langID from real/fake fw
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLE), text); SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLE), text);
sprintf(text, "%ws", banner.titles[0]); sprintf(text, "%ws", banner.titles[0]);

View File

@ -544,9 +544,6 @@ bool staterewindingenabled = false;
unsigned short windowSize = 0; unsigned short windowSize = 0;
/* the firmware settings */
struct NDS_fw_config_data win_fw_config;
/*const u32 gapColors[16] = { /*const u32 gapColors[16] = {
Color::Gray, Color::Gray,
Color::Brown, Color::Brown,
@ -3131,9 +3128,6 @@ int _main()
gpu_SetRotateScreen(video.rotation); gpu_SetRotateScreen(video.rotation);
//default the firmware settings, they may get changed later
NDS_FillDefaultFirmwareConfigData( &win_fw_config);
//GetPrivateProfileString("General", "Language", "0", text, 80, IniName); //GetPrivateProfileString("General", "Language", "0", text, 80, IniName);
//SetLanguage(atoi(text)); //SetLanguage(atoi(text));
//zero 09-feb-2013 - all the translations are out of date. this is dumb. lets just take out the translations. you cant expect translations in a project with our staff size using our tech //zero 09-feb-2013 - all the translations are out of date. this is dumb. lets just take out the translations. you cant expect translations in a project with our staff size using our tech
@ -3387,11 +3381,13 @@ int _main()
video.setfilter(GetPrivateProfileInt("Video", "Filter", video.NONE, IniName)); video.setfilter(GetPrivateProfileInt("Video", "Filter", video.NONE, IniName));
FilterUpdate(MainWindow->getHWnd(),false); FilterUpdate(MainWindow->getHWnd(),false);
/* Read the firmware settings from the init file */ //default the firmware settings, they may get changed later
win_fw_config.fav_colour = GetPrivateProfileInt("Firmware","favColor", 10, IniName); NDS_FillDefaultFirmwareConfigData(&CommonSettings.fw_config);
win_fw_config.birth_month = GetPrivateProfileInt("Firmware","bMonth", 7, IniName); // Read the firmware settings from the init file
win_fw_config.birth_day = GetPrivateProfileInt("Firmware","bDay", 15, IniName); CommonSettings.fw_config.fav_colour = GetPrivateProfileInt("Firmware","favColor", 10, IniName);
win_fw_config.language = GetPrivateProfileInt("Firmware","Language", 1, IniName); CommonSettings.fw_config.birth_month = GetPrivateProfileInt("Firmware","bMonth", 7, IniName);
CommonSettings.fw_config.birth_day = GetPrivateProfileInt("Firmware","bDay", 15, IniName);
CommonSettings.fw_config.language = GetPrivateProfileInt("Firmware","Language", 1, IniName);
{ {
/* /*
@ -3401,28 +3397,24 @@ int _main()
char temp_str[27]; char temp_str[27];
int char_index; int char_index;
GetPrivateProfileString("Firmware","nickName", "yopyop", temp_str, 11, IniName); GetPrivateProfileString("Firmware","nickName", "yopyop", temp_str, 11, IniName);
win_fw_config.nickname_len = strlen( temp_str); CommonSettings.fw_config.nickname_len = strlen( temp_str);
if ( win_fw_config.nickname_len == 0) { if (CommonSettings.fw_config.nickname_len == 0) {
strcpy( temp_str, "yopyop"); strcpy( temp_str, "yopyop");
win_fw_config.nickname_len = strlen( temp_str); CommonSettings.fw_config.nickname_len = strlen( temp_str);
} }
for ( char_index = 0; char_index < win_fw_config.nickname_len; char_index++) { for ( char_index = 0; char_index < CommonSettings.fw_config.nickname_len; char_index++) {
win_fw_config.nickname[char_index] = temp_str[char_index]; CommonSettings.fw_config.nickname[char_index] = temp_str[char_index];
} }
GetPrivateProfileString("Firmware","Message", "DeSmuME makes you happy!", temp_str, 27, IniName); GetPrivateProfileString("Firmware","Message", "DeSmuME makes you happy!", temp_str, 27, IniName);
win_fw_config.message_len = strlen( temp_str); CommonSettings.fw_config.message_len = strlen( temp_str);
for ( char_index = 0; char_index < win_fw_config.message_len; char_index++) { for ( char_index = 0; char_index < CommonSettings.fw_config.message_len; char_index++) {
win_fw_config.message[char_index] = temp_str[char_index]; CommonSettings.fw_config.message[char_index] = temp_str[char_index];
} }
} }
// Create the dummy firmware
NDS_CreateDummyFirmware( &win_fw_config);
if (cmdline.nds_file != "") if (cmdline.nds_file != "")
{ {
if(OpenCore(cmdline.nds_file.c_str())) if(OpenCore(cmdline.nds_file.c_str()))

View File

@ -633,10 +633,12 @@ INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
case IDC_BIG_ENDIAN: case IDC_BIG_ENDIAN:
wnd->Refresh(); wnd->Refresh();
wnd->SetFocus();
return 1; return 1;
case IDC_FULL_CHARS: case IDC_FULL_CHARS:
wnd->Refresh(); wnd->Refresh();
wnd->SetFocus();
return 1; return 1;
} }
return 0; return 0;