use std::fmt;
#[derive(Debug)]
pub enum CartType {
RomOnly,
Mbc1,
Mbc1Ram,
Mbc1RamBattery,
Mbc2,
Mbc2Battery,
RomRam,
RomRamBattery,
Mmm01,
Mmm01Ram,
Mmm01RamBattery,
Mbc3TimerBattery,
Mbc3TimerRamBattery,
Mbc3,
Mbc3Ram,
Mbc3RamBattery,
Mbc5,
Mbc5Ram,
Mbc5RamBattery,
Mbc5Rumble,
Mbc5RumbleRam,
Mbc5RumbleRamBattery,
Mbc6,
Mbc7SensorRumbleRamBattery,
PocketCamera,
BandaiTama5,
Huc3,
Huc1RamBattery,
Unknown(u8),
}
impl fmt::Display for CartType {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::RomOnly => write!(fmt, "ROM only")?,
Self::Mbc1 => write!(fmt, "MBC1")?,
Self::Mbc1Ram => write!(fmt, "MBC1 + RAM")?,
Self::Mbc1RamBattery => write!(fmt, "MBC1 + RAM + battery")?,
Self::Mbc2 => write!(fmt, "MBC2")?,
Self::Mbc2Battery => write!(fmt, "MBC2 + battery")?,
Self::RomRam => write!(fmt, "ROM + RAM")?,
Self::RomRamBattery => write!(fmt, "ROM + RAM + battery")?,
Self::Mmm01 => write!(fmt, "MMM01")?,
Self::Mmm01Ram => write!(fmt, "MMM01 + RAM")?,
Self::Mmm01RamBattery => write!(fmt, "MMM01 + RAM + battery")?,
Self::Mbc3TimerBattery => write!(fmt, "MBC3 + Timer + battery")?,
Self::Mbc3TimerRamBattery => write!(fmt, "MBC3 + Timer + RAM + battery")?,
Self::Mbc3 => write!(fmt, "MBC3")?,
Self::Mbc3Ram => write!(fmt, "MBC3 + RAM")?,
Self::Mbc3RamBattery => write!(fmt, "MBC3 + RAM + battery")?,
Self::Mbc5 => write!(fmt, "MBC5")?,
Self::Mbc5Ram => write!(fmt, "MBC5 + RAM")?,
Self::Mbc5RamBattery => write!(fmt, "MBC5 + RAM +battery")?,
Self::Mbc5Rumble => write!(fmt, "MBC5 + rumble")?,
Self::Mbc5RumbleRam => write!(fmt, "MBC5 + rumble + RAM")?,
Self::Mbc5RumbleRamBattery => write!(fmt, "MBC5 + rumble + RAM + battery")?,
Self::Mbc6 => write!(fmt, "MBC6")?,
Self::Mbc7SensorRumbleRamBattery => {
write!(fmt, "MBC7 + sensor + rumble + RAM + battery")?;
}
Self::PocketCamera => write!(fmt, "Pocket Camera")?,
Self::BandaiTama5 => write!(fmt, "Bandai Tama5")?,
Self::Huc3 => write!(fmt, "HUC3")?,
Self::Huc1RamBattery => write!(fmt, "HUC1 + RAM + battery")?,
Self::Unknown(val) => write!(fmt, "Unknown region, code {val}")?,
}
Ok(())
}
}
impl From<u8> for CartType {
fn from(data: u8) -> Self {
match data {
0 => Self::RomOnly,
1 => Self::Mbc1,
2 => Self::Mbc1Ram,
3 => Self::Mbc1RamBattery,
5 => Self::Mbc2,
6 => Self::Mbc2Battery,
8 => Self::RomRam,
9 => Self::RomRamBattery,
11 => Self::Mmm01,
12 => Self::Mmm01Ram,
13 => Self::Mmm01RamBattery,
15 => Self::Mbc3TimerBattery,
16 => Self::Mbc3TimerRamBattery,
17 => Self::Mbc3,
18 => Self::Mbc3Ram,
19 => Self::Mbc3RamBattery,
25 => Self::Mbc5,
26 => Self::Mbc5Ram,
27 => Self::Mbc5RamBattery,
28 => Self::Mbc5Rumble,
29 => Self::Mbc5RumbleRam,
30 => Self::Mbc5RumbleRamBattery,
32 => Self::Mbc6,
34 => Self::Mbc7SensorRumbleRamBattery,
252 => Self::PocketCamera,
253 => Self::BandaiTama5,
254 => Self::Huc3,
255 => Self::Huc1RamBattery,
_ => Self::Unknown(data),
}
}
}