diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-09-12 21:18:34 +0200 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2025-09-12 21:55:20 +0200 |
| commit | ffaa5353031149ab2416bcf6d8b46e0a44a3bb39 (patch) | |
| tree | a4b9bc79d9825536e2525de0865584db851ddb0b /crates/readrom | |
| parent | 85f8afab8c6e6bd26509c54c765c542279e26675 (diff) | |
| download | tools.nes-ffaa5353031149ab2416bcf6d8b46e0a44a3bb39.tar.gz tools.nes-ffaa5353031149ab2416bcf6d8b46e0a44a3bb39.zip | |
readrom: Add detection of RAM, Timing and mirroring
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
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]]) ); } |
