summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorfires.gc <fires.gc@gmail.com>2008-07-15 08:38:04 +0000
committerfires.gc <fires.gc@gmail.com>2008-07-15 08:38:04 +0000
commit050c472b38fc2a2c9290d75ab5253bc69af3c30e (patch)
tree9ed0da84e53fad36f981970980b0101dcde14d0c /Source/Core
parent8248a8d13728a40ae779c8fab233d2eff8c4880b (diff)
fixed support for wii elf file loading
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/Boot/Boot.cpp68
-rw-r--r--Source/Core/Core/Src/HLE/HLE.cpp6
-rw-r--r--Source/Core/DolphinWX/src/Frame.cpp2
3 files changed, 44 insertions, 32 deletions
diff --git a/Source/Core/Core/Src/Boot/Boot.cpp b/Source/Core/Core/Src/Boot/Boot.cpp
index 1163d8a614..390f84d4af 100644
--- a/Source/Core/Core/Src/Boot/Boot.cpp
+++ b/Source/Core/Core/Src/Boot/Boot.cpp
@@ -210,32 +210,34 @@ void CBoot::EmulatedBIOS(bool _bDebug)
//
bool CBoot::EmulatedBIOS_Wii(bool _bDebug)
{
- if (!VolumeHandler::IsValid())
- {
- LOG(MASTER_LOG, "Invalid volume");
- return false;
- }
-
-
LOG(BOOT, "Faking Wii BIOS...");
// load settings.txt
{
- std::string filename;
- switch(VolumeHandler::GetVolume()->GetCountry())
+ std::string filename("wii/setting-eur.txt");
+ if (VolumeHandler::IsValid())
{
- case DiscIO::IVolume::COUNTRY_JAP:
- filename = "wii/setting-jpn.txt";
- break;
-
- case DiscIO::IVolume::COUNTRY_USA:
- filename = "wii/setting-usa.txt";
- break;
-
- default:
- filename = "wii/setting-eur.txt";
- break;
+ switch(VolumeHandler::GetVolume()->GetCountry())
+ {
+ case DiscIO::IVolume::COUNTRY_JAP:
+ filename = "wii/setting-jpn.txt";
+ break;
+
+ case DiscIO::IVolume::COUNTRY_USA:
+ filename = "wii/setting-usa.txt";
+ break;
+
+ case DiscIO::IVolume::COUNTRY_EUROPE:
+ filename = "wii/setting-eur.txt";
+ break;
+
+ default:
+ PanicAlert("Unknown country. Wii boot process will be switched to European settings.");
+ filename = "wii/setting-eur.txt";
+ break;
+ }
}
+
FILE* pTmp = fopen(filename.c_str(), "rb");
if (!pTmp)
{
@@ -249,22 +251,25 @@ bool CBoot::EmulatedBIOS_Wii(bool _bDebug)
// int global vars
{
+ Memory::Write_U32(0x8179b500, 0x000000f4); // __start
Memory::Write_U32(0x00000000, 0x000030f0); // apploader
Memory::Write_U16(0x0113, 0x0000315e); // apploader
Memory::Write_U32(0x5d1c9ea3, 0x00000018); // magic word it is a wii disc
Memory::Write_U32(0x01800000, 0x00000028);
Memory::Write_U32(0x04000000, 0x00003118);
Memory::Write_U32(0x00000023, 0x0000002c);
- Memory::Write_U32(0x00000000, 0x000030dc); // OSTime
- Memory::Write_U32(0x00000000, 0x000030d8); // OSTime
- Memory::Write_U32(0x00000000, 0x0000310c); // OSInit
- Memory::Write_U32(0x90000800, 0x00003124); // OSInit - MEM2 low
- Memory::Write_U32(0x933e0000, 0x00003128); // OSInit - MEM2 high
+ Memory::Write_U32(0x00000000, 0x000030dc); // Time
+ Memory::Write_U32(0x00000000, 0x000030d8); // Time
+ Memory::Write_U32(0x00000000, 0x00000030); // Init
+ Memory::Write_U32(0x00000000, 0x0000310c); // Init
+ Memory::Write_U32(0x8179d500, 0x00003110); // Init
+ Memory::Write_U32(0x90000800, 0x00003124); // Init - MEM2 low
+ Memory::Write_U32(0x933e0000, 0x00003128); // Init - MEM2 high
Memory::Write_U32(0x933e0000, 0x00003130); // IPC MEM2 low
Memory::Write_U32(0x93400000, 0x00003134); // IPC MEM2 high
- Memory::Write_U32(0x38a00040, 0x00000060); // exception init
- Memory::Write_U16(0x0000, 0x000030e6); // console type
- Memory::Write_U32(0x00000011, 0x00003138); // console type
+ Memory::Write_U32(0x38a00040, 0x00000060); // Exception init
+ Memory::Write_U16(0x0000, 0x000030e6); // Console type
+ Memory::Write_U32(0x00000011, 0x00003138); // Console type
Memory::Write_U32(0x0e7be2c0, 0x000000f8); // EXI
Memory::Write_U32(0x00000000, 0x000030c0); // EXI
Memory::Write_U32(0x00000000, 0x000030c4); // EXI
@@ -279,12 +284,19 @@ bool CBoot::EmulatedBIOS_Wii(bool _bDebug)
Memory::Write_U32(0x00000005, 0x000000cc); // VIInit
Memory::Write_U16(0x0000, 0x000030e0); // PADInit
+ // clear exception handler
+ for (int i=0x3000; i<=0x3038; i+=4)
+ {
+ Memory::Write_U32(0x00000000, i);
+ }
+
// app
VolumeHandler::ReadToPtr(Memory::GetPointer(0x3180), 0, 4);
Memory::Write_U8(0x80, 0x00003184);
}
// apploader
+ if (VolumeHandler::IsValid())
{
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
m_MSR.FP = 1;
diff --git a/Source/Core/Core/Src/HLE/HLE.cpp b/Source/Core/Core/Src/HLE/HLE.cpp
index f5cc3f8610..e92664c5bf 100644
--- a/Source/Core/Core/Src/HLE/HLE.cpp
+++ b/Source/Core/Core/Src/HLE/HLE.cpp
@@ -54,14 +54,15 @@ SPatch OSPatches[] =
// { "THPPlayerGetState", HLE_Misc:THPPlayerGetState },
- // Debugout is very nice .)
+ // debug out is very nice ;)
{ "OSReport", HLE_OS::HLE_OSReport },
{ "OSPanic", HLE_OS::HLE_OSPanic },
{ "vprintf", HLE_OS::HLE_vprintf },
{ "printf", HLE_OS::HLE_printf },
// wii only
- { "SCCheckStatus", HLE_Misc::UnimplementedFunctionFalse }, // SC is SystemConfig ... dunn
+ { "SCCheckStatus", HLE_Misc::UnimplementedFunctionFalse },
+ { "__OSInitAudioSystem", HLE_Misc::UnimplementedFunction },
// special
// { "GXPeekZ", HLE_Misc::GXPeekZ},
@@ -71,7 +72,6 @@ SPatch OSPatches[] =
SPatch OSBreakPoints[] =
{
{ "FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction },
- //{ "__OSInitAudioSystem", CHLE_Audio::__OSInitAudioSystem },
};
void PatchFunctions(const char* _gameID)
diff --git a/Source/Core/DolphinWX/src/Frame.cpp b/Source/Core/DolphinWX/src/Frame.cpp
index 6c3bfcec6a..dbfaf1065b 100644
--- a/Source/Core/DolphinWX/src/Frame.cpp
+++ b/Source/Core/DolphinWX/src/Frame.cpp
@@ -347,7 +347,7 @@ CFrame::OnOpen(wxCommandEvent& WXUNUSED (event))
wxFileSelectorDefaultWildcardStr,
wxFileSelectorDefaultWildcardStr
),
- wxFD_OPEN | wxFD_PREVIEW,
+ wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST,
this);
if (!path)