Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor the core's handling of firmware and BIOS images to rely less on the file system #1826

Merged
merged 69 commits into from
Sep 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
3af3687
Introduce firmware-related structs
JesseTG Aug 19, 2023
1b492ae
Fix some indents
JesseTG Aug 19, 2023
aa471a2
Move the generated firmware identifier to a constant
JesseTG Aug 19, 2023
6c67fe8
Document the WifiAccessPoint constructors
JesseTG Aug 20, 2023
c99dd13
Add some constants
JesseTG Aug 20, 2023
0ba2c89
Remove a stray comment
JesseTG Aug 20, 2023
f782b55
Implement Firmware::UserData
JesseTG Aug 20, 2023
8eee805
Add Firmware::Mask
JesseTG Aug 20, 2023
a54390b
Document Firmware::Buffer
JesseTG Aug 20, 2023
99b6fe4
Add a Firmware constructor that uses a FileHandle
JesseTG Aug 20, 2023
45b99c7
Set the default username in UserData
JesseTG Aug 20, 2023
1f2b2c4
Update the UserData checksum
JesseTG Aug 20, 2023
d980df8
Forgot to include Platform.h
JesseTG Aug 20, 2023
71af176
Remove some redundant assignments in the default Firmware constructor
JesseTG Aug 20, 2023
6815916
const-ify CRC16
JesseTG Aug 20, 2023
3af27a7
Replace the plain Firmware buffer with a Firmware object
JesseTG Aug 20, 2023
aaf4236
Fix some crashes due to undefined behavior
JesseTG Aug 20, 2023
acde5c8
Fix the user data initialization
JesseTG Aug 20, 2023
ccebe13
Follow the DS logic in determining which user data section is current
JesseTG Aug 20, 2023
4053c6a
Remove an unneeded include
JesseTG Aug 20, 2023
d5439fc
Remove another unneeded include
JesseTG Aug 20, 2023
b83548b
Initialize FirmwareMask in Firmware::Firmware
JesseTG Aug 20, 2023
16e6bf1
Use the DEFAULT_SSID constant
JesseTG Aug 22, 2023
47a5822
Add SPI_Firmware::InstallFirmware and SPI_Firmware::RemoveFirmware
JesseTG Aug 22, 2023
9c1464e
Move a logging call to after the file is written
JesseTG Aug 22, 2023
38f5c69
Add a SaveManager for the firmware
JesseTG Aug 22, 2023
7fe6bfe
Touch up the SPI_Firmware::Firmware declaration
JesseTG Aug 22, 2023
bbc7595
Move all firmware loading and customization to the frontend
JesseTG Aug 22, 2023
1584569
Call Platform::WriteFirmware when it's time to write the firmware bac…
JesseTG Aug 22, 2023
c63675a
Fix some missing stuff
JesseTG Aug 22, 2023
d379c48
Remove the Get* functions from SPI_Firmware in favor of GetFirmware()
JesseTG Aug 22, 2023
426b583
Implement SPI_Firmware::DeInit in terms of RemoveFirmware
JesseTG Aug 22, 2023
8da44b0
Add Firmware::UpdateChecksums
JesseTG Aug 22, 2023
ff65dcc
Fix an incorrect length
JesseTG Aug 22, 2023
5fcaf38
Update all checksums in the firmware after setting touch screen calib…
JesseTG Aug 24, 2023
34127bf
Use the Firmware object's Position methods
JesseTG Aug 24, 2023
1c94b3e
Remove register fields from the Firmware object
JesseTG Aug 24, 2023
1d0771b
Install the firmware before seeing if direct boot is necessary
JesseTG Aug 24, 2023
49f4375
Install the firmware before calling NDS::Reset in LoadROM
JesseTG Aug 24, 2023
1768abc
Slight cleanup in ROMManager
JesseTG Aug 24, 2023
6ffea81
Fix the default access point name
JesseTG Aug 24, 2023
70852d6
Shorten the various getters in Firmware
JesseTG Aug 24, 2023
6611193
Add qualifiers for certain uses of firmware types
JesseTG Aug 24, 2023
afc428c
Add an InstallFirmware overload that takes a unique_ptr
JesseTG Aug 24, 2023
5092609
Log when firmware is added or removed
JesseTG Aug 25, 2023
d438506
Don't clear the firmware in SPI_Firmware::Init
JesseTG Aug 26, 2023
8eb21c8
Fix a typo
JesseTG Aug 26, 2023
c10bcca
Write back the full firmware if it's not generated
JesseTG Aug 26, 2023
95f53fd
Move the FreeBIOS to an external file
JesseTG Aug 26, 2023
538003e
Load wfcsettings.bin into the correct part of the generated firmware …
JesseTG Aug 27, 2023
f19f525
Load BIOS files in the frontend, not in the core
JesseTG Aug 27, 2023
46884d2
Fix logging the firmware ID
JesseTG Aug 27, 2023
ded5b72
Add some utility functions
JesseTG Aug 30, 2023
d79b20e
Merge branch 'upupstream-master' into jtg/less-filesystem-access
JesseTG Aug 31, 2023
a7a0332
Mark Firmware's constructors as explicit
JesseTG Aug 31, 2023
87d9681
Remove obsolete ConfigEntry values
JesseTG Aug 31, 2023
17943d9
Include <locale> explicitly in ROMManager
JesseTG Aug 31, 2023
5e1bde4
Fix up some includes
JesseTG Sep 1, 2023
c8ad964
Add Firmware::IsBootable()
JesseTG Sep 2, 2023
444fe5d
Merge branch 'upupstream-master' into jtg/less-filesystem-access
JesseTG Sep 3, 2023
e94a12f
Add a newline to a log entry
JesseTG Sep 15, 2023
2e6bd43
Log the number of bytes written out in SaveManager
JesseTG Sep 15, 2023
39a39cf
Merge branch 'upupstream-master' into jtg/less-filesystem-access
JesseTG Sep 15, 2023
3b6ca28
Mark FirmwareHeader's constructor as explicit
JesseTG Sep 16, 2023
f659813
Clean up GenerateDefaultFirmware and LoadFirmwareFromFile
JesseTG Sep 16, 2023
b4de2c5
Refactor SaveManager a little bit
JesseTG Sep 16, 2023
4820de8
Remove some stray parens
JesseTG Sep 16, 2023
c4beab8
Fix some firmware-related bugs I introduced
JesseTG Sep 17, 2023
c6b046a
Slight cleanup
JesseTG Sep 17, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ add_library(core STATIC
ROMList.h
ROMList.cpp
FreeBIOS.h
FreeBIOS.cpp
RTC.cpp
Savestate.cpp
SPI.cpp
SPI_Firmware.cpp
SPU.cpp
types.h
version.h
Expand Down
64 changes: 3 additions & 61 deletions src/DSi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -548,12 +548,12 @@ void SetupDirectBoot()
DSi_NAND::DeInit();
}

