Core: Correct some function casings.
This commit is contained in:
parent
79e90a1521
commit
6c57457f9f
|
@ -24,7 +24,7 @@ static int changeDevice;
|
||||||
static CEXIChannel *g_Channels[MAX_EXI_CHANNELS];
|
static CEXIChannel *g_Channels[MAX_EXI_CHANNELS];
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
initSRAM();
|
InitSRAM();
|
||||||
for (u32 i = 0; i < MAX_EXI_CHANNELS; i++)
|
for (u32 i = 0; i < MAX_EXI_CHANNELS; i++)
|
||||||
g_Channels[i] = new CEXIChannel(i);
|
g_Channels[i] = new CEXIChannel(i);
|
||||||
|
|
||||||
|
|
|
@ -88,11 +88,11 @@ CEXIMemoryCard::CEXIMemoryCard(const int index, bool gciFolder)
|
||||||
|
|
||||||
if (gciFolder)
|
if (gciFolder)
|
||||||
{
|
{
|
||||||
setupGciFolder(sizeMb);
|
SetupGciFolder(sizeMb);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setupRawMemcard(sizeMb);
|
SetupRawMemcard(sizeMb);
|
||||||
}
|
}
|
||||||
|
|
||||||
memory_card_size = memorycard->GetCardId() * SIZE_TO_Mb;
|
memory_card_size = memorycard->GetCardId() * SIZE_TO_Mb;
|
||||||
|
@ -101,7 +101,7 @@ CEXIMemoryCard::CEXIMemoryCard(const int index, bool gciFolder)
|
||||||
SetCardFlashID(header, card_index);
|
SetCardFlashID(header, card_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CEXIMemoryCard::setupGciFolder(u16 sizeMb)
|
void CEXIMemoryCard::SetupGciFolder(u16 sizeMb)
|
||||||
{
|
{
|
||||||
|
|
||||||
DiscIO::IVolume::ECountry CountryCode = DiscIO::IVolume::COUNTRY_UNKNOWN;
|
DiscIO::IVolume::ECountry CountryCode = DiscIO::IVolume::COUNTRY_UNKNOWN;
|
||||||
|
@ -163,7 +163,7 @@ void CEXIMemoryCard::setupGciFolder(u16 sizeMb)
|
||||||
CountryCode, CurrentGameId);
|
CountryCode, CurrentGameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CEXIMemoryCard::setupRawMemcard(u16 sizeMb)
|
void CEXIMemoryCard::SetupRawMemcard(u16 sizeMb)
|
||||||
{
|
{
|
||||||
std::string filename =
|
std::string filename =
|
||||||
(card_index == 0) ? SConfig::GetInstance().m_strMemoryCardA : SConfig::GetInstance().m_strMemoryCardB;
|
(card_index == 0) ? SConfig::GetInstance().m_strMemoryCardA : SConfig::GetInstance().m_strMemoryCardB;
|
||||||
|
@ -208,7 +208,7 @@ void CEXIMemoryCard::CmdDoneLater(u64 cycles)
|
||||||
void CEXIMemoryCard::SetCS(int cs)
|
void CEXIMemoryCard::SetCS(int cs)
|
||||||
{
|
{
|
||||||
// So that memory card won't be invalidated during flushing
|
// So that memory card won't be invalidated during flushing
|
||||||
memorycard->joinThread();
|
memorycard->JoinThread();
|
||||||
|
|
||||||
if (cs) // not-selected to selected
|
if (cs) // not-selected to selected
|
||||||
{
|
{
|
||||||
|
@ -432,7 +432,7 @@ void CEXIMemoryCard::PauseAndLock(bool doLock, bool unpauseOnUnlock)
|
||||||
{
|
{
|
||||||
// we don't exactly have anything to pause,
|
// we don't exactly have anything to pause,
|
||||||
// but let's make sure the flush thread isn't running.
|
// but let's make sure the flush thread isn't running.
|
||||||
memorycard->joinThread();
|
memorycard->JoinThread();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@ public:
|
||||||
void DMAWrite(u32 _uAddr, u32 _uSize) override;
|
void DMAWrite(u32 _uAddr, u32 _uSize) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupGciFolder(u16 sizeMb);
|
void SetupGciFolder(u16 sizeMb);
|
||||||
void setupRawMemcard(u16 sizeMb);
|
void SetupRawMemcard(u16 sizeMb);
|
||||||
// This is scheduled whenever a page write is issued. The this pointer is passed
|
// This is scheduled whenever a page write is issued. The this pointer is passed
|
||||||
// through the userdata parameter, so that it can then call Flush on the right card.
|
// through the userdata parameter, so that it can then call Flush on the right card.
|
||||||
static void FlushCallback(u64 userdata, int cyclesLate);
|
static void FlushCallback(u64 userdata, int cyclesLate);
|
||||||
|
|
|
@ -188,10 +188,10 @@ GCMemcard::GCMemcard(const std::string &filename, bool forceCreation, bool ascii
|
||||||
|
|
||||||
mcdFile.Close();
|
mcdFile.Close();
|
||||||
|
|
||||||
initDirBatPointers();
|
InitDirBatPointers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCMemcard::initDirBatPointers()
|
void GCMemcard::InitDirBatPointers()
|
||||||
{
|
{
|
||||||
if (BE16(dir.UpdateCounter) > (BE16(dir_backup.UpdateCounter)))
|
if (BE16(dir.UpdateCounter) > (BE16(dir_backup.UpdateCounter)))
|
||||||
{
|
{
|
||||||
|
@ -1237,7 +1237,7 @@ bool GCMemcard::Format(bool ascii, u16 SizeMb)
|
||||||
mc_data_blocks.clear();
|
mc_data_blocks.clear();
|
||||||
mc_data_blocks.resize(maxBlock - MC_FST_BLOCKS);
|
mc_data_blocks.resize(maxBlock - MC_FST_BLOCKS);
|
||||||
|
|
||||||
initDirBatPointers();
|
InitDirBatPointers();
|
||||||
m_valid = true;
|
m_valid = true;
|
||||||
|
|
||||||
return Save();
|
return Save();
|
||||||
|
|
|
@ -76,7 +76,7 @@ public:
|
||||||
virtual void ClearBlock(u32 address) = 0;
|
virtual void ClearBlock(u32 address) = 0;
|
||||||
virtual void ClearAll() = 0;
|
virtual void ClearAll() = 0;
|
||||||
virtual void DoState(PointerWrap &p) = 0;
|
virtual void DoState(PointerWrap &p) = 0;
|
||||||
virtual void joinThread() {};
|
virtual void JoinThread() {};
|
||||||
u32 GetCardId() { return nintendo_card_id; }
|
u32 GetCardId() { return nintendo_card_id; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -87,8 +87,16 @@ protected:
|
||||||
|
|
||||||
struct GCMBlock
|
struct GCMBlock
|
||||||
{
|
{
|
||||||
GCMBlock() { erase(); }
|
GCMBlock()
|
||||||
void erase() { memset(block, 0xFF, BLOCK_SIZE); }
|
{
|
||||||
|
Erase();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Erase()
|
||||||
|
{
|
||||||
|
memset(block, 0xFF, BLOCK_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
u8 block[BLOCK_SIZE];
|
u8 block[BLOCK_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -325,7 +333,7 @@ private:
|
||||||
std::vector<GCMBlock> mc_data_blocks;
|
std::vector<GCMBlock> mc_data_blocks;
|
||||||
|
|
||||||
u32 ImportGciInternal(FILE* gcih, const std::string& inputFile, const std::string &outputFile);
|
u32 ImportGciInternal(FILE* gcih, const std::string& inputFile, const std::string &outputFile);
|
||||||
void initDirBatPointers();
|
void InitDirBatPointers();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
|
@ -316,7 +316,7 @@ void GCMemcardDirectory::ClearBlock(u32 address)
|
||||||
if (m_LastBlock == -1)
|
if (m_LastBlock == -1)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
((GCMBlock *)m_LastBlockAddress)->erase();
|
((GCMBlock *)m_LastBlockAddress)->Erase();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void GCMemcardDirectory::SyncSaves()
|
inline void GCMemcardDirectory::SyncSaves()
|
||||||
|
|
|
@ -75,7 +75,7 @@ MemoryCard::~MemoryCard()
|
||||||
delete[] memory_card_content;
|
delete[] memory_card_content;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MemoryCard::joinThread()
|
void MemoryCard::JoinThread()
|
||||||
{
|
{
|
||||||
if (flushThread.joinable())
|
if (flushThread.joinable())
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,7 +29,7 @@ public:
|
||||||
void ClearBlock(u32 address) override;
|
void ClearBlock(u32 address) override;
|
||||||
void ClearAll() override;
|
void ClearAll() override;
|
||||||
void DoState(PointerWrap &p) override;
|
void DoState(PointerWrap &p) override;
|
||||||
void joinThread() override;
|
void JoinThread() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u8 *memory_card_content;
|
u8 *memory_card_content;
|
||||||
|
|
|
@ -25,35 +25,35 @@ public:
|
||||||
m_last_start = 0;
|
m_last_start = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void start(int node)
|
void Start(int node)
|
||||||
{
|
{
|
||||||
m_last_start = m_ptr;
|
m_last_start = m_ptr;
|
||||||
unsigned char hdr[3] = {0xe0, (unsigned char)node, 0};
|
unsigned char hdr[3] = {0xe0, (unsigned char)node, 0};
|
||||||
m_csum = 0;
|
m_csum = 0;
|
||||||
addData(hdr, 3, 1);
|
AddData(hdr, 3, 1);
|
||||||
}
|
}
|
||||||
void addData(const void *data, size_t len)
|
void AddData(const void *data, size_t len)
|
||||||
{
|
{
|
||||||
addData((const unsigned char*)data, len);
|
AddData((const unsigned char*)data, len);
|
||||||
}
|
}
|
||||||
void addData(const char *data)
|
void AddData(const char *data)
|
||||||
{
|
{
|
||||||
addData(data, strlen(data));
|
AddData(data, strlen(data));
|
||||||
}
|
}
|
||||||
void addData(int n)
|
void AddData(int n)
|
||||||
{
|
{
|
||||||
unsigned char cs = n;
|
unsigned char cs = n;
|
||||||
addData(&cs, 1);
|
AddData(&cs, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void end()
|
void End()
|
||||||
{
|
{
|
||||||
int len = m_ptr - m_last_start;
|
int len = m_ptr - m_last_start;
|
||||||
m_msg[m_last_start + 2] = len - 2; // assuming len <0xD0
|
m_msg[m_last_start + 2] = len - 2; // assuming len <0xD0
|
||||||
addData(m_csum + len - 2);
|
AddData(m_csum + len - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addData(const unsigned char *dst, size_t len, int sync = 0)
|
void AddData(const unsigned char *dst, size_t len, int sync = 0)
|
||||||
{
|
{
|
||||||
while (len--)
|
while (len--)
|
||||||
{
|
{
|
||||||
|
@ -236,8 +236,8 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength)
|
||||||
int pptr = 2;
|
int pptr = 2;
|
||||||
JVSIOMessage msg;
|
JVSIOMessage msg;
|
||||||
|
|
||||||
msg.start(0);
|
msg.Start(0);
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
|
|
||||||
unsigned char jvs_io_buffer[0x80];
|
unsigned char jvs_io_buffer[0x80];
|
||||||
int nr_bytes = ptr(pptr + 2); // byte after e0 xx
|
int nr_bytes = ptr(pptr + 2); // byte after e0 xx
|
||||||
|
@ -257,46 +257,46 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength)
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case 0x10: // get ID
|
case 0x10: // get ID
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
{
|
{
|
||||||
char buffer[12];
|
char buffer[12];
|
||||||
sprintf(buffer, "JVS-node %02x", node);
|
sprintf(buffer, "JVS-node %02x", node);
|
||||||
//msg.addData(buffer);
|
//msg.addData(buffer);
|
||||||
msg.addData("JAMMA I/O CONTROLLER");
|
msg.AddData("JAMMA I/O CONTROLLER");
|
||||||
}
|
}
|
||||||
msg.addData(0);
|
msg.AddData(0);
|
||||||
break;
|
break;
|
||||||
case 0x11: // cmd revision
|
case 0x11: // cmd revision
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
msg.addData(0x11);
|
msg.AddData(0x11);
|
||||||
break;
|
break;
|
||||||
case 0x12: // jvs revision
|
case 0x12: // jvs revision
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
msg.addData(0x12);
|
msg.AddData(0x12);
|
||||||
break;
|
break;
|
||||||
case 0x13: // com revision
|
case 0x13: // com revision
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
msg.addData(0x13);
|
msg.AddData(0x13);
|
||||||
break;
|
break;
|
||||||
case 0x14: // get features
|
case 0x14: // get features
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
msg.addData((void *)"\x01\x02\x0a\x00", 4); // 2 player, 10 bit
|
msg.AddData((void *)"\x01\x02\x0a\x00", 4); // 2 player, 10 bit
|
||||||
msg.addData((void *)"\x02\x02\x00\x00", 4); // 2 coin slots
|
msg.AddData((void *)"\x02\x02\x00\x00", 4); // 2 coin slots
|
||||||
//msg.addData((void *)"\x03\x02\x08\x00", 4);
|
//msg.addData((void *)"\x03\x02\x08\x00", 4);
|
||||||
msg.addData((void *)"\x00\x00\x00\x00", 4);
|
msg.AddData((void *)"\x00\x00\x00\x00", 4);
|
||||||
break;
|
break;
|
||||||
case 0x15:
|
case 0x15:
|
||||||
while (*jvs_io++) {};
|
while (*jvs_io++) {};
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
break;
|
break;
|
||||||
case 0x20:
|
case 0x20:
|
||||||
{
|
{
|
||||||
int nr_players = *jvs_io++;
|
int nr_players = *jvs_io++;
|
||||||
int bytes_per_player = *jvs_io++; /* ??? */
|
int bytes_per_player = *jvs_io++; /* ??? */
|
||||||
int j;
|
int j;
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
|
|
||||||
msg.addData(0); // tilt
|
msg.AddData(0); // tilt
|
||||||
for (i=0; i<nr_players; ++i)
|
for (i=0; i<nr_players; ++i)
|
||||||
{
|
{
|
||||||
GCPadStatus PadStatus;
|
GCPadStatus PadStatus;
|
||||||
|
@ -328,20 +328,20 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength)
|
||||||
player_data[1] |= 0x10;
|
player_data[1] |= 0x10;
|
||||||
|
|
||||||
for (j=0; j<bytes_per_player; ++j)
|
for (j=0; j<bytes_per_player; ++j)
|
||||||
msg.addData(player_data[j&1]);
|
msg.AddData(player_data[j&1]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x21: // coin
|
case 0x21: // coin
|
||||||
{
|
{
|
||||||
int slots = *jvs_io++;
|
int slots = *jvs_io++;
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
GCPadStatus PadStatus;
|
GCPadStatus PadStatus;
|
||||||
Pad::GetStatus(0, &PadStatus);
|
Pad::GetStatus(0, &PadStatus);
|
||||||
while (slots--)
|
while (slots--)
|
||||||
{
|
{
|
||||||
msg.addData(0);
|
msg.AddData(0);
|
||||||
msg.addData((PadStatus.button & PAD_BUTTON_START) ? 1 : 0);
|
msg.AddData((PadStatus.button & PAD_BUTTON_START) ? 1 : 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -352,14 +352,14 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength)
|
||||||
case 0xf0:
|
case 0xf0:
|
||||||
if (*jvs_io++ == 0xD9)
|
if (*jvs_io++ == 0xD9)
|
||||||
ERROR_LOG(AMBASEBOARDDEBUG, "JVS RESET");
|
ERROR_LOG(AMBASEBOARDDEBUG, "JVS RESET");
|
||||||
msg.addData(1);
|
msg.AddData(1);
|
||||||
|
|
||||||
d10_1 |= 1;
|
d10_1 |= 1;
|
||||||
break;
|
break;
|
||||||
case 0xf1:
|
case 0xf1:
|
||||||
node = *jvs_io++;
|
node = *jvs_io++;
|
||||||
ERROR_LOG(AMBASEBOARDDEBUG, "JVS SET ADDRESS, node=%d", node);
|
ERROR_LOG(AMBASEBOARDDEBUG, "JVS SET ADDRESS, node=%d", node);
|
||||||
msg.addData(node == 1);
|
msg.AddData(node == 1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -369,7 +369,7 @@ int CSIDevice_AMBaseboard::RunBuffer(u8* _pBuffer, int _iLength)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.end();
|
msg.End();
|
||||||
|
|
||||||
res[resp++] = ptr(0);
|
res[resp++] = ptr(0);
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ SRAM sram_dump_german = {{
|
||||||
}};
|
}};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void initSRAM()
|
void InitSRAM()
|
||||||
{
|
{
|
||||||
File::IOFile file(SConfig::GetInstance().m_LocalCoreStartupParameter.m_strSRAM, "rb");
|
File::IOFile file(SConfig::GetInstance().m_LocalCoreStartupParameter.m_strSRAM, "rb");
|
||||||
if (file)
|
if (file)
|
||||||
|
|
|
@ -63,7 +63,7 @@ union SRAM
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
void initSRAM();
|
void InitSRAM();
|
||||||
void SetCardFlashID(u8* buffer, u8 card_index);
|
void SetCardFlashID(u8* buffer, u8 card_index);
|
||||||
|
|
||||||
extern SRAM sram_dump;
|
extern SRAM sram_dump;
|
||||||
|
|
|
@ -174,7 +174,7 @@ void Spy(Wiimote* wm_, const void* data_, size_t size_)
|
||||||
// save key
|
// save key
|
||||||
if (region_offset >= 0x40 && region_offset <= 0x4c) {
|
if (region_offset >= 0x40 && region_offset <= 0x4c) {
|
||||||
if (!emu)
|
if (!emu)
|
||||||
wiimote_gen_key(&wm->m_ext_key, wm->m_reg_ext.encryption_key);
|
WiimoteGenerateKey(&wm->m_ext_key, wm->m_reg_ext.encryption_key);
|
||||||
INFO_LOG(CONSOLE, "Writing key: %s", ArrayToString((u8*)&wm->m_ext_key, sizeof(wm->m_ext_key), 0, 30).c_str());
|
INFO_LOG(CONSOLE, "Writing key: %s", ArrayToString((u8*)&wm->m_ext_key, sizeof(wm->m_ext_key), 0, 30).c_str());
|
||||||
}
|
}
|
||||||
if (data[3] == 0xa4 || data[3] == 0xa6) {
|
if (data[3] == 0xa4 || data[3] == 0xa6) {
|
||||||
|
@ -347,7 +347,7 @@ void Spy(Wiimote* wm_, const void* data_, size_t size_)
|
||||||
if (!emu && rdr->address>>8 == 0x40)
|
if (!emu && rdr->address>>8 == 0x40)
|
||||||
{
|
{
|
||||||
memcpy(((u8*)&wm->m_reg_ext.encryption_key), rdr->data, rdr->size+1);
|
memcpy(((u8*)&wm->m_reg_ext.encryption_key), rdr->data, rdr->size+1);
|
||||||
wiimote_gen_key(&wm->m_ext_key, wm->m_reg_ext.encryption_key);
|
WiimoteGenerateKey(&wm->m_ext_key, wm->m_reg_ext.encryption_key);
|
||||||
NOTICE_LOG(CONSOLE, "Reading key: %s", ArrayToString(((u8*)&wm->m_ext_key), sizeof(wm->m_ext_key), 0, 30).c_str());
|
NOTICE_LOG(CONSOLE, "Reading key: %s", ArrayToString(((u8*)&wm->m_ext_key), sizeof(wm->m_ext_key), 0, 30).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ void Spy(Wiimote* wm_, const void* data_, size_t size_)
|
||||||
|
|
||||||
// SWARN_LOG(CONSOLE, "key %s", ArrayToString(((u8*)&wm->m_ext_key), sizeof(wm->m_ext_key), 0, 30).c_str());
|
// SWARN_LOG(CONSOLE, "key %s", ArrayToString(((u8*)&wm->m_ext_key), sizeof(wm->m_ext_key), 0, 30).c_str());
|
||||||
// SWARN_LOG(CONSOLE, "decrypt %s", ArrayToString(rdr->data, rdr->size+1, 0, 30).c_str());
|
// SWARN_LOG(CONSOLE, "decrypt %s", ArrayToString(rdr->data, rdr->size+1, 0, 30).c_str());
|
||||||
// wiimote_decrypt(&wm->m_ext_key, rdr->data, dataReply[2]&0xffff, rdr->size+1);
|
// WiimoteDecrypt(&wm->m_ext_key, rdr->data, dataReply[2]&0xffff, rdr->size+1);
|
||||||
// SWARN_LOG(CONSOLE, "decrypt %s", ArrayToString(rdr->data, rdr->size+1, 0, 30).c_str());
|
// SWARN_LOG(CONSOLE, "decrypt %s", ArrayToString(rdr->data, rdr->size+1, 0, 30).c_str());
|
||||||
// decrypted = true;
|
// decrypted = true;
|
||||||
//}
|
//}
|
||||||
|
@ -394,7 +394,7 @@ void Spy(Wiimote* wm_, const void* data_, size_t size_)
|
||||||
|
|
||||||
// decrypt
|
// decrypt
|
||||||
//if(((u8*)&wm->m_reg_ext)[0xf0] == 0xaa) {
|
//if(((u8*)&wm->m_reg_ext)[0xf0] == 0xaa) {
|
||||||
// wiimote_decrypt(&wm->m_ext_key, &data[0x07], 0x00, (data[4] >> 0x04) + 1);
|
// WiimoteDecrypt(&wm->m_ext_key, &data[0x07], 0x00, (data[4] >> 0x04) + 1);
|
||||||
|
|
||||||
//if (wm->m_extension->name == "NUNCHUCK")
|
//if (wm->m_extension->name == "NUNCHUCK")
|
||||||
//{
|
//{
|
||||||
|
@ -542,9 +542,9 @@ void Spy(Wiimote* wm_, const void* data_, size_t size_)
|
||||||
// decrypt extension data
|
// decrypt extension data
|
||||||
//if (data[1] == 0x37 && !wm->GetMotionPlusActive())
|
//if (data[1] == 0x37 && !wm->GetMotionPlusActive())
|
||||||
//if (data[1] == 0x37)
|
//if (data[1] == 0x37)
|
||||||
// wiimote_decrypt(&wm->m_ext_key, &data[17], 0x00, 0x06);
|
// WiimoteDecrypt(&wm->m_ext_key, &data[17], 0x00, 0x06);
|
||||||
//if (data[1] == 0x35)
|
//if (data[1] == 0x35)
|
||||||
// wiimote_decrypt(&wm->m_ext_key, &data[7], 0x00, 0x06);
|
// WiimoteDecrypt(&wm->m_ext_key, &data[7], 0x00, 0x06);
|
||||||
|
|
||||||
//if (data[1] == 0x35 || data[1] == 0x37)
|
//if (data[1] == 0x35 || data[1] == 0x37)
|
||||||
//{
|
//{
|
||||||
|
@ -1004,7 +1004,7 @@ void Wiimote::WriteData(const wm_write_data* const wd)
|
||||||
// Run the key generation on all writes in the key area, it doesn't matter
|
// Run the key generation on all writes in the key area, it doesn't matter
|
||||||
// that we send it parts of a key, only the last full key will have an effect
|
// that we send it parts of a key, only the last full key will have an effect
|
||||||
if (address >= 0xa40040 && address <= 0xa4004c)
|
if (address >= 0xa40040 && address <= 0xa4004c)
|
||||||
wiimote_gen_key(&m_ext_key, m_reg_ext.encryption_key);
|
WiimoteGenerateKey(&m_ext_key, m_reg_ext.encryption_key);
|
||||||
}
|
}
|
||||||
else if (&m_reg_motion_plus == region_ptr)
|
else if (&m_reg_motion_plus == region_ptr)
|
||||||
{
|
{
|
||||||
|
@ -1139,7 +1139,7 @@ void Wiimote::ReadData(const wm_read_data* const rd)
|
||||||
// Encrypt data read from extension register
|
// Encrypt data read from extension register
|
||||||
// Check if encrypted reads is on
|
// Check if encrypted reads is on
|
||||||
if (0xaa == m_reg_ext.encryption)
|
if (0xaa == m_reg_ext.encryption)
|
||||||
wiimote_encrypt(&m_ext_key, block, address & 0xffff, (u8)size);
|
WiimoteEncrypt(&m_ext_key, block, address & 0xffff, (u8)size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -186,13 +186,13 @@ static const u8 sboxes[8][256] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static inline u8 ror8(const u8 a, const u8 b)
|
static inline u8 ROR8(const u8 a, const u8 b)
|
||||||
{
|
{
|
||||||
return (a>>b) | ((a<<(8-b))&0xff);
|
return (a>>b) | ((a<<(8-b))&0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void genkey(const u8* const rand, const u8 idx, u8* const key)
|
static void GenerateKey(const u8* const rand, const u8 idx, u8* const key)
|
||||||
{
|
{
|
||||||
const u8* const ans = ans_tbl[idx];
|
const u8* const ans = ans_tbl[idx];
|
||||||
u8 t0[10];
|
u8 t0[10];
|
||||||
|
@ -200,16 +200,16 @@ static void genkey(const u8* const rand, const u8 idx, u8* const key)
|
||||||
for (int i=0; i<10; ++i)
|
for (int i=0; i<10; ++i)
|
||||||
t0[i] = tsbox[rand[i]];
|
t0[i] = tsbox[rand[i]];
|
||||||
|
|
||||||
key[0] = ((ror8((ans[0]^t0[5]),(t0[2]%8)) - t0[9]) ^ t0[4]);
|
key[0] = ((ROR8((ans[0]^t0[5]),(t0[2]%8)) - t0[9]) ^ t0[4]);
|
||||||
key[1] = ((ror8((ans[1]^t0[1]),(t0[0]%8)) - t0[5]) ^ t0[7]);
|
key[1] = ((ROR8((ans[1]^t0[1]),(t0[0]%8)) - t0[5]) ^ t0[7]);
|
||||||
key[2] = ((ror8((ans[2]^t0[6]),(t0[8]%8)) - t0[2]) ^ t0[0]);
|
key[2] = ((ROR8((ans[2]^t0[6]),(t0[8]%8)) - t0[2]) ^ t0[0]);
|
||||||
key[3] = ((ror8((ans[3]^t0[4]),(t0[7]%8)) - t0[3]) ^ t0[2]);
|
key[3] = ((ROR8((ans[3]^t0[4]),(t0[7]%8)) - t0[3]) ^ t0[2]);
|
||||||
key[4] = ((ror8((ans[4]^t0[1]),(t0[6]%8)) - t0[3]) ^ t0[4]);
|
key[4] = ((ROR8((ans[4]^t0[1]),(t0[6]%8)) - t0[3]) ^ t0[4]);
|
||||||
key[5] = ((ror8((ans[5]^t0[7]),(t0[8]%8)) - t0[5]) ^ t0[9]);
|
key[5] = ((ROR8((ans[5]^t0[7]),(t0[8]%8)) - t0[5]) ^ t0[9]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void gentabs(const u8* const rand, const u8* const key, const u8 idx, u8* const ft, u8* const sb)
|
static void GenerateTables(const u8* const rand, const u8* const key, const u8 idx, u8* const ft, u8* const sb)
|
||||||
{
|
{
|
||||||
ft[0] = sboxes[idx][key[4]] ^ sboxes[(idx+1)%8][rand[3]];
|
ft[0] = sboxes[idx][key[4]] ^ sboxes[(idx+1)%8][rand[3]];
|
||||||
ft[1] = sboxes[idx][key[2]] ^ sboxes[(idx+1)%8][rand[5]];
|
ft[1] = sboxes[idx][key[2]] ^ sboxes[(idx+1)%8][rand[5]];
|
||||||
|
@ -234,7 +234,7 @@ static void gentabs(const u8* const rand, const u8* const key, const u8 idx, u8*
|
||||||
|
|
||||||
|
|
||||||
/* Generate key from the 0x40-0x4c data in g_RegExt */
|
/* Generate key from the 0x40-0x4c data in g_RegExt */
|
||||||
void wiimote_gen_key(wiimote_key* const key, const u8* const keydata)
|
void WiimoteGenerateKey(wiimote_key* const key, const u8* const keydata)
|
||||||
{
|
{
|
||||||
u8 rand[10];
|
u8 rand[10];
|
||||||
u8 skey[6];
|
u8 skey[6];
|
||||||
|
@ -251,14 +251,14 @@ void wiimote_gen_key(wiimote_key* const key, const u8* const keydata)
|
||||||
|
|
||||||
for (idx = 0; idx < 7; ++idx)
|
for (idx = 0; idx < 7; ++idx)
|
||||||
{
|
{
|
||||||
genkey(rand, idx, testkey);
|
GenerateKey(rand, idx, testkey);
|
||||||
if (0 == memcmp(testkey, skey, 6))
|
if (0 == memcmp(testkey, skey, 6))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// default case is idx = 7 which is valid (homebrew uses it for the 0x17 case)
|
// default case is idx = 7 which is valid (homebrew uses it for the 0x17 case)
|
||||||
//DEBUG_LOG(WIIMOTE, "idx: %d", idx);
|
//DEBUG_LOG(WIIMOTE, "idx: %d", idx);
|
||||||
|
|
||||||
gentabs(rand, skey, idx, key->ft, key->sb);
|
GenerateTables(rand, skey, idx, key->ft, key->sb);
|
||||||
|
|
||||||
//DEBUG_LOG(WIIMOTE, "ft: %02x %02x %02x %02x %02x %02x %02x %02x", key->ft[0], key->ft[1], key->ft[2], key->ft[3], key->ft[4], key->ft[5], key->ft[6], key->ft[7]);
|
//DEBUG_LOG(WIIMOTE, "ft: %02x %02x %02x %02x %02x %02x %02x %02x", key->ft[0], key->ft[1], key->ft[2], key->ft[3], key->ft[4], key->ft[5], key->ft[6], key->ft[7]);
|
||||||
//DEBUG_LOG(WIIMOTE, "sb: %02x %02x %02x %02x %02x %02x %02x %02x", key->sb[0], key->sb[1], key->sb[2], key->sb[3], key->sb[4], key->sb[5], key->sb[6], key->sb[7]);
|
//DEBUG_LOG(WIIMOTE, "sb: %02x %02x %02x %02x %02x %02x %02x %02x", key->sb[0], key->sb[1], key->sb[2], key->sb[3], key->sb[4], key->sb[5], key->sb[6], key->sb[7]);
|
||||||
|
@ -268,7 +268,7 @@ void wiimote_gen_key(wiimote_key* const key, const u8* const keydata)
|
||||||
|
|
||||||
// TODO: is there a reason these can only handle a length of 255?
|
// TODO: is there a reason these can only handle a length of 255?
|
||||||
/* Encrypt data */
|
/* Encrypt data */
|
||||||
void wiimote_encrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len)
|
void WiimoteEncrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < len; ++i, ++addr)
|
for (int i = 0; i < len; ++i, ++addr)
|
||||||
data[i] = (data[i] - key->ft[addr % 8]) ^ key->sb[addr % 8];
|
data[i] = (data[i] - key->ft[addr % 8]) ^ key->sb[addr % 8];
|
||||||
|
@ -276,7 +276,7 @@ void wiimote_encrypt(const wiimote_key* const key, u8* const data, int addr, con
|
||||||
|
|
||||||
|
|
||||||
/* Decrypt data */
|
/* Decrypt data */
|
||||||
void wiimote_decrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len)
|
void WiimoteDecrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < len; ++i, ++addr)
|
for (int i = 0; i < len; ++i, ++addr)
|
||||||
data[i] = (data[i] ^ key->sb[addr % 8]) + key->ft[addr % 8];
|
data[i] = (data[i] ^ key->sb[addr % 8]) + key->ft[addr % 8];
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// ===================================================
|
// The key structure to use with WiimoteGenerateKey()
|
||||||
/* They key structure to use with wiimote_gen_key() */
|
|
||||||
// ----------------
|
|
||||||
struct wiimote_key
|
struct wiimote_key
|
||||||
{
|
{
|
||||||
u8 ft[8];
|
u8 ft[8];
|
||||||
|
@ -16,7 +14,7 @@ struct wiimote_key
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void wiimote_encrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len);
|
void WiimoteEncrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len);
|
||||||
void wiimote_decrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len);
|
void WiimoteDecrypt(const wiimote_key* const key, u8* const data, int addr, const u8 len);
|
||||||
|
|
||||||
void wiimote_gen_key(wiimote_key* const key, const u8* const keydata);
|
void WiimoteGenerateKey(wiimote_key* const key, const u8* const keydata);
|
||||||
|
|
|
@ -602,7 +602,7 @@ void Wiimote::GetExtData(u8* const data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0xAA == m_reg_ext.encryption)
|
if (0xAA == m_reg_ext.encryption)
|
||||||
wiimote_encrypt(&m_ext_key, data, 0x00, sizeof(wm_extension));
|
WiimoteEncrypt(&m_ext_key, data, 0x00, sizeof(wm_extension));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wiimote::Update()
|
void Wiimote::Update()
|
||||||
|
|
Loading…
Reference in New Issue