@tmustier/pi-nes 0.2.16 → 0.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,34 +118,39 @@ impl Mapper for MMC1Mapper {
118
118
  fn map(&self, address: u32) -> u32 {
119
119
  let bank: u32;
120
120
  let mut offset = address & 0x3FFF;
121
- let bank_mask = if self.program_bank_num > 16 { 0x1F } else { 0x0F };
122
- let mut bank_num = self.prg_bank_register.load() as u32 & bank_mask;
123
- if self.program_bank_num > 0 {
124
- bank_num %= self.program_bank_num as u32;
125
- }
121
+ let prg_low = (self.prg_bank_register.load() as u32) & 0x0F;
122
+ let prg_high = if self.program_bank_num > 16 {
123
+ ((self.chr_bank0_register.load() as u32) & 0x10) >> 4
124
+ } else {
125
+ 0
126
+ };
127
+ let outer_offset = prg_high * 0x10;
128
+ let bank_num = prg_low;
126
129
 
127
130
  match self.control_register.load_bits(2, 2) {
128
131
  0 | 1 => {
129
132
  // switch 32KB at 0x8000, ignoring low bit of bank number
130
133
  // TODO: Fix me
131
134
  offset = offset | (address & 0x4000);
132
- bank = bank_num & 0x1E;
135
+ bank = outer_offset + (bank_num & 0x1E);
133
136
  },
134
137
  2 => {
135
138
  // fix first bank at 0x8000 and switch 16KB bank at 0xC000
136
139
  bank = match address < 0xC000 {
137
- true => 0,
138
- false => bank_num
140
+ true => outer_offset,
141
+ false => outer_offset + bank_num
139
142
  };
140
143
  },
141
144
  _ /*3*/ => {
142
145
  // fix last bank at 0xC000 and switch 16KB bank at 0x8000
143
146
  bank = match address >= 0xC000 {
144
- true => self.program_bank_num as u32 - 1,
145
- false => bank_num
147
+ true => outer_offset + 0x0F,
148
+ false => outer_offset + bank_num
146
149
  };
147
150
  }
148
151
  };
152
+ let max_bank = self.program_bank_num as u32;
153
+ let bank = if max_bank > 0 { bank % max_bank } else { bank };
149
154
  bank * 0x4000 + offset
150
155
  }
151
156
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tmustier/pi-nes",
3
- "version": "0.2.16",
3
+ "version": "0.2.18",
4
4
  "description": "NES emulator extension for pi",
5
5
  "keywords": [
6
6
  "pi-package",