u8 nwifiver = SPI_Firmware::GetNWifiVersion();
ARM9Write8(0x020005E0, nwifiver);
SPI_Firmware::WifiBoard nwifiver = SPI_Firmware::GetFirmware()->Header().WifiBoard;
ARM9Write8(0x020005E0, static_cast<u8>(nwifiver));

// TODO: these should be taken from the wifi firmware in NAND
// but, hey, this works too.
if (nwifiver == 1)
if (nwifiver == SPI_Firmware::WifiBoard::W015)
{
ARM9Write16(0x020005E2, 0xB57E);
ARM9Write32(0x020005E4, 0x00500400);
Expand Down Expand Up @@ -726,64 +726,6 @@ void SoftReset()
GPU::DispStat[1] |= (1<<6);
}

bool LoadBIOS()
{
Platform::FileHandle* f;
u32 i;

memset(ARM9iBIOS, 0, 0x10000);
memset(ARM7iBIOS, 0, 0x10000);

f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::DSi_BIOS9Path), FileMode::Read);
if (!f)
{
Log(LogLevel::Warn, "ARM9i BIOS not found\n");

for (i = 0; i < 16; i++)
((u32*)ARM9iBIOS)[i] = 0xE7FFDEFF;
}
else
{
FileRewind(f);
FileRead(ARM9iBIOS, 0x10000, 1, f);

Log(LogLevel::Info, "ARM9i BIOS loaded\n");
Platform::CloseFile(f);
}

