diff options
Diffstat (limited to 'crates/readrom')
| -rw-r--r-- | crates/readrom/src/main.rs | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/crates/readrom/src/main.rs b/crates/readrom/src/main.rs index e930e0e..16dfa90 100644 --- a/crates/readrom/src/main.rs +++ b/crates/readrom/src/main.rs @@ -62,39 +62,71 @@ fn parse_arguments() -> Args { res } +// Capitalize the given string. +fn capitalize(s: &str) -> String { + let mut c = s.chars(); + match c.next() { + None => String::new(), + Some(f) => f.to_uppercase().collect::<String>() + c.as_str(), + } +} + fn print_header(header: &Header) { println!("Header:"); match header.kind { - Kind::INes => println!(" Kind:\t\tiNES"), - Kind::Nes20 => println!(" Kind:\t\tNES 2.0"), + Kind::INes => println!(" Kind:\t\t\tiNES"), + Kind::Nes20 => println!(" Kind:\t\t\tNES 2.0"), } println!( - " PRG ROM size:\t{} bytes ({}KB)", + " PRG ROM size:\t\t{} bytes ({}KB)", header.prg_rom_size * 16 * 1024, header.prg_rom_size * 16 ); println!( - " CHR ROM size:\t{} bytes ({}KB)", + " CHR ROM size:\t\t{} bytes ({}KB)", header.chr_rom_size * 8 * 1024, header.chr_rom_size * 8 ); - println!(" Mapper:\t{}", header.mapper); + + if let Some(def) = &header.prg_ram_definition { + println!( + " PRG-RAM size:\t\t{} bytes ({}KB); {}", + def.size, + def.size / 1024, + def.kind + ); + } + if let Some(def) = &header.chr_ram_definition { + println!( + " CHR-RAM size:\t\t{} bytes ({}KB); {}", + def.size, + def.size / 1024, + def.kind + ); + } + + println!(" Mapper:\t\t{}", header.mapper); + println!( + " Mirroring:\t\t{}", + capitalize(header.nametable_arrangement.mirroring()) + ); + println!(" CPU/PPU timing:\t{}", header.timing); } fn print_vectors(addrs: &[u8]) { println!("Vectors:"); println!( - " NMI:\t\t{:#04x}", + " NMI:\t\t\t{:#04x}", u16::from_le_bytes([addrs[0], addrs[1]]) ); println!( - " Reset:\t{:#04x}", + " Reset:\t\t{:#04x}", u16::from_le_bytes([addrs[2], addrs[3]]) ); println!( - " IRQ:\t\t{:#04x}", + " IRQ:\t\t\t{:#04x}", u16::from_le_bytes([addrs[4], addrs[5]]) ); } |
