aboutsummaryrefslogtreecommitdiff
path: root/lib/xixanta/src/mapping.rs
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-20 21:58:26 +0100
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-20 21:58:26 +0100
commit0bc97c99c644955096b3e13a2a7df6b281314e25 (patch)
tree1e09fa92a5ac71df1d097d8581e4538ce7182112 /lib/xixanta/src/mapping.rs
parent0087cc0631ae8e8b1892e674e34a9daa84ad0bb9 (diff)
downloadtools.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.rs163
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![
Mapping {
name: String::from("HEADER"),