f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::DSi_BIOS7Path), FileMode::Read);
if (!f)
{
Log(LogLevel::Warn, "ARM7i BIOS not found\n");

for (i = 0; i < 16; i++)
((u32*)ARM7iBIOS)[i] = 0xE7FFDEFF;
}
else
{
// TODO: check if the first 32 bytes are crapoed

FileRewind(f);
FileRead(ARM7iBIOS, 0x10000, 1, f);

Log(LogLevel::Info, "ARM7i BIOS loaded\n");
CloseFile(f);
}

if (!Platform::GetConfigBool(Platform::DSi_FullBIOSBoot))
{
// herp
*(u32*)&ARM9iBIOS[0] = 0xEAFFFFFE;
*(u32*)&ARM7iBIOS[0] = 0xEAFFFFFE;

// TODO!!!!
// hax the upper 32K out of the goddamn DSi
// done that :) -pcy
}

return true;
}

bool LoadNAND()
{
Log(LogLevel::Info, "Loading DSi NAND\n");
Expand Down
1 change: 0 additions & 1 deletion src/DSi.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ void SetCartInserted(bool inserted);
void SetupDirectBoot();
void SoftReset();

bool LoadBIOS();
bool LoadNAND();

void RunNDMAs(u32 cpu);
Expand Down
18 changes: 10 additions & 8 deletions src/DSi_NWifi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ DSi_NWifi::~DSi_NWifi()

void DSi_NWifi::Reset()
{
using namespace SPI_Firmware;
TransferCmd = 0xFFFFFFFF;
RemSize = 0;

Expand All @@ -163,34 +164,34 @@ void DSi_NWifi::Reset()
for (int i = 0; i < 9; i++)
Mailbox[i].Clear();

u8* mac = SPI_Firmware::GetWifiMAC();
MacAddress mac = GetFirmware()->Header().MacAddress;
Log(LogLevel::Info, "NWifi MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

u8 type = SPI_Firmware::GetNWifiVersion();
WifiBoard type = GetFirmware()->Header().WifiBoard;
switch (type)
{
case 1: // AR6002
case WifiBoard::W015: // AR6002
ROMID = 0x20000188;
ChipID = 0x02000001;
HostIntAddr = 0x00500400;
break;

case 2: // AR6013
case WifiBoard::W024: // AR6013
ROMID = 0x23000024;
ChipID = 0x0D000000;
HostIntAddr = 0x00520000;
break;

case 3: // AR6014 (3DS)
case WifiBoard::W028: // AR6014 (3DS)
ROMID = 0x2300006F;
ChipID = 0x0D000001;
HostIntAddr = 0x00520000;
Log(LogLevel::Info, "NWifi: hardware is 3DS type, unchecked\n");
break;

default:
Log(LogLevel::Warn, "NWifi: unknown hardware type, assuming AR6002\n");
Log(LogLevel::Warn, "NWifi: unknown hardware type 0x%x, assuming AR6002\n", static_cast<u8>(type));
ROMID = 0x20000188;
ChipID = 0x02000001;
HostIntAddr = 0x00500400;
Expand All @@ -201,7 +202,7 @@ void DSi_NWifi::Reset()

*(u32*)&EEPROM[0x000] = 0x300;
*(u16*)&EEPROM[0x008] = 0x8348; // TODO: determine properly (country code)
memcpy(&EEPROM[0x00A], mac, 6);
memcpy(&EEPROM[0x00A], mac.data(), mac.size());
*(u32*)&EEPROM[0x010] = 0x60000000;

memset(&EEPROM[0x03C], 0xFF, 0x70);
Expand Down Expand Up @@ -894,8 +895,9 @@ void DSi_NWifi::HTC_Command()

case 0x0004: // setup complete
{
SPI_Firmware::MacAddress mac = SPI_Firmware::GetFirmware()->Header().MacAddress;
u8 ready_evt[12];
memcpy(&ready_evt[0], SPI_Firmware::GetWifiMAC(), 6);
memcpy(&ready_evt[0], &mac, mac.size());
ready_evt[6] = 0x02;
ready_evt[7] = 0;
*(u32*)&ready_evt[8] = 0x2300006C;
Expand Down
Loading