Permalink
Browse files

Fix the Wii epoch and make the IPL.CB 0 by default

It was off by about 8 years because it was actually the same as the GC epoch, however, the reason it worked all this time was because the default RTC counter bias of the Wii was not 0, but a value that is about 8 years in seconds.  This broke custom RTC as a custom RTC of the gc epoch was underflowing b ecause the wii epoch was thought to be much later.
  • Loading branch information...
aldelaro5 committed May 9, 2018
1 parent 1ec3a4d commit 224a9426db99bdfcbc7e206db9e6539afb2b3b93
@@ -237,9 +237,7 @@ void CEXIIPL::SetCS(int _iCS)
void CEXIIPL::UpdateRTC()
{
u32 epoch =
(SConfig::GetInstance().bWii || SConfig::GetInstance().m_is_mios) ? WII_EPOCH : GC_EPOCH;
u32 rtc = Common::swap32(GetEmulatedTime(epoch));
u32 rtc = Common::swap32(GetEmulatedTime(GC_EPOCH));
std::memcpy(m_RTC, &rtc, sizeof(u32));
}
@@ -22,11 +22,8 @@ class CEXIIPL : public IEXIDevice
bool IsPresent() const override;
void DoState(PointerWrap& p) override;
static constexpr u32 UNIX_EPOCH = 0; // 1970-01-01 00:00:00
static constexpr u32 GC_EPOCH = 0x386D4380; // 2000-01-01 00:00:00
static constexpr u32 WII_EPOCH = 0x477E5826; // 2008-01-04 16:00:38
// The Wii epoch is suspiciously random, and the Wii was even
// released before it, but apparently it works anyway?
static constexpr u32 UNIX_EPOCH = 0; // 1970-01-01 00:00:00
static constexpr u32 GC_EPOCH = 0x386D4380; // 2000-01-01 00:00:00
static u32 GetEmulatedTime(u32 epoch);
static u64 NetPlay_GetEmulatedTime();
@@ -286,7 +286,7 @@ void SysConf::InsertDefaultEntries()
ipl_pc[2] = 0x14;
AddEntry({Entry::Type::SmallArray, "IPL.PC", std::move(ipl_pc)});
AddEntry({Entry::Type::Long, "IPL.CB", {0x0f, 0x11, 0x14, 0xa6}});
AddEntry({Entry::Type::Long, "IPL.CB", {0x00, 0x00, 0x00, 0x00}});
AddEntry({Entry::Type::Byte, "IPL.AR", {1}});
AddEntry({Entry::Type::Byte, "IPL.SSV", {1}});

0 comments on commit 224a942

Please sign in to comment.