From ffaa5353031149ab2416bcf6d8b46e0a44a3bb39 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Fri, 12 Sep 2025 21:18:34 +0200 Subject: readrom: Add detection of RAM, Timing and mirroring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Miquel Sabaté Solà --- crates/readrom/src/main.rs | 48 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) (limited to 'crates/readrom/src/main.rs') 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::() + 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]]) ); } -- cgit v1.2.3