Emux/Emux.GameBoy/Cartridge/CartridgeType.cs

183 lines
5.4 KiB
C#

namespace Emux.GameBoy.Cartridge
{
/// <summary>
/// Provides a collection of valid (but not necessarily supported) cartridge types.
/// </summary>
public enum CartridgeType : byte
{
RomOnly = 0x00,
Mbc1 = 0x01,
Mbc1Ram = 0x02,
Mbc1RamBattery = 0x03,
Mbc2 = 0x05,
Mbc2Battery = 0x06,
RomRam = 0x8,
RomRamBattery = 0x9,
Mmm01 = 0xB,
Mmm01Ram = 0xC,
Mmm01RamBattery = 0xD,
Mbc3TimerBattery = 0xF,
Mbc3TimerRamBattery = 0x10,
Mbc3 = 0x11,
Mbc3Ram = 0x12,
Mbc3RamBattery = 0x13,
Mbc4 = 0x15,
Mbc4Ram = 0x16,
Mbc4RamBattery = 0x17,
Mbc5 = 0x19,
Mbc5Ram = 0x1A,
Mbc5RamBattery = 0x1B,
Mbc5Rumble = 0x1C,
Mbc5RumbleRam = 0x1D,
Mbc5RumbleRamBattery = 0x1E,
PocketCamera = 0xFC,
BandaiTama5 = 0xFD,
HuC3 = 0xFE,
HuC1RamBattery = 0xFF
}
public static class CartridgeTypeExtensions
{
public static bool IsRom(this CartridgeType type)
{
switch (type)
{
case CartridgeType.RomOnly:
case CartridgeType.RomRam:
case CartridgeType.RomRamBattery:
return true;
}
return false;
}
public static bool IsMbc1(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc1:
case CartridgeType.Mbc1Ram:
case CartridgeType.Mbc1RamBattery:
return true;
}
return false;
}
public static bool IsMbc2(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc2:
case CartridgeType.Mbc2Battery:
return true;
}
return false;
}
public static bool IsMbc3(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc3:
case CartridgeType.Mbc3Ram:
case CartridgeType.Mbc3RamBattery:
case CartridgeType.Mbc3TimerBattery:
case CartridgeType.Mbc3TimerRamBattery:
return true;
}
return false;
}
public static bool IsMbc4(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc4:
case CartridgeType.Mbc4Ram:
case CartridgeType.Mbc4RamBattery:
return true;
}
return false;
}
public static bool IsMbc5(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc5:
case CartridgeType.Mbc5Ram:
case CartridgeType.Mbc5RamBattery:
case CartridgeType.Mbc5Rumble:
case CartridgeType.Mbc5RumbleRam:
case CartridgeType.Mbc5RumbleRamBattery:
return true;
}
return false;
}
public static bool HasRam(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc1Ram:
case CartridgeType.Mbc3Ram:
case CartridgeType.Mbc3RamBattery:
case CartridgeType.Mbc3TimerRamBattery:
case CartridgeType.Mbc4Ram:
case CartridgeType.Mbc4RamBattery:
case CartridgeType.Mbc5Ram:
case CartridgeType.Mbc5RamBattery:
case CartridgeType.Mbc5RumbleRam:
case CartridgeType.Mbc5RumbleRamBattery:
case CartridgeType.HuC1RamBattery:
case CartridgeType.RomRam:
case CartridgeType.Mmm01Ram:
case CartridgeType.Mmm01RamBattery:
return true;
}
return false;
}
public static bool HasBattery(this CartridgeType type)
{
switch (type)
{
case CartridgeType.RomRamBattery:
case CartridgeType.Mbc1RamBattery:
case CartridgeType.Mbc2Battery:
case CartridgeType.Mbc3RamBattery:
case CartridgeType.Mbc3TimerBattery:
case CartridgeType.Mbc3TimerRamBattery:
case CartridgeType.Mbc4RamBattery:
case CartridgeType.Mbc5RamBattery:
case CartridgeType.Mmm01RamBattery:
case CartridgeType.HuC1RamBattery:
return true;
}
return false;
}
public static bool HasTimer(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc3TimerBattery:
case CartridgeType.Mbc3TimerRamBattery:
return true;
}
return false;
}
public static bool HasRumble(this CartridgeType type)
{
switch (type)
{
case CartridgeType.Mbc5Rumble:
case CartridgeType.Mbc5RumbleRam:
case CartridgeType.Mbc5RumbleRamBattery:
return true;
}
return false;
}
}
}