Skip to content

Commit 9582090

Browse files
committed
Fix overriding firmware language in DSi mode, add experimental support for Chinese language option
1 parent f1f7b2d commit 9582090

4 files changed

Lines changed: 29 additions & 10 deletions

File tree

src/SPI_Firmware.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ class Firmware
164164
static_assert(sizeof(ExtendedWifiAccessPoint) == 512, "WifiAccessPoint should be 512 bytes");
165165

166166

167-
enum class FirmwareConsoleType : u8
167+
enum FirmwareConsoleType : u8
168168
{
169169
DS = 0xFF,
170170
DSLite = 0x20,
@@ -266,7 +266,7 @@ class Firmware
266266
u8 BuildMonth;
267267
u8 BuildYear;
268268

269-
FirmwareConsoleType ConsoleType;
269+
u8 ConsoleType;
270270

271271
u8 Unused0[2];
272272

src/Wifi.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,16 +183,16 @@ void Wifi::Reset()
183183

184184
CurChannel = 0;
185185

186-
Firmware::FirmwareConsoleType console = fwheader.ConsoleType;
187-
if (console == Firmware::FirmwareConsoleType::DS)
186+
auto consoletype = fwheader.ConsoleType;
187+
if (consoletype == Firmware::FirmwareConsoleType::DS || consoletype == Firmware::FirmwareConsoleType::iQueDS)
188188
IOPORT(0x000) = 0x1440;
189-
else if (console == Firmware::FirmwareConsoleType::DSLite)
189+
else if (consoletype == Firmware::FirmwareConsoleType::DSLite || consoletype == Firmware::FirmwareConsoleType::iQueDSLite)
190190
IOPORT(0x000) = 0xC340;
191-
else if (NDS.ConsoleType == 1 && console == Firmware::FirmwareConsoleType::DSi)
191+
else if (NDS.ConsoleType == 1 && consoletype == Firmware::FirmwareConsoleType::DSi)
192192
IOPORT(0x000) = 0xC340; // DSi has the modern DS-wifi variant
193193
else
194194
{
195-
Log(LogLevel::Warn, "wifi: unknown console type %02X\n", console);
195+
Log(LogLevel::Warn, "wifi: unknown console type %02X\n", consoletype);
196196
IOPORT(0x000) = 0x1440;
197197
}
198198

src/frontend/qt_sdl/EmuInstance.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1691,6 +1691,7 @@ void EmuInstance::customizeFirmware(Firmware& firmware, bool overridesettings) n
16911691
{
16921692
if (overridesettings)
16931693
{
1694+
auto &currentHeader = firmware.GetHeader();
16941695
auto &currentData = firmware.GetEffectiveUserData();
16951696

16961697
auto firmcfg = localCfg.GetTable("Firmware");
@@ -1707,8 +1708,25 @@ void EmuInstance::customizeFirmware(Firmware& firmware, bool overridesettings) n
17071708
auto language = static_cast<Firmware::Language>(firmcfg.GetInt("Language"));
17081709
if (language != Firmware::Language::Reserved)
17091710
{ // If the frontend specifies a language (rather than using the existing value)...
1710-
currentData.Settings &= ~Firmware::Language::Reserved; // ..clear the existing language...
1711-
currentData.Settings |= language; // ...and set the new one.
1711+
bool extlang = language >= Firmware::Language::Chinese;
1712+
1713+
// ..clear the existing language...
1714+
currentData.Settings &= ~Firmware::Language::Reserved;
1715+
1716+
// ...and set the new one.
1717+
currentData.Settings |= extlang ? Firmware::Language::English : language;
1718+
currentData.ExtendedSettings.ExtendedLanguage = language;
1719+
1720+
if (extlang && !(currentHeader.ConsoleType & 0x40))
1721+
{
1722+
// enable the extended settings header if not present
1723+
if (currentHeader.ConsoleType == 0xFF)
1724+
currentHeader.ConsoleType = 0x43;
1725+
else
1726+
currentHeader.ConsoleType |= 0x43;
1727+
currentData.ExtendedSettings.Unknown0 = 0x01;
1728+
currentData.ExtendedSettings.SupportedLanguageMask = 0x7F;
1729+
}
17121730
}
17131731

17141732
// setting up color

src/frontend/qt_sdl/FirmwareSettingsDialog.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ class FirmwareSettingsDialog : public QDialog
7979
"French",
8080
"German",
8181
"Italian",
82-
"Spanish"
82+
"Spanish",
83+
"Chinese"
8384
};
8485

8586
const QStringList months

0 commit comments

Comments
 (0)