diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-12-20 21:58:26 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-12-20 21:58:26 +0100 |
| commit | 0bc97c99c644955096b3e13a2a7df6b281314e25 (patch) | |
| tree | 1e09fa92a5ac71df1d097d8581e4538ce7182112 /lib/xixanta/src/mapping.rs | |
| parent | 0087cc0631ae8e8b1892e674e34a9daa84ad0bb9 (diff) | |
| download | tools.nes-0bc97c99c644955096b3e13a2a7df6b281314e25.tar.gz tools.nes-0bc97c99c644955096b3e13a2a7df6b281314e25.zip | |
Add support for UxROM chips
I have also added an end-to-end test for it.
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'lib/xixanta/src/mapping.rs')
| -rw-r--r-- | lib/xixanta/src/mapping.rs | 163 |
1 files changed, 161 insertions, 2 deletions
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<Mapping> = 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<Mapping> = vec