Boot: Split out some code to a new function SetupGCMemory
Just like the existing function SetupWiiMemory.
This commit is contained in:
parent
a8606f5d13
commit
fea75d045c
|
@ -324,18 +324,19 @@ bool CBoot::BootUp(std::unique_ptr<BootParameters> boot)
|
|||
|
||||
SetDefaultDisc();
|
||||
|
||||
SetupMSR();
|
||||
SetupBAT(config.bWii);
|
||||
|
||||
if (config.bWii)
|
||||
{
|
||||
HID4.SBE = 1;
|
||||
SetupMSR();
|
||||
SetupBAT(config.bWii);
|
||||
// Because there is no TMD to get the requested system (IOS) version from,
|
||||
// we default to IOS58, which is the version used by the Homebrew Channel.
|
||||
SetupWiiMemory(nullptr, 0x000000010000003a);
|
||||
}
|
||||
else
|
||||
{
|
||||
EmulatedBS2_GC(nullptr, true);
|
||||
SetupGCMemory();
|
||||
}
|
||||
|
||||
PC = executable.reader->GetEntryPoint();
|
||||
|
|
|
@ -107,6 +107,7 @@ private:
|
|||
static bool EmulatedBS2(bool is_wii, const DiscIO::Volume* volume);
|
||||
static bool Load_BS2(const std::string& boot_rom_filename);
|
||||
|
||||
static void SetupGCMemory();
|
||||
static bool SetupWiiMemory(const DiscIO::Volume* volume, u64 ios_title_id);
|
||||
};
|
||||
|
||||
|
|
|
@ -152,25 +152,8 @@ bool CBoot::RunApploader(bool is_wii, const DiscIO::Volume& volume)
|
|||
return true;
|
||||
}
|
||||
|
||||
// __________________________________________________________________________________________________
|
||||
// GameCube Bootstrap 2 HLE:
|
||||
// copy the apploader to 0x81200000
|
||||
// execute the apploader, function by function, using the above utility.
|
||||
bool CBoot::EmulatedBS2_GC(const DiscIO::Volume* volume, bool skip_app_loader)
|
||||
void CBoot::SetupGCMemory()
|
||||
{
|
||||
INFO_LOG(BOOT, "Faking GC BS2...");
|
||||
|
||||
SetupMSR();
|
||||
SetupBAT(/*is_wii*/ false);
|
||||
|
||||
// Write necessary values
|
||||
// Here we write values to memory that the apploader does not take care of. Game info goes
|
||||
// to 0x80000000 according to YAGCD 4.2.
|
||||
|
||||
// It's possible to boot DOL and ELF files without a disc inserted
|
||||
if (volume)
|
||||
DVDRead(*volume, /*offset*/ 0x00000000, /*address*/ 0x00000000, 0x20, DiscIO::PARTITION_NONE);
|
||||
|
||||
// Booted from bootrom. 0xE5207C22 = booted from jtag
|
||||
PowerPC::HostWrite_U32(0x0D15EA5E, 0x80000020);
|
||||
|
||||
|
@ -182,8 +165,8 @@ bool CBoot::EmulatedBS2_GC(const DiscIO::Volume* volume, bool skip_app_loader)
|
|||
// (Seem to take different EXI paths, see Ikaruga for example)
|
||||
PowerPC::HostWrite_U32(0x10000006, 0x8000002C);
|
||||
|
||||
const bool ntsc = DiscIO::IsNTSC(SConfig::GetInstance().m_region);
|
||||
PowerPC::HostWrite_U32(ntsc ? 0 : 1, 0x800000CC); // Fake the VI Init of the IPL (YAGCD 4.2.1.4)
|
||||
// Fake the VI Init of the IPL (YAGCD 4.2.1.4)
|
||||
PowerPC::HostWrite_U32(DiscIO::IsNTSC(SConfig::GetInstance().m_region) ? 0 : 1, 0x800000CC);
|
||||
|
||||
PowerPC::HostWrite_U32(0x01000000, 0x800000d0); // ARAM Size. 16MB main + 4/16/32MB external
|
||||
// (retail consoles have no external ARAM)
|
||||
|
@ -199,10 +182,28 @@ bool CBoot::EmulatedBS2_GC(const DiscIO::Volume* volume, bool skip_app_loader)
|
|||
|
||||
// HIO checks this
|
||||
// PowerPC::HostWrite_U16(0x8200, 0x000030e6); // Console type
|
||||
}
|
||||
|
||||
// __________________________________________________________________________________________________
|
||||
// GameCube Bootstrap 2 HLE:
|
||||
// copy the apploader to 0x81200000
|
||||
// execute the apploader, function by function, using the above utility.
|
||||
bool CBoot::EmulatedBS2_GC(const DiscIO::Volume* volume, bool skip_app_loader)
|
||||
{
|
||||
INFO_LOG(BOOT, "Faking GC BS2...");
|
||||
|
||||
SetupMSR();
|
||||
SetupBAT(/*is_wii*/ false);
|
||||
|
||||
SetupGCMemory();
|
||||
|
||||
if (!volume)
|
||||
return false;
|
||||
|
||||
DVDRead(*volume, /*offset*/ 0x00000000, /*address*/ 0x00000000, 0x20, DiscIO::PARTITION_NONE);
|
||||
|
||||
const bool ntsc = DiscIO::IsNTSC(SConfig::GetInstance().m_region);
|
||||
|
||||
// Setup pointers like real BS2 does
|
||||
|
||||
// StackPointer, used to be set to 0x816ffff0
|
||||
|
|
Loading…
Reference in New Issue