mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-11 00:29:11 +01:00
Merge pull request #5785 from leoetlino/sysconf-fix
SysConf: Minor fixes
This commit is contained in:
commit
c27dd9dc20
@ -100,14 +100,15 @@ bool SysConf::LoadFromFile(const std::string& file_name)
|
|||||||
{
|
{
|
||||||
u16 data_length = 0;
|
u16 data_length = 0;
|
||||||
file.ReadBytes(&data_length, sizeof(data_length));
|
file.ReadBytes(&data_length, sizeof(data_length));
|
||||||
data.resize(Common::swap16(data_length));
|
// The stored u16 is length - 1, not length.
|
||||||
|
data.resize(Common::swap16(data_length) + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Entry::Type::SmallArray:
|
case Entry::Type::SmallArray:
|
||||||
{
|
{
|
||||||
u8 data_length = 0;
|
u8 data_length = 0;
|
||||||
file.ReadBytes(&data_length, sizeof(data_length));
|
file.ReadBytes(&data_length, sizeof(data_length));
|
||||||
data.resize(data_length);
|
data.resize(data_length + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Entry::Type::Byte:
|
case Entry::Type::Byte:
|
||||||
@ -165,20 +166,17 @@ bool SysConf::Save() const
|
|||||||
case Entry::Type::BigArray:
|
case Entry::Type::BigArray:
|
||||||
{
|
{
|
||||||
const u16 data_size = static_cast<u16>(item.bytes.size());
|
const u16 data_size = static_cast<u16>(item.bytes.size());
|
||||||
AppendToBuffer<u16>(&entries, data_size);
|
// length - 1 is stored, not length.
|
||||||
|
AppendToBuffer<u16>(&entries, data_size - 1);
|
||||||
entries.insert(entries.end(), item.bytes.cbegin(), item.bytes.cbegin() + data_size);
|
entries.insert(entries.end(), item.bytes.cbegin(), item.bytes.cbegin() + data_size);
|
||||||
// Unused byte.
|
|
||||||
entries.insert(entries.end(), '\0');
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Entry::Type::SmallArray:
|
case Entry::Type::SmallArray:
|
||||||
{
|
{
|
||||||
const u8 data_size = static_cast<u8>(item.bytes.size());
|
const u8 data_size = static_cast<u8>(item.bytes.size());
|
||||||
AppendToBuffer<u8>(&entries, data_size);
|
AppendToBuffer<u8>(&entries, data_size - 1);
|
||||||
entries.insert(entries.end(), item.bytes.cbegin(), item.bytes.cbegin() + data_size);
|
entries.insert(entries.end(), item.bytes.cbegin(), item.bytes.cbegin() + data_size);
|
||||||
// Unused byte.
|
|
||||||
entries.insert(entries.end(), '\0');
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,22 +270,26 @@ void SysConf::ApplySettingsFromMovie()
|
|||||||
|
|
||||||
void SysConf::InsertDefaultEntries()
|
void SysConf::InsertDefaultEntries()
|
||||||
{
|
{
|
||||||
AddEntry({Entry::Type::BigArray, "BT.DINF", std::vector<u8>(0x460)});
|
AddEntry({Entry::Type::BigArray, "BT.DINF", std::vector<u8>(0x460 + 1)});
|
||||||
AddEntry({Entry::Type::BigArray, "BT.CDIF", std::vector<u8>(0x204)});
|
AddEntry({Entry::Type::BigArray, "BT.CDIF", std::vector<u8>(0x204 + 1)});
|
||||||
AddEntry({Entry::Type::Long, "BT.SENS", {0, 0, 0, 3}});
|
AddEntry({Entry::Type::Long, "BT.SENS", {0, 0, 0, 3}});
|
||||||
AddEntry({Entry::Type::Byte, "BT.BAR", {1}});
|
AddEntry({Entry::Type::Byte, "BT.BAR", {1}});
|
||||||
AddEntry({Entry::Type::Byte, "BT.SPKV", {0x58}});
|
AddEntry({Entry::Type::Byte, "BT.SPKV", {0x58}});
|
||||||
AddEntry({Entry::Type::Byte, "BT.MOT", {1}});
|
AddEntry({Entry::Type::Byte, "BT.MOT", {1}});
|
||||||
|
|
||||||
const std::vector<u8> console_nick = {0, 'd', 0, 'o', 0, 'l', 0, 'p', 0, 'h', 0, 'i', 0, 'n'};
|
std::vector<u8> console_nick = {0, 'd', 0, 'o', 0, 'l', 0, 'p', 0, 'h', 0, 'i', 0, 'n'};
|
||||||
|
// 22 bytes: 2 bytes per character (10 characters maximum),
|
||||||
|
// 1 for a null terminating character, 1 for the string length
|
||||||
|
console_nick.resize(22);
|
||||||
|
console_nick[21] = static_cast<u8>(strlen("dolphin"));
|
||||||
AddEntry({Entry::Type::SmallArray, "IPL.NIK", std::move(console_nick)});
|
AddEntry({Entry::Type::SmallArray, "IPL.NIK", std::move(console_nick)});
|
||||||
|
|
||||||
AddEntry({Entry::Type::Byte, "IPL.LNG", {1}});
|
AddEntry({Entry::Type::Byte, "IPL.LNG", {1}});
|
||||||
std::vector<u8> ipl_sadr(0x1007);
|
std::vector<u8> ipl_sadr(0x1007 + 1);
|
||||||
ipl_sadr[0] = 0x6c;
|
ipl_sadr[0] = 0x6c;
|
||||||
AddEntry({Entry::Type::BigArray, "IPL.SADR", std::move(ipl_sadr)});
|
AddEntry({Entry::Type::BigArray, "IPL.SADR", std::move(ipl_sadr)});
|
||||||
|
|
||||||
std::vector<u8> ipl_pc(0x50);
|
std::vector<u8> ipl_pc(0x49 + 1);
|
||||||
ipl_pc[1] = 0x04;
|
ipl_pc[1] = 0x04;
|
||||||
ipl_pc[2] = 0x14;
|
ipl_pc[2] = 0x14;
|
||||||
AddEntry({Entry::Type::SmallArray, "IPL.PC", std::move(ipl_pc)});
|
AddEntry({Entry::Type::SmallArray, "IPL.PC", std::move(ipl_pc)});
|
||||||
@ -305,7 +307,7 @@ void SysConf::InsertDefaultEntries()
|
|||||||
AddEntry({Entry::Type::Byte, "IPL.DH", {0}});
|
AddEntry({Entry::Type::Byte, "IPL.DH", {0}});
|
||||||
AddEntry({Entry::Type::Long, "IPL.INC", {0, 0, 0, 8}});
|
AddEntry({Entry::Type::Long, "IPL.INC", {0, 0, 0, 8}});
|
||||||
AddEntry({Entry::Type::Long, "IPL.FRC", {0, 0, 0, 0x28}});
|
AddEntry({Entry::Type::Long, "IPL.FRC", {0, 0, 0, 0x28}});
|
||||||
AddEntry({Entry::Type::SmallArray, "IPL.IDL", {0}});
|
AddEntry({Entry::Type::SmallArray, "IPL.IDL", {0, 1}});
|
||||||
|
|
||||||
AddEntry({Entry::Type::Long, "NET.WCFG", {0, 0, 0, 1}});
|
AddEntry({Entry::Type::Long, "NET.WCFG", {0, 0, 0, 1}});
|
||||||
AddEntry({Entry::Type::Long, "NET.CTPC", std::vector<u8>(4)});
|
AddEntry({Entry::Type::Long, "NET.CTPC", std::vector<u8>(4)});
|
||||||
|
@ -19,11 +19,9 @@ namespace IOS
|
|||||||
{
|
{
|
||||||
namespace HLE
|
namespace HLE
|
||||||
{
|
{
|
||||||
constexpr u16 BT_INFO_SECTION_LENGTH = 0x460;
|
|
||||||
|
|
||||||
void BackUpBTInfoSection(const SysConf* sysconf)
|
void BackUpBTInfoSection(const SysConf* sysconf)
|
||||||
{
|
{
|
||||||
const std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + DIR_SEP WII_BTDINF_BACKUP;
|
const std::string filename = File::GetUserPath(D_CONFIG_IDX) + DIR_SEP WII_BTDINF_BACKUP;
|
||||||
if (File::Exists(filename))
|
if (File::Exists(filename))
|
||||||
return;
|
return;
|
||||||
File::IOFile backup(filename, "wb");
|
File::IOFile backup(filename, "wb");
|
||||||
@ -39,18 +37,17 @@ void BackUpBTInfoSection(const SysConf* sysconf)
|
|||||||
|
|
||||||
void RestoreBTInfoSection(SysConf* sysconf)
|
void RestoreBTInfoSection(SysConf* sysconf)
|
||||||
{
|
{
|
||||||
const std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + DIR_SEP WII_BTDINF_BACKUP;
|
const std::string filename = File::GetUserPath(D_CONFIG_IDX) + DIR_SEP WII_BTDINF_BACKUP;
|
||||||
File::IOFile backup(filename, "rb");
|
File::IOFile backup(filename, "rb");
|
||||||
if (!backup)
|
if (!backup)
|
||||||
return;
|
return;
|
||||||
std::vector<u8> section(BT_INFO_SECTION_LENGTH);
|
auto& section = sysconf->GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes;
|
||||||
if (!backup.ReadBytes(section.data(), section.size()))
|
if (!backup.ReadBytes(section.data(), section.size()))
|
||||||
{
|
{
|
||||||
ERROR_LOG(IOS_WIIMOTE, "Failed to read backed up BT.DINF section");
|
ERROR_LOG(IOS_WIIMOTE, "Failed to read backed up BT.DINF section");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sysconf->GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes = std::move(section);
|
|
||||||
File::Delete(filename);
|
File::Delete(filename);
|
||||||
}
|
}
|
||||||
} // namespace HLE
|
} // namespace HLE
|
||||||
|
@ -47,7 +47,7 @@ BluetoothEmu::BluetoothEmu(Kernel& ios, const std::string& device_name)
|
|||||||
if (!Core::WantsDeterminism())
|
if (!Core::WantsDeterminism())
|
||||||
BackUpBTInfoSection(&sysconf);
|
BackUpBTInfoSection(&sysconf);
|
||||||
|
|
||||||
_conf_pads BT_DINF;
|
_conf_pads BT_DINF{};
|
||||||
bdaddr_t tmpBD;
|
bdaddr_t tmpBD;
|
||||||
u8 i = 0;
|
u8 i = 0;
|
||||||
while (i < MAX_BBMOTES)
|
while (i < MAX_BBMOTES)
|
||||||
@ -78,9 +78,9 @@ BluetoothEmu::BluetoothEmu(Kernel& ios, const std::string& device_name)
|
|||||||
|
|
||||||
// save now so that when games load sysconf file it includes the new Wii Remotes
|
// save now so that when games load sysconf file it includes the new Wii Remotes
|
||||||
// and the correct order for connected Wii Remotes
|
// and the correct order for connected Wii Remotes
|
||||||
std::vector<u8> data(sizeof(_conf_pads));
|
auto& section = sysconf.GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes;
|
||||||
std::memcpy(data.data(), &BT_DINF, data.size());
|
section.resize(sizeof(_conf_pads));
|
||||||
sysconf.GetOrAddEntry("BT.DINF", SysConf::Entry::Type::BigArray)->bytes = std::move(data);
|
std::memcpy(section.data(), &BT_DINF, sizeof(_conf_pads));
|
||||||
if (!sysconf.Save())
|
if (!sysconf.Save())
|
||||||
PanicAlertT("Failed to write BT.DINF to SYSCONF");
|
PanicAlertT("Failed to write BT.DINF to SYSCONF");
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ private:
|
|||||||
u8 num_registered;
|
u8 num_registered;
|
||||||
_conf_pad_device registered[CONF_PAD_MAX_REGISTERED];
|
_conf_pad_device registered[CONF_PAD_MAX_REGISTERED];
|
||||||
_conf_pad_device active[MAX_BBMOTES];
|
_conf_pad_device active[MAX_BBMOTES];
|
||||||
u8 unknown[0x45];
|
_conf_pad_device unknown;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user