rlvgl_core/plugins/
nes.rs

1//! Utilities for parsing iNES cartridge headers.
2use alloc::string::String;
3use yane::core::Cartridge;
4
5/// Parse an iNES ROM image and return the PRG and CHR ROM sizes in bytes.
6pub fn rom_sizes(bytes: &[u8]) -> Result<(usize, usize), String> {
7    let cart = Cartridge::from_ines(bytes, None)?;
8    Ok((cart.memory.prg_rom.len(), cart.memory.chr_rom.len()))
9}
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14
15    #[test]
16    fn parse_minimal_header() {
17        let mut rom = vec![0u8; 16 + 0x4000];
18        rom[0..4].copy_from_slice(b"NES\x1a");
19        rom[4] = 1; // PRG ROM banks
20        rom[5] = 0; // CHR ROM banks
21        let (prg, chr) = rom_sizes(&rom).unwrap();
22        assert_eq!(prg, 0x4000);
23        assert_eq!(chr, 0);
24    }
25}