IOS: boot original BootMii through MINI
This commit is contained in:
@@ -178,6 +178,41 @@ TEST(StarletTimer, ZeroDelayAlarmMatchesImmediatelyAndUsesIRQW1C)
|
||||
EXPECT_EQ(system.GetWiiIPC().ReadStarletRegister(0x38) & INT_CAUSE_TIMER, INT_CAUSE_TIMER);
|
||||
}
|
||||
|
||||
TEST(StarletGPIO, InterruptFlagIsWriteOneToClear)
|
||||
{
|
||||
constexpr u32 hardware_base = 0x0d800000;
|
||||
constexpr u32 gpio_interrupt_level = hardware_base + 0xec;
|
||||
constexpr u32 gpio_interrupt_flag = hardware_base + 0xf0;
|
||||
constexpr u32 gpio_interrupt_mask = hardware_base + 0xf4;
|
||||
constexpr u32 gpio_owner = hardware_base + 0xfc;
|
||||
constexpr u32 power = 1;
|
||||
Core::DeclareAsCPUThread();
|
||||
auto& system = Core::System::GetInstance();
|
||||
system.GetWiiIPC().Reset();
|
||||
StarletMemory memory(system);
|
||||
memory.Reset();
|
||||
const auto read_word = [&memory](u32 address) {
|
||||
return static_cast<u32>(memory.Read8(address)) << 24 |
|
||||
static_cast<u32>(memory.Read8(address + 1)) << 16 |
|
||||
static_cast<u32>(memory.Read8(address + 2)) << 8 | memory.Read8(address + 3);
|
||||
};
|
||||
const auto write_word = [&memory](u32 address, u32 value) {
|
||||
memory.Write8(address, static_cast<u8>(value >> 24));
|
||||
memory.Write8(address + 1, static_cast<u8>(value >> 16));
|
||||
memory.Write8(address + 2, static_cast<u8>(value >> 8));
|
||||
memory.Write8(address + 3, static_cast<u8>(value));
|
||||
};
|
||||
|
||||
// BootMii selects POWER as active-high, waits, then clears the pending flag.
|
||||
// With the emulated front-panel button idle-low this must read back cleared.
|
||||
write_word(gpio_interrupt_level, power);
|
||||
write_word(gpio_interrupt_mask, power);
|
||||
write_word(gpio_owner, 0);
|
||||
write_word(gpio_interrupt_flag, power);
|
||||
EXPECT_EQ(read_word(gpio_interrupt_flag), 0u);
|
||||
EXPECT_EQ(system.GetWiiIPC().ReadStarletRegister(0x38) & INT_CAUSE_GPIO_STARLET, 0u);
|
||||
}
|
||||
|
||||
TEST(StarletAHBPROT, OriginalIOSMaskIsPreservedForBroadway)
|
||||
{
|
||||
constexpr u32 ahbprot = 0x0d800064;
|
||||
|
||||
Reference in New Issue
Block a user