mirror of
https://git.checksum.fail/alec/bahamut.git
synced 2026-05-26 17:05:20 +00:00
42 lines
1.0 KiB
HolyC
42 lines
1.0 KiB
HolyC
U0 parseHeader(U8 *rom, ROMHeader *header)
|
|
{
|
|
I64 i;
|
|
header->name = CAlloc(24);
|
|
MemCpy(header->name, rom+0x7FC0, 20);
|
|
i = StrLen(header->name)-1;
|
|
while (header->name[i]==' ') { header->name[i]=NULL; i--; }
|
|
header->type = rom[0x7fd5] & 0xf;
|
|
header->speed = rom[0x7fd5] >> 4;
|
|
header->chips = rom[0x7fd6];
|
|
header->romSize = 0x400 << rom[0x7fd7];
|
|
header->ramSize = 0x400 << rom[0x7fd8];
|
|
header->hasSram = header->chips > 0;
|
|
header->banks = header->romSize / 0x8000;
|
|
header->sramSize = cond(header->hasSram, header->ramSize, 0);
|
|
if (header->hasSram) sram = MAlloc(header->ramSize);
|
|
}
|
|
|
|
U0 LoROM(U8 *filename)
|
|
{
|
|
|
|
// LoROM loader
|
|
MemSet(&header, NULL, sizeof(ROMHeader));
|
|
I64 rom_length;
|
|
rom = FileRead(filename, &rom_length);
|
|
|
|
// skip copier header
|
|
if (rom_length%1024)
|
|
{
|
|
rom += 512;
|
|
rom_length -= 512;
|
|
}
|
|
|
|
parseHeader(rom, &header);
|
|
|
|
if (header.romSize < rom_length)
|
|
{
|
|
"Incorrect romSize?\n";
|
|
return;
|
|
}
|
|
|
|
} |