@tmustier/pi-nes 0.2.15 → 0.2.16
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.
|
Binary file
|
|
@@ -118,7 +118,11 @@ 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
|
|
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
|
+
}
|
|
122
126
|
|
|
123
127
|
match self.control_register.load_bits(2, 2) {
|
|
124
128
|
0 | 1 => {
|
|
@@ -167,23 +171,23 @@ impl Mapper for MMC1Mapper {
|
|
|
167
171
|
self.register_write_count = 0;
|
|
168
172
|
self.latch.clear();
|
|
169
173
|
if (address & 0x6000) == 0 {
|
|
170
|
-
self.control_register.
|
|
171
|
-
}
|
|
172
|
-
} else {
|
|
173
|
-
self.latch.store(((value & 1) << 4) | (self.latch.load() >> 1));
|
|
174
|
-
self.register_write_count += 1;
|
|
175
|
-
|
|
176
|
-
if self.register_write_count >= 5 {
|
|
177
|
-
let val = self.latch.load();
|
|
178
|
-
match address & 0x6000 {
|
|
179
|
-
0x0000 => self.control_register.store(val),
|
|
180
|
-
0x2000 => self.chr_bank0_register.store(val),
|
|
181
|
-
0x4000 => self.chr_bank1_register.store(val),
|
|
182
|
-
_ /*0x6000*/ => self.prg_bank_register.store(val)
|
|
183
|
-
};
|
|
184
|
-
self.register_write_count = 0;
|
|
185
|
-
self.latch.clear();
|
|
174
|
+
self.control_register.store(0x0C);
|
|
186
175
|
}
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
self.latch.store(((value & 1) << 4) | (self.latch.load() >> 1));
|
|
179
|
+
self.register_write_count += 1;
|
|
180
|
+
|
|
181
|
+
if self.register_write_count >= 5 {
|
|
182
|
+
let val = self.latch.load();
|
|
183
|
+
match address & 0x6000 {
|
|
184
|
+
0x0000 => self.control_register.store(val),
|
|
185
|
+
0x2000 => self.chr_bank0_register.store(val),
|
|
186
|
+
0x4000 => self.chr_bank1_register.store(val),
|
|
187
|
+
_ /*0x6000*/ => self.prg_bank_register.store(val)
|
|
188
|
+
};
|
|
189
|
+
self.register_write_count = 0;
|
|
190
|
+
self.latch.clear();
|
|
187
191
|
}
|
|
188
192
|
}
|
|
189
193
|
|