From 0bc97c99c644955096b3e13a2a7df6b281314e25 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Fri, 20 Dec 2024 21:58:26 +0100 Subject: Add support for UxROM chips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I have also added an end-to-end test for it. Signed-off-by: Miquel Sabaté Solà --- lib/xixanta/src/mapping.rs | 163 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 161 insertions(+), 2 deletions(-) (limited to 'lib/xixanta/src/mapping.rs') diff --git a/lib/xixanta/src/mapping.rs b/lib/xixanta/src/mapping.rs index 2859bbf..8cf752d 100644 --- a/lib/xixanta/src/mapping.rs +++ b/lib/xixanta/src/mapping.rs @@ -94,8 +94,167 @@ lazy_static! { }, ]; - // The same mapper as NROM, but it adds a "STARTUP" segment into the "ROM0" - // mapping so to behave the same as the default "cc65" configuration. + // Mapper for UxROM boards (UxROM (NES-UNROM, NES-UOROM, HVC-UN1ROM their + // HVC counterparts, and clone boards). + pub static ref UXROM: Vec = vec![ + Mapping { + name: String::from("HEADER"), + start: 0x0000, + size: 0x0010, + offset: 0, + fill: Some(0x00), + section_type: SectionType::Header, + segments: vec![Segment { + name: String::from("HEADER"), + len: 0, + offset: 0, + bundles: vec![], + }] + }, + Mapping { + name: String::from("PRG0"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xF8), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK0"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG1"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xF9), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK1"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG2"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xFA), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK2"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG3"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xFB), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK3"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG4"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xFC), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK4"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG5"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xFD), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK5"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG6"), + start: 0x8000, + size: 0x4000, + offset: 0, + fill: Some(0xFE), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("BANK6"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("PRG"), + start: 0xC000, + size: 0x3FFA, + offset: 0, + fill: Some(0xFF), + section_type: SectionType::PrgRom, + segments: vec![ + Segment { + name: String::from("FIXED"), + len: 0, + offset: 0, + bundles: vec![], + }, + ] + }, + Mapping { + name: String::from("ROMV"), + start: 0xFFFA, + size: 0x0006, + offset: 0, + fill: Some(0x00), + section_type: SectionType::PrgRom, + segments: vec![Segment { + name: String::from("VECTORS"), + len: 0, + offset: 0, + bundles: vec![], + },] + }, + ]; + pub static ref NROM65: Vec = vec![ Mapping { name: String::from("HEADER"), -- cgit v1.2.3