diff --git a/Source/Core/Core/Src/Boot/Boot_BIOSEmu.cpp b/Source/Core/Core/Src/Boot/Boot_BIOSEmu.cpp
index 372957a907..f051b30b44 100644
--- a/Source/Core/Core/Src/Boot/Boot_BIOSEmu.cpp
+++ b/Source/Core/Core/Src/Boot/Boot_BIOSEmu.cpp
@@ -65,11 +65,11 @@ void CBoot::EmulatedBIOS(bool _bDebug)
//
DVDInterface::DVDRead(0x00000000, 0x80000000, 10); // write boot info needed for multidisc games
- Memory::Write_U32(0x4c000064, 0x80000300); // write default DFI Handler: rfi
- Memory::Write_U32(0x4c000064, 0x80000800); // write default FPU Handler: rfi
+ Memory::Write_U32(0x4c000064, 0x80000300); // write default DFI Handler: rfi
+ Memory::Write_U32(0x4c000064, 0x80000800); // write default FPU Handler: rfi
Memory::Write_U32(0x4c000064, 0x80000C00); // write default Syscall Handler: rfi
- Memory::Write_U32(0xc2339f3d, 0x8000001C); // game disc
- Memory::Write_U32(0x0D15EA5E, 0x80000020); // booted from bootrom. 0xE5207C22 = booted from jtag
+ Memory::Write_U32(0xc2339f3d, 0x8000001C); // game disc
+ Memory::Write_U32(0x0D15EA5E, 0x80000020); // booted from bootrom. 0xE5207C22 = booted from jtag
Memory::Write_U32(0x01800000, 0x80000028); // Physical Memory Size
// On any of the production boards, ikaruga fails to read the memcard the first time. It succeeds on the second time though.
@@ -83,9 +83,9 @@ void CBoot::EmulatedBIOS(bool _bDebug)
// Load Apploader to Memory - The apploader is hardcoded to begin at byte 9 280 on the disc,
// but it seems like the size can be variable. Compare with yagcd chap 13.
- //
+
PowerPC::ppcState.gpr[1] = 0x816ffff0; // StackPointer
- u32 iAppLoaderOffset = 0x2440; // 0x1c40 - 2MB lower...perhaps used on early GCMs? MYSTERY OLD COMMENT
+ u32 iAppLoaderOffset = 0x2440; // 0x1c40 - 2MB lower...perhaps used on early GCMs? MYSTERY OLD COMMENT
u32 iAppLoaderEntry = VolumeHandler::Read32(iAppLoaderOffset + 0x10);
u32 iAppLoaderSize = VolumeHandler::Read32(iAppLoaderOffset + 0x14);
if ((iAppLoaderEntry == (u32)-1) || (iAppLoaderSize == (u32)-1))
@@ -98,15 +98,15 @@ void CBoot::EmulatedBIOS(bool _bDebug)
u32 iAppLoaderFuncAddr = 0x80003100;
PowerPC::ppcState.gpr[3] = iAppLoaderFuncAddr + 0;
PowerPC::ppcState.gpr[4] = iAppLoaderFuncAddr + 4;
- PowerPC::ppcState.gpr[5] = iAppLoaderFuncAddr + 8;
+ PowerPC::ppcState.gpr[5] = iAppLoaderFuncAddr + 8;
RunFunction(iAppLoaderEntry);
u32 iAppLoaderInit = Memory::ReadUnchecked_U32(iAppLoaderFuncAddr + 0);
u32 iAppLoaderMain = Memory::ReadUnchecked_U32(iAppLoaderFuncAddr + 4);
u32 iAppLoaderClose = Memory::ReadUnchecked_U32(iAppLoaderFuncAddr + 8);
-
+
// iAppLoaderInit
DEBUG_LOG(MASTER_LOG, "Call iAppLoaderInit");
- PowerPC::ppcState.gpr[3] = 0x81300000;
+ PowerPC::ppcState.gpr[3] = 0x81300000;
RunFunction(iAppLoaderInit);
// iAppLoaderMain - Here we load the apploader, the DOL (the exe) and the FST (filesystem).
@@ -141,136 +141,139 @@ void CBoot::EmulatedBIOS(bool _bDebug)
// return
PC = PowerPC::ppcState.gpr[3];
- // --- preinit some stuff from bios ---
+ // --- preinit some stuff from bios ---
- // Bus Clock Speed
- Memory::Write_U32(0x09a7ec80, 0x800000F8);
- // CPU Clock Speed
- Memory::Write_U32(0x1cf7c580, 0x800000FC);
+ // Bus Clock Speed
+ Memory::Write_U32(0x09a7ec80, 0x800000F8);
+ // CPU Clock Speed
+ Memory::Write_U32(0x1cf7c580, 0x800000FC);
- // fake the VI Init of the BIOS
- Memory::Write_U32(SConfig::GetInstance().m_LocalCoreStartupParameter.bNTSC
- ? 0 : 1, 0x800000CC);
+ // fake the VI Init of the BIOS
+ Memory::Write_U32(SConfig::GetInstance().m_LocalCoreStartupParameter.bNTSC
+ ? 0 : 1, 0x800000CC);
- // preset time base ticks
- Memory::Write_U64( (u64)CEXIIPL::GetGCTime() * (u64)40500000, 0x800030D8);
+ // preset time base ticks
+ Memory::Write_U64( (u64)CEXIIPL::GetGCTime() * (u64)40500000, 0x800030D8);
}
bool CBoot::SetupWiiMemory(unsigned int _CountryCode)
{
- INFO_LOG(BOOT, "Setup Wii Memory...");
+ INFO_LOG(BOOT, "Setup Wii Memory...");
- // Write the 256 byte setting.txt to memory. This may not be needed as
- // most or all games read the setting.txt file from
- // \title\00000001\00000002\data\setting.txt directly after the read the
- // SYSCONF file. The games also read it to 0x3800, what is a little strange
- // however is that it only reads the first 100 bytes of it.
- std::string filename(File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_EUR_SETTING);
- switch((DiscIO::IVolume::ECountry)_CountryCode)
- {
- case DiscIO::IVolume::COUNTRY_JAP:
- filename = File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_JAP_SETTING;
- break;
+ // Write the 256 byte setting.txt to memory. This may not be needed as
+ // most or all games read the setting.txt file from
+ // \title\00000001\00000002\data\setting.txt directly after the read the
+ // SYSCONF file. The games also read it to 0x3800, what is a little strange
+ // however is that it only reads the first 100 bytes of it.
+ std::string filename(File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_EUR_SETTING);
+ switch((DiscIO::IVolume::ECountry)_CountryCode)
+ {
+ case DiscIO::IVolume::COUNTRY_KOREA:
+ case DiscIO::IVolume::COUNTRY_TAIWAN:
+ // TODO: Determine if Korea / Taiwan have their own specific settings.
+ case DiscIO::IVolume::COUNTRY_JAPAN:
+ filename = File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_JAP_SETTING;
+ break;
- case DiscIO::IVolume::COUNTRY_USA:
- filename = File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_USA_SETTING;
- break;
+ case DiscIO::IVolume::COUNTRY_USA:
+ filename = File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_USA_SETTING;
+ break;
- case DiscIO::IVolume::COUNTRY_EUROPE:
- filename = File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_EUR_SETTING;
- break;
+ case DiscIO::IVolume::COUNTRY_EUROPE:
+ filename = File::GetSysDirectory() + WII_SYS_DIR + DIR_SEP + WII_EUR_SETTING;
+ break;
- default:
- // PanicAlert("SetupWiiMem: Unknown country. Wii boot process will be switched to European settings.");
- filename = WII_EUR_SETTING_FILE;
- break;
- }
+ default:
+ // PanicAlert("SetupWiiMem: Unknown country. Wii boot process will be switched to European settings.");
+ filename = WII_EUR_SETTING_FILE;
+ break;
+ }
- FILE* pTmp = fopen(filename.c_str(), "rb");
- if (!pTmp)
- {
- PanicAlert("SetupWiiMem: Cant find setting file");
- return false;
- }
+ FILE* pTmp = fopen(filename.c_str(), "rb");
+ if (!pTmp)
+ {
+ PanicAlert("SetupWiiMem: Cant find setting file");
+ return false;
+ }
- fread(Memory::GetPointer(0x3800), 256, 1, pTmp);
- fclose(pTmp);
+ fread(Memory::GetPointer(0x3800), 256, 1, pTmp);
+ fclose(pTmp);
- /* Set hardcoded global variables to Wii memory. These are partly collected from
- Wiibrew. These values are needed for the games to function correctly. A few
- values in this region will also be placed here by the game as it boots.
- They are:
+ /* Set hardcoded global variables to Wii memory. These are partly collected from
+ Wiibrew. These values are needed for the games to function correctly. A few
+ values in this region will also be placed here by the game as it boots.
+ They are:
- // Strange values that I don't know the meaning of, all games write these
- 0x00 to 0x18: 0x029f0010
- 0x029f0033
- 0x029f0034
- 0x029f0035
- 0x029f0036
- 0x029f0037
- 0x029f0038
- 0x029f0039 // Replaces the previous 0x5d1c9ea3 magic word
+ // Strange values that I don't know the meaning of, all games write these
+ 0x00 to 0x18: 0x029f0010
+ 0x029f0033
+ 0x029f0034
+ 0x029f0035
+ 0x029f0036
+ 0x029f0037
+ 0x029f0038
+ 0x029f0039 // Replaces the previous 0x5d1c9ea3 magic word
- 0x80000038 Start of FST
- 0x8000003c Size of FST Size
- 0x80000060 Copyright code */
+ 0x80000038 Start of FST
+ 0x8000003c Size of FST Size
+ 0x80000060 Copyright code */
- DVDInterface::DVDRead(0x00000000, 0x00000000, 10); // Game Code
- Memory::Write_U32(0x5d1c9ea3, 0x00000018); // Magic word it is a wii disc
- Memory::Write_U32(0x0D15EA5E, 0x00000020); // Another magic word
- Memory::Write_U32(0x00000001, 0x00000024); // Unknown
- Memory::Write_U32(0x01800000, 0x00000028); // MEM1 size 24MB
- Memory::Write_U32(0x00000023, 0x0000002c); // Production Board Model
- Memory::Write_U32(0x00000000, 0x00000030); // Init
- Memory::Write_U32(0x817FEC60, 0x00000034); // Init
- // 38, 3C should get start, size of FST through apploader
- Memory::Write_U32(0x38a00040, 0x00000060); // Exception init
- Memory::Write_U32(0x8008f7b8, 0x000000e4); // Thread Init
- Memory::Write_U32(0x01800000, 0x000000f0); // "Simulated memory size" (debug mode?)
- Memory::Write_U32(0x8179b500, 0x000000f4); // __start
- Memory::Write_U32(0x0e7be2c0, 0x000000f8); // Bus speed
- Memory::Write_U32(0x2B73A840, 0x000000fc); // CPU speed
- Memory::Write_U16(0x0000, 0x000030e6); // Console type
- Memory::Write_U32(0x00000000, 0x000030c0); // EXI
- Memory::Write_U32(0x00000000, 0x000030c4); // EXI
- Memory::Write_U32(0x00000000, 0x000030dc); // Time
- Memory::Write_U32(0x00000000, 0x000030d8); // Time
- Memory::Write_U32(0x00000000, 0x000030f0); // Apploader
- Memory::Write_U32(0x01800000, 0x00003100); // BAT
- Memory::Write_U32(0x01800000, 0x00003104); // BAT
- Memory::Write_U32(0x00000000, 0x0000310c); // Init
- Memory::Write_U32(0x8179d500, 0x00003110); // Init
- Memory::Write_U32(0x04000000, 0x00003118); // Unknown
- Memory::Write_U32(0x04000000, 0x0000311c); // BAT
- Memory::Write_U32(0x93400000, 0x00003120); // BAT
- Memory::Write_U32(0x90000800, 0x00003124); // Init - MEM2 low
- Memory::Write_U32(0x93ae0000, 0x00003128); // Init - MEM2 high
- Memory::Write_U32(0x93ae0000, 0x00003130); // IOS MEM2 low
- Memory::Write_U32(0x93b00000, 0x00003134); // IOS MEM2 high
- Memory::Write_U32(0x00000011, 0x00003138); // Console type
+ DVDInterface::DVDRead(0x00000000, 0x00000000, 10); // Game Code
+ Memory::Write_U32(0x5d1c9ea3, 0x00000018); // Magic word it is a wii disc
+ Memory::Write_U32(0x0D15EA5E, 0x00000020); // Another magic word
+ Memory::Write_U32(0x00000001, 0x00000024); // Unknown
+ Memory::Write_U32(0x01800000, 0x00000028); // MEM1 size 24MB
+ Memory::Write_U32(0x00000023, 0x0000002c); // Production Board Model
+ Memory::Write_U32(0x00000000, 0x00000030); // Init
+ Memory::Write_U32(0x817FEC60, 0x00000034); // Init
+ // 38, 3C should get start, size of FST through apploader
+ Memory::Write_U32(0x38a00040, 0x00000060); // Exception init
+ Memory::Write_U32(0x8008f7b8, 0x000000e4); // Thread Init
+ Memory::Write_U32(0x01800000, 0x000000f0); // "Simulated memory size" (debug mode?)
+ Memory::Write_U32(0x8179b500, 0x000000f4); // __start
+ Memory::Write_U32(0x0e7be2c0, 0x000000f8); // Bus speed
+ Memory::Write_U32(0x2B73A840, 0x000000fc); // CPU speed
+ Memory::Write_U16(0x0000, 0x000030e6); // Console type
+ Memory::Write_U32(0x00000000, 0x000030c0); // EXI
+ Memory::Write_U32(0x00000000, 0x000030c4); // EXI
+ Memory::Write_U32(0x00000000, 0x000030dc); // Time
+ Memory::Write_U32(0x00000000, 0x000030d8); // Time
+ Memory::Write_U32(0x00000000, 0x000030f0); // Apploader
+ Memory::Write_U32(0x01800000, 0x00003100); // BAT
+ Memory::Write_U32(0x01800000, 0x00003104); // BAT
+ Memory::Write_U32(0x00000000, 0x0000310c); // Init
+ Memory::Write_U32(0x8179d500, 0x00003110); // Init
+ Memory::Write_U32(0x04000000, 0x00003118); // Unknown
+ Memory::Write_U32(0x04000000, 0x0000311c); // BAT
+ Memory::Write_U32(0x93400000, 0x00003120); // BAT
+ Memory::Write_U32(0x90000800, 0x00003124); // Init - MEM2 low
+ Memory::Write_U32(0x93ae0000, 0x00003128); // Init - MEM2 high
+ Memory::Write_U32(0x93ae0000, 0x00003130); // IOS MEM2 low
+ Memory::Write_U32(0x93b00000, 0x00003134); // IOS MEM2 high
+ Memory::Write_U32(0x00000011, 0x00003138); // Console type
// 40 is copied from 88 after running apploader
Memory::Write_U32(0x00062507, 0x00003144); // IOS date in USA format
Memory::Write_U16(0x0113, 0x0000315e); // Apploader
- Memory::Write_U32(0x0000FF16, 0x00003158); // DDR ram vendor code
+ Memory::Write_U32(0x0000FF16, 0x00003158); // DDR ram vendor code
Memory::Write_U32(0x00000000, 0x00003160); // Init semaphore (sysmenu waits for this to clear)
- Memory::Write_U8(0x80, 0x0000315c); // OSInit
- Memory::Write_U8(0x00, 0x00000006); // DVDInit
- Memory::Write_U8(0x00, 0x00000007); // DVDInit
- Memory::Write_U16(0x0000, 0x000030e0); // PADInit
- Memory::Write_U32(0x80000000, 0x00003184); // GameID Address
+ Memory::Write_U8(0x80, 0x0000315c); // OSInit
+ Memory::Write_U8(0x00, 0x00000006); // DVDInit
+ Memory::Write_U8(0x00, 0x00000007); // DVDInit
+ Memory::Write_U16(0x0000, 0x000030e0); // PADInit
+ Memory::Write_U32(0x80000000, 0x00003184); // GameID Address
- // Fake the VI Init of the BIOS
- Memory::Write_U32(SConfig::GetInstance().m_LocalCoreStartupParameter.bNTSC ? 0 : 1, 0x000000CC);
+ // Fake the VI Init of the BIOS
+ Memory::Write_U32(SConfig::GetInstance().m_LocalCoreStartupParameter.bNTSC ? 0 : 1, 0x000000CC);
- // Clear exception handler. Why? Don't we begin with only zeros?
- for (int i = 0x3000; i <= 0x3038; i += 4)
- {
- Memory::Write_U32(0x00000000, 0x80000000 + i);
- }
- return true;
+ // Clear exception handler. Why? Don't we begin with only zeros?
+ for (int i = 0x3000; i <= 0x3038; i += 4)
+ {
+ Memory::Write_U32(0x00000000, 0x80000000 + i);
+ }
+ return true;
}
// __________________________________________________________________________________________________
@@ -283,28 +286,28 @@ bool CBoot::EmulatedBIOS_Wii(bool _bDebug)
{
INFO_LOG(BOOT, "Faking Wii BIOS...");
- // setup wii memory
- DiscIO::IVolume::ECountry CountryCode = DiscIO::IVolume::COUNTRY_UNKNOWN;
- if (VolumeHandler::IsValid())
- CountryCode = VolumeHandler::GetVolume()->GetCountry();
- if (SetupWiiMemory(CountryCode) == false)
- return false;
+ // setup wii memory
+ DiscIO::IVolume::ECountry CountryCode = DiscIO::IVolume::COUNTRY_UNKNOWN;
+ if (VolumeHandler::IsValid())
+ CountryCode = VolumeHandler::GetVolume()->GetCountry();
+ if (SetupWiiMemory(CountryCode) == false)
+ return false;
- // This is some kind of consistency check that is compared to the 0x00
- // values as the game boots. This location keep the 4 byte ID for as long
- // as the game is running. The 6 byte ID at 0x00 is overwritten sometime
- // after this check during booting.
- VolumeHandler::ReadToPtr(Memory::GetPointer(0x3180), 0, 4);
+ // This is some kind of consistency check that is compared to the 0x00
+ // values as the game boots. This location keep the 4 byte ID for as long
+ // as the game is running. The 6 byte ID at 0x00 is overwritten sometime
+ // after this check during booting.
+ VolumeHandler::ReadToPtr(Memory::GetPointer(0x3180), 0, 4);
// Execute the apploader
- if (VolumeHandler::IsValid() && VolumeHandler::IsWii())
+ if (VolumeHandler::IsValid() && VolumeHandler::IsWii())
{
UReg_MSR& m_MSR = ((UReg_MSR&)PowerPC::ppcState.msr);
m_MSR.FP = 1;
Memory::Write_U32(0x4c000064, 0x80000300); // write default DFI Handler: rfi
- Memory::Write_U32(0x4c000064, 0x80000800); // write default FPU Handler: rfi
- Memory::Write_U32(0x4c000064, 0x80000C00); // write default Syscall Handler: rfi
+ Memory::Write_U32(0x4c000064, 0x80000800); // write default FPU Handler: rfi
+ Memory::Write_U32(0x4c000064, 0x80000C00); // write default Syscall Handler: rfi
Memory::Write_U32(((1 & 0x3f) << 26) | 2, 0x81300000); // HLE OSReport for Apploader
diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp
index cf920b8a77..5ddffb07b1 100644
--- a/Source/Core/Core/Src/CoreParameter.cpp
+++ b/Source/Core/Core/Src/CoreParameter.cpp
@@ -109,7 +109,10 @@ bool SCoreStartupParameter::AutoSetup(EBootBios _BootBios)
Region = USA_DIR;
break;
- case DiscIO::IVolume::COUNTRY_JAP:
+ case DiscIO::IVolume::COUNTRY_TAIWAN:
+ case DiscIO::IVolume::COUNTRY_KOREA:
+ // TODO: Should these have their own Region Dir?
+ case DiscIO::IVolume::COUNTRY_JAPAN:
bNTSC = true;
Region = JAP_DIR;
break;
diff --git a/Source/Core/DiscIO/DiscIO.vcproj b/Source/Core/DiscIO/DiscIO.vcproj
index 049bb90a08..a03460c1da 100644
--- a/Source/Core/DiscIO/DiscIO.vcproj
+++ b/Source/Core/DiscIO/DiscIO.vcproj
@@ -536,6 +536,58 @@
RelativePath=".\Src\Volume.h"
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Core/DiscIO/Src/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp
index 4f89f56090..0815e3d9fd 100644
--- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp
+++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp
@@ -31,48 +31,48 @@ namespace DiscIO
class CSharedContent
-{
+{
public:
-
- static CSharedContent& AccessInstance() { return m_Instance; }
- std::string GetFilenameFromSHA1(u8* _pHash);
+ static CSharedContent& AccessInstance() { return m_Instance; }
+
+ std::string GetFilenameFromSHA1(u8* _pHash);
private:
- CSharedContent();
+ CSharedContent();
- virtual ~CSharedContent();
+ virtual ~CSharedContent();
- struct SElement
- {
- u8 FileName[8];
- u8 SHA1Hash[20];
- };
+ struct SElement
+ {
+ u8 FileName[8];
+ u8 SHA1Hash[20];
+ };
- std::vector m_Elements;
- static CSharedContent m_Instance;
+ std::vector m_Elements;
+ static CSharedContent m_Instance;
};
CSharedContent CSharedContent::m_Instance;
CSharedContent::CSharedContent()
{
- char szFilename[1024];
- sprintf(szFilename, "%sshared1/content.map", FULL_WII_USER_DIR);
- if (File::Exists(szFilename))
- {
- FILE* pFile = fopen(szFilename, "rb");
- while(!feof(pFile))
- {
- SElement Element;
- if (fread(&Element, sizeof(SElement), 1, pFile) == 1)
- {
- m_Elements.push_back(Element);
- }
- }
- }
+ char szFilename[1024];
+ sprintf(szFilename, "%sshared1/content.map", FULL_WII_USER_DIR);
+ if (File::Exists(szFilename))
+ {
+ FILE* pFile = fopen(szFilename, "rb");
+ while(!feof(pFile))
+ {
+ SElement Element;
+ if (fread(&Element, sizeof(SElement), 1, pFile) == 1)
+ {
+ m_Elements.push_back(Element);
+ }
+ }
+ }
}
CSharedContent::~CSharedContent()
@@ -80,18 +80,18 @@ CSharedContent::~CSharedContent()
std::string CSharedContent::GetFilenameFromSHA1(u8* _pHash)
{
- for (size_t i=0; i& GetContent() const { return m_Content; }
+ const std::vector& GetContent() const { return m_Content; }
- const u16 GetTitleVersion() const {return m_TileVersion;}
- const u16 GetNumEntries() const {return m_numEntries;}
- const DiscIO::IVolume::ECountry GetCountry() const;
+ const u16 GetTitleVersion() const {return m_TileVersion;}
+ const u16 GetNumEntries() const {return m_numEntries;}
+ const DiscIO::IVolume::ECountry GetCountry() const;
private:
- bool m_Valid;
- u64 m_TitleID;
+ bool m_Valid;
+ u64 m_TitleID;
u16 m_IosVersion;
- u32 m_BootIndex;
- u16 m_numEntries;
- u16 m_TileVersion;
- u8 m_TicketView[TICKET_VIEW_SIZE];
+ u32 m_BootIndex;
+ u16 m_numEntries;
+ u16 m_TileVersion;
+ u8 m_TicketView[TICKET_VIEW_SIZE];
u8 m_TmdHeader[TMD_HEADER_SIZE];
- std::vector m_Content;
+ std::vector m_Content;
- bool CreateFromDirectory(const std::string& _rPath);
- bool CreateFromWAD(const std::string& _rName);
+ bool CreateFromDirectory(const std::string& _rPath);
+ bool CreateFromWAD(const std::string& _rName);
- void AESDecode(u8* _pKey, u8* _IV, u8* _pSrc, u32 _Size, u8* _pDest);
+ void AESDecode(u8* _pKey, u8* _IV, u8* _pSrc, u32 _Size, u8* _pDest);
- void GetKeyFromTicket(u8* pTicket, u8* pTicketKey);
+ void GetKeyFromTicket(u8* pTicket, u8* pTicketKey);
- bool ParseTMD(u8* pDataApp, u32 pDataAppSize, u8* pTicket, u8* pTMD);
+ bool ParseTMD(u8* pDataApp, u32 pDataAppSize, u8* pTicket, u8* pTMD);
};
CNANDContentLoader::CNANDContentLoader(const std::string& _rName)
- : m_TitleID(-1)
- , m_BootIndex(-1)
- , m_Valid(false)
+ : m_TitleID(-1)
+ , m_BootIndex(-1)
+ , m_Valid(false)
, m_IosVersion(0x09)
{
- if (File::IsDirectory(_rName.c_str()))
- {
- m_Valid = CreateFromDirectory(_rName);
- }
- else if (File::Exists(_rName.c_str()))
- {
- m_Valid = CreateFromWAD(_rName);
- }
- else
- {
-// _dbg_assert_msg_(BOOT, 0, "CNANDContentLoader loads neither folder nor file");
- }
+ if (File::IsDirectory(_rName.c_str()))
+ {
+ m_Valid = CreateFromDirectory(_rName);
+ }
+ else if (File::Exists(_rName.c_str()))
+ {
+ m_Valid = CreateFromWAD(_rName);
+ }
+ else
+ {
+// _dbg_assert_msg_(BOOT, 0, "CNANDContentLoader loads neither folder nor file");
+ }
}
CNANDContentLoader::~CNANDContentLoader()
{
- for (size_t i=0; isecond;
- itr++;
- }
- m_Map.clear();
+ CNANDContentMap::iterator itr = m_Map.begin();
+ while (itr != m_Map.end())
+ {
+ delete itr->second;
+ itr++;
+ }
+ m_Map.clear();
}
const INANDContentLoader& CNANDContentManager::GetNANDLoader(const std::string& _rName)
{
- std::string KeyString(_rName);
+ std::string KeyString(_rName);
- std::transform(KeyString.begin(), KeyString.end(), KeyString.begin(),
- (int(*)(int)) toupper);
+ std::transform(KeyString.begin(), KeyString.end(), KeyString.begin(),
+ (int(*)(int)) toupper);
- CNANDContentMap::iterator itr = m_Map.find(KeyString);
- if (itr != m_Map.end())
- return *itr->second;
+ CNANDContentMap::iterator itr = m_Map.find(KeyString);
+ if (itr != m_Map.end())
+ return *itr->second;
- m_Map[KeyString] = new CNANDContentLoader(KeyString);
- return *m_Map[KeyString];
+ m_Map[KeyString] = new CNANDContentLoader(KeyString);
+ return *m_Map[KeyString];
}
-
-
-
-
-
} // namespace end
-
-
diff --git a/Source/Core/DiscIO/Src/SConscript b/Source/Core/DiscIO/Src/SConscript
index 66279989e0..32d8eb4d3a 100644
--- a/Source/Core/DiscIO/Src/SConscript
+++ b/Source/Core/DiscIO/Src/SConscript
@@ -14,13 +14,14 @@ files = [
'FileHandlerARC.cpp',
'Filesystem.cpp',
'FileSystemGCWii.cpp',
+ 'VolumeCommon.cpp',
'VolumeCreator.cpp',
'VolumeDirectory.cpp',
'VolumeGC.cpp',
- 'VolumeWad.cpp',
+ 'VolumeWad.cpp',
'VolumeWiiCrypted.cpp',
'NANDContentLoader.cpp',
- 'WiiWad.cpp',
+ 'WiiWad.cpp',
'AES/aes_cbc.c',
'AES/aes_core.c',
]
diff --git a/Source/Core/DiscIO/Src/Volume.h b/Source/Core/DiscIO/Src/Volume.h
index 6ef7d4c608..c783f85c83 100644
--- a/Source/Core/DiscIO/Src/Volume.h
+++ b/Source/Core/DiscIO/Src/Volume.h
@@ -52,9 +52,11 @@ class IVolume
COUNTRY_EUROPE = 0,
COUNTRY_FRANCE = 1,
COUNTRY_USA = 2,
- COUNTRY_JAP,
- COUNTRY_KOR,
+ COUNTRY_JAPAN,
+ COUNTRY_KOREA,
COUNTRY_ITALY,
+ COUNTRY_TAIWAN,
+ COUNTRY_SDK,
COUNTRY_UNKNOWN,
NUMBER_OF_COUNTRIES
};
@@ -62,6 +64,10 @@ class IVolume
virtual ECountry GetCountry() const = 0;
virtual u64 GetSize() const = 0;
};
+
+// Generic Switch function for all volumes
+IVolume::ECountry CountrySwitch(u8 CountryCode);
+
} // namespace
#endif
diff --git a/Source/Core/DiscIO/Src/VolumeDirectory.cpp b/Source/Core/DiscIO/Src/VolumeDirectory.cpp
index 4da377b451..2493b0a609 100644
--- a/Source/Core/DiscIO/Src/VolumeDirectory.cpp
+++ b/Source/Core/DiscIO/Src/VolumeDirectory.cpp
@@ -163,52 +163,7 @@ IVolume::ECountry CVolumeDirectory::GetCountry() const
u8 CountryCode = m_diskHeader[3];
- ECountry country = COUNTRY_UNKNOWN;
-
- switch (CountryCode)
- {
- case 'S':
- country = COUNTRY_EUROPE;
- break; // PAL <- that is shitty :) zelda demo disc
-
- case 'P':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'D':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'F':
- country = COUNTRY_FRANCE;
- break; // PAL
-
- case 'I':
- country = COUNTRY_ITALY;
- break; // PAL
-
- case 'X':
- country = COUNTRY_EUROPE;
- break; // XIII <- uses X but is PAL rip
-
- case 'E':
- country = COUNTRY_USA;
- break; // USA
-
- case 'J':
- country = COUNTRY_JAP;
- break; // JAP
-
- case 'O':
- country = COUNTRY_UNKNOWN;
- break; // SDK
-
- default:
- country = COUNTRY_UNKNOWN;
- break;
- }
-
- return(country);
+ return CountrySwitch(CountryCode);
}
std::string CVolumeDirectory::GetMakerID() const
@@ -250,18 +205,12 @@ u64 CVolumeDirectory::GetSize() const
return 0;
}
-static const char DIR_SEPARATOR =
-#ifdef _WIN32
- '\\';
-#else
- '/';
-#endif
std::string CVolumeDirectory::ExtractDirectoryName(const std::string& _rDirectory)
{
std::string directoryName = _rDirectory;
- size_t lastSep = directoryName.find_last_of(DIR_SEPARATOR);
+ size_t lastSep = directoryName.find_last_of(DIR_SEP_CHR);
if(lastSep != directoryName.size() - 1)
{
diff --git a/Source/Core/DiscIO/Src/VolumeGC.cpp b/Source/Core/DiscIO/Src/VolumeGC.cpp
index 3082d74aa2..724cd93174 100644
--- a/Source/Core/DiscIO/Src/VolumeGC.cpp
+++ b/Source/Core/DiscIO/Src/VolumeGC.cpp
@@ -70,53 +70,7 @@ IVolume::ECountry CVolumeGC::GetCountry() const
u8 CountryCode;
m_pReader->Read(3, 1, &CountryCode);
- ECountry country = COUNTRY_UNKNOWN;
-
- switch (CountryCode)
- {
- case 'S':
- country = COUNTRY_EUROPE;
- break; // PAL // <- that is shitty :) zelda demo disc
-
- case 'P':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'D':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'F':
- country = COUNTRY_FRANCE;
- break; // PAL
-
- case 'I':
- country = COUNTRY_ITALY;
- break; // PAL
-
- case 'X':
- country = COUNTRY_EUROPE;
- break; // XIII <- uses X but is PAL
-
- case 'E':
- country = COUNTRY_USA;
- break; // USA
-
- case 'J':
- country = COUNTRY_JAP;
- break; // JAP
-
- case 'O':
- country = COUNTRY_UNKNOWN;
- break; // SDK
-
- default:
- // PanicAlert(StringFromFormat("Unknown Country Code!").c_str());
- country = COUNTRY_UNKNOWN;
- break;
- }
-
- return(country);
+ return CountrySwitch(CountryCode);
}
std::string CVolumeGC::GetMakerID() const
diff --git a/Source/Core/DiscIO/Src/VolumeWad.cpp b/Source/Core/DiscIO/Src/VolumeWad.cpp
index 02112b656b..9c3eb5edbe 100644
--- a/Source/Core/DiscIO/Src/VolumeWad.cpp
+++ b/Source/Core/DiscIO/Src/VolumeWad.cpp
@@ -1,202 +1,156 @@
-// Copyright (C) 2003-2009 Dolphin Project.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, version 2.0.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License 2.0 for more details.
-
-// A copy of the GPL 2.0 should have been included with the program.
-// If not, see http://www.gnu.org/licenses/
-
-// Official SVN repository and contact information can be found at
-// http://code.google.com/p/dolphin-emu/
-
-#include "stdafx.h"
-#include
-
-#include "VolumeWad.h"
-#include "StringUtil.h"
-#include "MathUtil.h"
-
-#define ALIGN_40(x) ROUND_UP(Common::swap32(x), 0x40)
-
-namespace DiscIO
-{
-CVolumeWAD::CVolumeWAD(IBlobReader* _pReader)
- : m_pReader(_pReader), OpeningBnrOffset(0), hdr_size(0), cert_size(0), tick_size(0), tmd_size(0), data_size(0)
-{
- Read(0x00, 4, (u8*)&hdr_size);
- Read(0x08, 4, (u8*)&cert_size);
- Read(0x10, 4, (u8*)&tick_size);
- Read(0x14, 4, (u8*)&tmd_size);
- Read(0x18, 4, (u8*)&data_size);
-
- OpeningBnrOffset = ALIGN_40(hdr_size) + ALIGN_40(cert_size) + ALIGN_40(tick_size) + ALIGN_40(tmd_size) + ALIGN_40(data_size);
-}
-
-CVolumeWAD::~CVolumeWAD()
-{
- delete m_pReader;
-}
-
-bool CVolumeWAD::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const
-{
- if (m_pReader == NULL)
- return false;
-
- return m_pReader->Read(_Offset, _Length, _pBuffer);
-}
-
-IVolume::ECountry CVolumeWAD::GetCountry() const
-{
- if (!m_pReader)
- return COUNTRY_UNKNOWN;
-
- u8 CountryCode;
-
- u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size);
-
- // read the last digit of the titleID in the ticket
- Read(Offset + 0x01E3, 1, &CountryCode);
-
- ECountry country = COUNTRY_UNKNOWN;
-
- switch (CountryCode)
- {
- case 'S':
- country = COUNTRY_EUROPE;
- break; // PAL // <- that is shitty :) zelda demo disc
-
- case 'P':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'D':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'F':
- country = COUNTRY_FRANCE;
- break; // PAL
-
- case 'I':
- country = COUNTRY_ITALY;
- break; // PAL
-
- case 'X':
- country = COUNTRY_EUROPE;
- break; // XIII <- uses X but is PAL
-
- case 'E':
- country = COUNTRY_USA;
- break; // USA
-
- case 'J':
- country = COUNTRY_JAP;
- break; // JAP
-
- case 'O':
- country = COUNTRY_UNKNOWN;
- break; // SDK
-
- default:
- country = COUNTRY_UNKNOWN;
- break;
- }
-
- return(country);
-}
-
-std::string CVolumeWAD::GetUniqueID() const
-{
- std::string temp = GetMakerID();
- u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size);
-
- char GameCode[8];
- if(!Read(Offset + 0x01E0, 4, (u8*)GameCode))
- return "0";
-
- GameCode[4] = temp.at(0);
- GameCode[5] = temp.at(1);
- GameCode[6] = 0;
-
- return GameCode;
-}
-
-std::string CVolumeWAD::GetMakerID() const
-{
- u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size) + ALIGN_40(tick_size);
-
- char temp[3] = {1};
- // Some weird channels use 0x0000 in place of the MakerID, so we need a check there
- if (!Read(0x198 + Offset, 2, (u8*)temp) || temp[0] == 0 || temp[1] == 0)
- return "00";
-
- temp[2] = 0;
-
- return temp;
-}
-
-bool CVolumeWAD::GetTitleID(u8* _pBuffer) const
-{
- u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size);
-
- if(!Read(Offset + 0x01DC, 8, _pBuffer))
- return false;
-
- return true;
-}
-
-std::string CVolumeWAD::GetName() const
-{
- u32 footer_size;
-
- if (!Read(0x1C, 4, (u8*)&footer_size))
- return "Unknown";
-
- // Offset to the english title
- char temp[85];
- if (!Read(0xF1 + OpeningBnrOffset, 84, (u8*)&temp) || Common::swap32(footer_size) < 0xF1)
- return "Unknown";
-
- char out_temp[43];
- int j = 0;
-
- for (int i=0; i < 84; i++)
- {
- if (!(i & 1))
- {
- if (temp[i] != 0)
- out_temp[j] = temp[i];
- else
- {
- // Some wads have a few consecutive Null chars followed by text
- // as i don't know what to do there: replace the frst one with space
- if (out_temp[j-1] != 32)
- out_temp[j] = 32;
- else
- continue;
- }
-
- j++;
- }
- }
-
- out_temp[j] = 0;
-
- return out_temp;
-}
-
-u64 CVolumeWAD::GetSize() const
-{
- if (m_pReader)
- return (size_t)m_pReader->GetDataSize();
- else
- return 0;
-}
-
-} // namespace
+// Copyright (C) 2003-2009 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#include "stdafx.h"
+#include
+
+#include "VolumeWad.h"
+#include "StringUtil.h"
+#include "MathUtil.h"
+
+#define ALIGN_40(x) ROUND_UP(Common::swap32(x), 0x40)
+
+namespace DiscIO
+{
+CVolumeWAD::CVolumeWAD(IBlobReader* _pReader)
+ : m_pReader(_pReader), OpeningBnrOffset(0), hdr_size(0), cert_size(0), tick_size(0), tmd_size(0), data_size(0)
+{
+ Read(0x00, 4, (u8*)&hdr_size);
+ Read(0x08, 4, (u8*)&cert_size);
+ Read(0x10, 4, (u8*)&tick_size);
+ Read(0x14, 4, (u8*)&tmd_size);
+ Read(0x18, 4, (u8*)&data_size);
+
+ OpeningBnrOffset = ALIGN_40(hdr_size) + ALIGN_40(cert_size) + ALIGN_40(tick_size) + ALIGN_40(tmd_size) + ALIGN_40(data_size);
+}
+
+CVolumeWAD::~CVolumeWAD()
+{
+ delete m_pReader;
+}
+
+bool CVolumeWAD::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const
+{
+ if (m_pReader == NULL)
+ return false;
+
+ return m_pReader->Read(_Offset, _Length, _pBuffer);
+}
+
+IVolume::ECountry CVolumeWAD::GetCountry() const
+{
+ if (!m_pReader)
+ return COUNTRY_UNKNOWN;
+
+ u8 CountryCode;
+ u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size);
+
+ // read the last digit of the titleID in the ticket
+ Read(Offset + 0x01E3, 1, &CountryCode);
+
+ return CountrySwitch(CountryCode);
+}
+
+std::string CVolumeWAD::GetUniqueID() const
+{
+ std::string temp = GetMakerID();
+ u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size);
+
+ char GameCode[8];
+ if(!Read(Offset + 0x01E0, 4, (u8*)GameCode))
+ return "0";
+
+ GameCode[4] = temp.at(0);
+ GameCode[5] = temp.at(1);
+ GameCode[6] = 0;
+
+ return GameCode;
+}
+
+std::string CVolumeWAD::GetMakerID() const
+{
+ u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size) + ALIGN_40(tick_size);
+
+ char temp[3] = {1};
+ // Some weird channels use 0x0000 in place of the MakerID, so we need a check there
+ if (!Read(0x198 + Offset, 2, (u8*)temp) || temp[0] == 0 || temp[1] == 0)
+ return "00";
+
+ temp[2] = 0;
+
+ return temp;
+}
+
+bool CVolumeWAD::GetTitleID(u8* _pBuffer) const
+{
+ u32 Offset = ALIGN_40(hdr_size) + ALIGN_40(cert_size);
+
+ if(!Read(Offset + 0x01DC, 8, _pBuffer))
+ return false;
+
+ return true;
+}
+
+std::string CVolumeWAD::GetName() const
+{
+ u32 footer_size;
+
+ if (!Read(0x1C, 4, (u8*)&footer_size))
+ return "Unknown";
+
+ // Offset to the english title
+ char temp[85];
+ if (!Read(0xF1 + OpeningBnrOffset, 84, (u8*)&temp) || Common::swap32(footer_size) < 0xF1)
+ return "Unknown";
+
+ char out_temp[43];
+ int j = 0;
+
+ for (int i=0; i < 84; i++)
+ {
+ if (!(i & 1))
+ {
+ if (temp[i] != 0)
+ out_temp[j] = temp[i];
+ else
+ {
+ // Some wads have a few consecutive Null chars followed by text
+ // as i don't know what to do there: replace the frst one with space
+ if (out_temp[j-1] != 32)
+ out_temp[j] = 32;
+ else
+ continue;
+ }
+
+ j++;
+ }
+ }
+
+ out_temp[j] = 0;
+
+ return out_temp;
+}
+
+u64 CVolumeWAD::GetSize() const
+{
+ if (m_pReader)
+ return (size_t)m_pReader->GetDataSize();
+ else
+ return 0;
+}
+
+} // namespace
diff --git a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp
index ca53aa80f3..64eee04a94 100644
--- a/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp
+++ b/Source/Core/DiscIO/Src/VolumeWiiCrypted.cpp
@@ -121,63 +121,12 @@ std::string CVolumeWiiCrypted::GetUniqueID() const
IVolume::ECountry CVolumeWiiCrypted::GetCountry() const
{
if (!m_pReader)
- {
- return(COUNTRY_UNKNOWN);
- }
+ return COUNTRY_UNKNOWN;
u8 CountryCode;
m_pReader->Read(3, 1, &CountryCode);
- ECountry country = COUNTRY_UNKNOWN;
-
- switch (CountryCode)
- {
- case 'S':
- country = COUNTRY_EUROPE;
- break; // PAL // <- that is shitty :) zelda demo disc
-
- case 'P':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'D':
- country = COUNTRY_EUROPE;
- break; // PAL
-
- case 'F':
- country = COUNTRY_FRANCE;
- break; // PAL
-
- case 'I':
- country = COUNTRY_ITALY;
- break; // PAL
-
- case 'X':
- country = COUNTRY_EUROPE;
- break; // XIII <- uses X but is PAL rip
-
- case 'E':
- country = COUNTRY_USA;
- break; // USA
-
- case 'J':
- country = COUNTRY_JAP;
- break; // JAP
-
- case 'K':
- country = COUNTRY_KOR;
- break; // KOR
-
- case 'O':
- country = COUNTRY_UNKNOWN;
- break; // SDK
-
- default:
- PanicAlert("Unknown Country Code!");
- break;
- }
-
- return(country);
+ return CountrySwitch(CountryCode);
}
std::string CVolumeWiiCrypted::GetMakerID() const
diff --git a/Source/Core/DolphinWX/DolphinWX.vcproj b/Source/Core/DolphinWX/DolphinWX.vcproj
index 8e5a483412..e39da3b609 100644
--- a/Source/Core/DolphinWX/DolphinWX.vcproj
+++ b/Source/Core/DolphinWX/DolphinWX.vcproj
@@ -948,6 +948,14 @@
RelativePath=".\resources\Flag_Japan.xpm"
>
+
+
+
+
diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp
index ffbfdfe678..c72518e659 100644
--- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp
+++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp
@@ -35,14 +35,17 @@
#include "WxUtils.h"
#if USE_XPM_BITMAPS
- #include "../resources/Flag_Europe.xpm"
- #include "../resources/Flag_France.xpm"
+ #include "../resources/Flag_Europe.xpm"
+ #include "../resources/Flag_France.xpm"
#include "../resources/Flag_Italy.xpm"
- #include "../resources/Flag_Japan.xpm"
+ #include "../resources/Flag_Japan.xpm"
+ #include "../resources/Flag_USA.xpm"
+ #include "../resources/Flag_Taiwan.xpm"
+ #include "../resources/Flag_Unknown.xpm"
+
#include "../resources/Platform_Wad.xpm"
- #include "../resources/Flag_USA.xpm"
- #include "../resources/Platform_Wii.xpm"
- #include "../resources/Platform_Gamecube.xpm"
+ #include "../resources/Platform_Wii.xpm"
+ #include "../resources/Platform_Gamecube.xpm"
#endif // USE_XPM_BITMAPS
size_t CGameListCtrl::m_currentItem = 0;
@@ -58,14 +61,14 @@ bool operator < (const GameListItem &one, const GameListItem &other)
switch (one.GetCountry())
{
- case DiscIO::IVolume::COUNTRY_JAP:;
+ case DiscIO::IVolume::COUNTRY_JAPAN:;
case DiscIO::IVolume::COUNTRY_USA:indexOne = 0; break;
default: indexOne = (int)SConfig::GetInstance().m_InterfaceLanguage;
}
switch (other.GetCountry())
{
- case DiscIO::IVolume::COUNTRY_JAP:;
+ case DiscIO::IVolume::COUNTRY_JAPAN:;
case DiscIO::IVolume::COUNTRY_USA:indexOther = 0; break;
default: indexOther = (int)SConfig::GetInstance().m_InterfaceLanguage;
}
@@ -116,17 +119,25 @@ void CGameListCtrl::InitBitmaps()
SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
m_FlagImageIndex.resize(DiscIO::IVolume::NUMBER_OF_COUNTRIES);
wxIcon iconTemp;
+
iconTemp.CopyFromBitmap(wxBitmap(Flag_Europe_xpm));
m_FlagImageIndex[DiscIO::IVolume::COUNTRY_EUROPE] = m_imageListSmall->Add(iconTemp);
iconTemp.CopyFromBitmap(wxBitmap(Flag_France_xpm));
m_FlagImageIndex[DiscIO::IVolume::COUNTRY_FRANCE] = m_imageListSmall->Add(iconTemp);
- iconTemp.CopyFromBitmap(wxBitmap(Flag_Italy_xpm));
- m_FlagImageIndex[DiscIO::IVolume::COUNTRY_ITALY] = m_imageListSmall->Add(iconTemp);
iconTemp.CopyFromBitmap(wxBitmap(Flag_USA_xpm));
m_FlagImageIndex[DiscIO::IVolume::COUNTRY_USA] = m_imageListSmall->Add(iconTemp);
iconTemp.CopyFromBitmap(wxBitmap(Flag_Japan_xpm));
- m_FlagImageIndex[DiscIO::IVolume::COUNTRY_JAP] = m_imageListSmall->Add(iconTemp);
- iconTemp.CopyFromBitmap(wxBitmap(Flag_Europe_xpm));
+ m_FlagImageIndex[DiscIO::IVolume::COUNTRY_JAPAN] = m_imageListSmall->Add(iconTemp);
+ iconTemp.CopyFromBitmap(wxBitmap(Flag_Unknown_xpm)); // TODO add korea flag
+ m_FlagImageIndex[DiscIO::IVolume::COUNTRY_KOREA] = m_imageListSmall->Add(iconTemp);
+ iconTemp.CopyFromBitmap(wxBitmap(Flag_Italy_xpm));
+ m_FlagImageIndex[DiscIO::IVolume::COUNTRY_ITALY] = m_imageListSmall->Add(iconTemp);
+ iconTemp.CopyFromBitmap(wxBitmap(Flag_Taiwan_xpm));
+ m_FlagImageIndex[DiscIO::IVolume::COUNTRY_TAIWAN] = m_imageListSmall->Add(iconTemp);
+
+ iconTemp.CopyFromBitmap(wxBitmap(Flag_Unknown_xpm));
+ m_FlagImageIndex[DiscIO::IVolume::COUNTRY_SDK] = m_imageListSmall->Add(iconTemp);
+ iconTemp.CopyFromBitmap(wxBitmap(Flag_Unknown_xpm));
m_FlagImageIndex[DiscIO::IVolume::COUNTRY_UNKNOWN] = m_imageListSmall->Add(iconTemp);
m_PlatformImageIndex.resize(3);
@@ -308,7 +319,7 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
switch (rISOFile.GetCountry())
{
- case DiscIO::IVolume::COUNTRY_JAP:
+ case DiscIO::IVolume::COUNTRY_JAPAN:
// keep these codes, when we move to wx unicode...
//wxCSConv convFrom(wxFontMapper::GetEncodingName(wxFONTENCODING_SHIFT_JIS));
//wxCSConv convTo(wxFontMapper::GetEncodingName(wxFONTENCODING_DEFAULT));
@@ -526,7 +537,11 @@ void CGameListCtrl::ScanForISOs()
switch(ISOFile.GetCountry())
{
- case DiscIO::IVolume::COUNTRY_JAP:
+ case DiscIO::IVolume::COUNTRY_TAIWAN:
+ case DiscIO::IVolume::COUNTRY_KOREA:
+ // TODO: Add these to interface choices, or combine with japan?
+ break;
+ case DiscIO::IVolume::COUNTRY_JAPAN:
if (!SConfig::GetInstance().m_ListJap)
list = false;
break;
@@ -593,14 +608,14 @@ int wxCALLBACK wxListCompare(long item1, long item2, long sortData)
switch (iso1->GetCountry())
{
- case DiscIO::IVolume::COUNTRY_JAP:;
+ case DiscIO::IVolume::COUNTRY_JAPAN:;
case DiscIO::IVolume::COUNTRY_USA:indexOne = 0; break;
default: indexOne = (int)SConfig::GetInstance().m_InterfaceLanguage;
}
switch (iso2->GetCountry())
{
- case DiscIO::IVolume::COUNTRY_JAP:;
+ case DiscIO::IVolume::COUNTRY_JAPAN:;
case DiscIO::IVolume::COUNTRY_USA:indexOther = 0; break;
default: indexOther = (int)SConfig::GetInstance().m_InterfaceLanguage;
}
diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp
index 7dfd984611..0900881d5b 100644
--- a/Source/Core/DolphinWX/Src/ISOProperties.cpp
+++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp
@@ -121,15 +121,28 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
switch (OpenISO->GetCountry())
{
case DiscIO::IVolume::COUNTRY_EUROPE:
+ m_Country->SetValue(wxString::FromAscii("EUROPE"));
+ break;
case DiscIO::IVolume::COUNTRY_FRANCE:
+ m_Country->SetValue(wxString::FromAscii("FRANCE"));
+ break;
case DiscIO::IVolume::COUNTRY_ITALY:
- m_Country->SetValue(wxString::FromAscii("EUR"));
+ m_Country->SetValue(wxString::FromAscii("ITALY"));
break;
case DiscIO::IVolume::COUNTRY_USA:
m_Country->SetValue(wxString::FromAscii("USA"));
break;
- case DiscIO::IVolume::COUNTRY_JAP:
- m_Country->SetValue(wxString::FromAscii("JAP"));
+ case DiscIO::IVolume::COUNTRY_JAPAN:
+ m_Country->SetValue(wxString::FromAscii("JAPAN"));
+ break;
+ case DiscIO::IVolume::COUNTRY_KOREA:
+ m_Country->SetValue(wxString::FromAscii("KOREA"));
+ break;
+ case DiscIO::IVolume::COUNTRY_TAIWAN:
+ m_Country->SetValue(wxString::FromAscii("TAIWAN"));
+ break;
+ case DiscIO::IVolume::COUNTRY_SDK:
+ m_Country->SetValue(wxString::FromAscii("No Country (SDK)"));
break;
default:
m_Country->SetValue(wxString::FromAscii("UNKNOWN"));
diff --git a/Source/Core/DolphinWX/resources/Flag_Taiwan.xpm b/Source/Core/DolphinWX/resources/Flag_Taiwan.xpm
new file mode 100644
index 0000000000..6696789270
--- /dev/null
+++ b/Source/Core/DolphinWX/resources/Flag_Taiwan.xpm
@@ -0,0 +1,124 @@
+/* XPM */
+static const char * Flag_Taiwan_xpm[] = {
+"96 32 89 1",
+" c None",
+". c #000000",
+"# c #000099",
+"$ c #000098",
+"% c #03039A",
+"& c #000094",
+"' c #05059B",
+"( c #050095",
+") c #DC0014",
+"* c #FF0000",
+"+ c #FD0001",
+", c #04049B",
+"- c #000096",
+"! c #020299",
+"0 c #2424A7",
+"1 c #04049A",
+"2 c #000097",
+"3 c #000093",
+"4 c #6262BF",
+"5 c #2828A8",
+"6 c #6C6CC1",
+"7 c #3E3EB1",
+"8 c #3B3BB0",
+"9 c #00008F",
+": c #01019A",
+"; c #1919A3",
+"< c #4040B0",
+"= c #6363C0",
+"> c #D6D6EE",
+"? c #D9D9ED",
+"@ c #C5C5E7",
+"A c #3F3FB0",
+"B c #3D3DAF",
+"C c #020297",
+"D c #010199",
+"E c #5E5EBE",
+"F c #DFDFF2",
+"G c white",
+"H c #BFBFE5",
+"I c #2626A7",
+"J c #4242B0",
+"K c #7D7DCA",
+"L c #FAFAFD",
+"M c #FBFBFD",
+"N c #FCFCFD",
+"O c #FCFCFE",
+"P c #DADAF0",
+"Q c #6A6AC2",
+"R c #1B1BA3",
+"S c #000199",
+"T c #0E0E9B",
+"U c #5858BC",
+"V c #D3D3ED",
+"W c #2727A6",
+"X c #060699",
+"Y c #1212A0",
+"Z c #6464C0",
+"[ c #8080CC",
+"] c #F4F4FA",
+"^ c #F8F8FB",
+"_ c #7070C4",
+"` c #4949B5",
+"a c #000095",
+"b c #040499",
+"c c #000092",
+"d c #6767C2",
+"e c #8686CA",
+"f c #7070C5",
+"g c #2B2BA9",
+"h c #00009A",
+"i c #01049C",
+"j c #1619A4",
+"k c #393CB3",
+"l c #00029A",
+"m c #1619A5",
+"n c #020096",
+"o c #DB0014",
+"p c #FC0001",
+"q c #0A0092",
+"r c #060090",
+"s c #0B0092",
+"t c #0F008E",
+"u c #DD0013",
+"v c #FD0000",
+"w c #E5000F",
+"x c #E6010F",
+"y c #E60110",
+"z c #FB0002",
+"{ c #FE0000",
+" ",
+" ",
+" ",
+" ",
+" ",
+"................................ ",
+".#####$%#&'$$$##()*+***********. ",
+".###$$,-!0&1!$##()*+***********. ",
+".##$#23456789:$#()*+***********. ",
+".###2;<=>?@ABCD#()*+***********. ",
+".###$CEFGGGHI&D$()*+***********. ",
+".##D-JKLMNOPQR-S()*+***********. ",
+".###$TUGGNGVWX$#()*+***********. ",
+".###2YZ[]^P_`aD$()*+***********. ",
+".###$bcdEefg3D$#()*+***********. ",
+".hhhhhijiklm#hhhno*p***********. ",
+".qqqqqqrsrqrqqqqtu*v***********. ",
+".wwwwwwxwywxwwwwwz*{***********. ",
+".******************************. ",
+".{{{{{{{{{{{{{{{{{*{***********. ",
+".******************************. ",
+".******************************. ",
+".******************************. ",
+".******************************. ",
+"................................ ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
\ No newline at end of file
diff --git a/Source/Core/DolphinWX/resources/Flag_Unknown.xpm b/Source/Core/DolphinWX/resources/Flag_Unknown.xpm
new file mode 100644
index 0000000000..a63d52976b
--- /dev/null
+++ b/Source/Core/DolphinWX/resources/Flag_Unknown.xpm
@@ -0,0 +1,50 @@
+/* XPM */
+static const char *const Flag_Unknown_xpm[] = {
+"96 32 15 1",
+" c None",
+"! c black",
+"# c #360000",
+"$ c #D60000",
+"% c #1B0000",
+"& c #6B0000",
+"' c #510000",
+"( c #280000",
+") c #BB0000",
+"* c #780000",
+"+ c #A00000",
+", c #0D0000",
+"- c #C90000",
+". c #AE0000",
+"0 c #430000",
+" ",
+" ",
+" ",
+" ",
+" ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!####!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!#$$#!###! ",
+"!!!%&'!!!!%&'!()$$$$$*!#$$##$$#! ",
+"!!!#$+!!!!#$+,-$$$$$$$$$#))$#! ",
+"!!!#$+!!!!#$+#$.!!!!0$+#$$)))#!! ",
+"!!!#$+!!!!#$+#$+!!!!#$+#$$))#!!! ",
+"!!!#$+!!!!#$+#$+!!!!#$+#$$))#!!! ",
+"!!!#$+!!!!#$+#$+!!!!#$+#$$)))#!! ",
+"!!!#$.!!!!0$+#$+!!!!#$+#))#))$#! ",
+"!!!,-$$$$$$$$+!!!!#$+#$$!#$$#! ",
+"!!!!()$$$$$*!%&'!!!!%&'!##!!##!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
\ No newline at end of file