Mesen-SX/Core/GameboyHeader.h
2020-12-19 23:30:09 +03:00

94 lines
1.4 KiB
C

#pragma once
#include "stdafx.h"
struct GameboyHeader
{
//Starts at 0x134
char Title[11];
char ManufacturerCode[4];
uint8_t CgbFlag;
char LicenseeCode[2];
uint8_t SgbFlag;
uint8_t CartType;
uint8_t PrgRomSize;
uint8_t CartRamSize;
uint8_t DestCode;
uint8_t OldLicenseeCode;
uint8_t MaskRomVersion;
uint8_t HeaderChecksum;
uint8_t GlobalChecksum[2];
uint32_t GetPrgRomSize()
{
if (PrgRomSize < 16)
{
return 0x8000 << PrgRomSize;
}
return 0x8000;
}
uint32_t GetCartRamSize()
{
if (CartType == 5 || CartType == 6)
{
//MBC2 has 512x4bits of cart ram
return 0x200;
}
switch (CartRamSize)
{
case 0: return 0;
case 1: return 0x800;
case 2: return 0x2000;
case 3: return 0x8000;
case 4: return 0x20000;
case 5: return 0x10000;
}
return 0;
}
bool HasBattery()
{
switch (CartType)
{
case 0x03:
case 0x06:
case 0x09:
case 0x0D:
case 0x0F:
case 0x10:
case 0x13:
case 0x1B:
case 0x1E:
case 0x22:
case 0xFF:
return true;
}
return false;
}
string GetCartName()
{
int nameLength = 11;
for (int i = 0; i < 11; i++)
{
if (Title[i] == 0)
{
nameLength = i;
break;
}
}
string name = string(Title, nameLength);
size_t lastNonSpace = name.find_last_not_of(' ');
if (lastNonSpace != string::npos)
{
return name.substr(0, lastNonSpace + 1);
}
else
{
return name;
}
}
};