Wow the ROM Header was just completely busted. Game list view works now
This commit is contained in:
+24
-28
@@ -91,9 +91,9 @@ FORCE_INLINE void SetROMCIC(u32 checksum, ROM &rom) {
|
||||
}
|
||||
|
||||
ROM Mem::LoadROM(const bool isArchive, const std::string &filename) {
|
||||
ROM rom;
|
||||
rom.cart.resize(CART_SIZE);
|
||||
std::ranges::fill(rom.cart, 0);
|
||||
ROM res;
|
||||
res.cart.resize(CART_SIZE);
|
||||
std::ranges::fill(res.cart, 0);
|
||||
u32 endianness;
|
||||
{
|
||||
size_t sizeAdjusted;
|
||||
@@ -107,37 +107,33 @@ ROM Mem::LoadROM(const bool isArchive, const std::string &filename) {
|
||||
endianness = std::byteswap(ircolib::ReadAccess<u32>(buf, 0));
|
||||
Util::SwapN64Rom<true>(buf, endianness);
|
||||
|
||||
std::ranges::copy(buf, rom.cart.begin());
|
||||
rom.mask = sizeAdjusted - 1;
|
||||
memcpy(&rom.header, buf.data(), sizeof(ROMHeader));
|
||||
std::ranges::copy(buf, res.cart.begin());
|
||||
res.mask = sizeAdjusted - 1;
|
||||
memcpy(&res.header, buf.data(), sizeof(ROMHeader));
|
||||
}
|
||||
memcpy(rom.gameNameCart, rom.header.imageName, sizeof(rom.header.imageName));
|
||||
memcpy(res.gameNameCart, res.header.imageName, sizeof(res.header.imageName));
|
||||
|
||||
rom.header.clockRate = std::byteswap(rom.header.clockRate);
|
||||
rom.header.programCounter = std::byteswap(rom.header.programCounter);
|
||||
rom.header.release = std::byteswap(rom.header.release);
|
||||
rom.header.crc1 = std::byteswap(rom.header.crc1);
|
||||
rom.header.crc2 = std::byteswap(rom.header.crc2);
|
||||
rom.header.unknown = std::byteswap(rom.header.unknown);
|
||||
rom.header.unknown2 = std::byteswap(rom.header.unknown2);
|
||||
rom.header.manufacturerId = std::byteswap(rom.header.manufacturerId);
|
||||
rom.header.cartridgeId = std::byteswap(rom.header.cartridgeId);
|
||||
res.header.clockRate = std::byteswap(res.header.clockRate);
|
||||
res.header.programCounter = std::byteswap(res.header.programCounter);
|
||||
res.header.release = std::byteswap(res.header.release);
|
||||
res.header.unknown = std::byteswap(res.header.unknown);
|
||||
res.header.unknown2 = std::byteswap(res.header.unknown2);
|
||||
|
||||
rom.code[0] = rom.header.manufacturerId & 0xFF;
|
||||
rom.code[1] = (rom.header.cartridgeId >> 8) & 0xFF;
|
||||
rom.code[2] = rom.header.cartridgeId & 0xFF;
|
||||
rom.code[3] = '\0';
|
||||
res.code[0] = res.header.categoryCode;
|
||||
res.code[1] = res.header.uniqueCode[0];
|
||||
res.code[2] = res.header.uniqueCode[1];
|
||||
res.code[3] = '\0';
|
||||
|
||||
for (int i = sizeof(rom.header.imageName) - 1; rom.gameNameCart[i] == ' '; i--) {
|
||||
rom.gameNameCart[i] = '\0';
|
||||
for (int i = sizeof(res.header.imageName) - 1; res.gameNameCart[i] == ' '; i--) {
|
||||
res.gameNameCart[i] = '\0';
|
||||
}
|
||||
|
||||
const u32 checksum = SDL_crc32(0, &rom.cart[0x40], 0x9C0);
|
||||
SetROMCIC(checksum, rom);
|
||||
endianness = std::byteswap(ircolib::ReadAccess<u32>(rom.cart, 0));
|
||||
Util::SwapN64Rom(rom.cart, endianness);
|
||||
rom.pal = IsROMPAL(rom);
|
||||
return rom;
|
||||
const u32 checksum = SDL_crc32(0, &res.cart[0x40], 0x9C0);
|
||||
SetROMCIC(checksum, res);
|
||||
endianness = std::byteswap(ircolib::ReadAccess<u32>(res.cart, 0));
|
||||
Util::SwapN64Rom(res.cart, endianness);
|
||||
res.pal = IsROMPAL(res);
|
||||
return res;
|
||||
}
|
||||
|
||||
template <>
|
||||
|
||||
Reference in New Issue
Block a user