@tmustier/pi-nes 0.2.13 → 0.2.14
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.
- package/extensions/nes/native/nes-core/index.node +0 -0
- package/extensions/nes/native/nes-core/vendor/nes_rust/src/mapper.rs +2 -2
- package/extensions/nes/native/nes-core/vendor/nes_rust/src/ppu.rs +7 -3
- package/extensions/nes/native/nes-core/vendor/nes_rust/src/rom.rs +9 -3
- package/package.json +1 -1
|
Binary file
|
|
@@ -118,14 +118,14 @@ 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_num = self.prg_bank_register.load() as u32 &
|
|
121
|
+
let bank_num = self.prg_bank_register.load() as u32 & 0x1F;
|
|
122
122
|
|
|
123
123
|
match self.control_register.load_bits(2, 2) {
|
|
124
124
|
0 | 1 => {
|
|
125
125
|
// switch 32KB at 0x8000, ignoring low bit of bank number
|
|
126
126
|
// TODO: Fix me
|
|
127
127
|
offset = offset | (address & 0x4000);
|
|
128
|
-
bank = bank_num &
|
|
128
|
+
bank = bank_num & 0x1E;
|
|
129
129
|
},
|
|
130
130
|
2 => {
|
|
131
131
|
// fix first bank at 0x8000 and switch 16KB bank at 0xC000
|
|
@@ -1365,14 +1365,18 @@ impl Sprite {
|
|
|
1365
1365
|
}
|
|
1366
1366
|
|
|
1367
1367
|
fn on(&self, y: u8, height: u8) -> bool {
|
|
1368
|
-
|
|
1368
|
+
let sprite_y = self.get_y() as u16 + 1;
|
|
1369
|
+
let y = y as u16;
|
|
1370
|
+
y >= sprite_y && y < sprite_y + height as u16
|
|
1369
1371
|
}
|
|
1370
1372
|
|
|
1371
1373
|
fn get_y_in_sprite(&self, y: u8, height: u8) -> u8 {
|
|
1372
1374
|
// Assumes self.on(y, height) is true
|
|
1375
|
+
let sprite_y = self.get_y() as u16 + 1;
|
|
1376
|
+
let delta = (y as u16 - sprite_y) as u8;
|
|
1373
1377
|
match self.vertical_flip() {
|
|
1374
|
-
true => height - 1 -
|
|
1375
|
-
false =>
|
|
1378
|
+
true => height - 1 - delta,
|
|
1379
|
+
false => delta
|
|
1376
1380
|
}
|
|
1377
1381
|
}
|
|
1378
1382
|
}
|
|
@@ -20,9 +20,15 @@ impl Rom {
|
|
|
20
20
|
pub fn new(data: Vec<u8>) -> Self {
|
|
21
21
|
let header = RomHeader::new(data[0..HEADER_SIZE].to_vec());
|
|
22
22
|
let mapper = MapperFactory::create(&header);
|
|
23
|
+
let data_start = HEADER_SIZE + if header.has_trainer() { 512 } else { 0 };
|
|
24
|
+
let rom_data = if data.len() > data_start {
|
|
25
|
+
data[data_start..].to_vec()
|
|
26
|
+
} else {
|
|
27
|
+
Vec::new()
|
|
28
|
+
};
|
|
23
29
|
Rom {
|
|
24
30
|
header: header,
|
|
25
|
-
memory: Memory::new(
|
|
31
|
+
memory: Memory::new(rom_data),
|
|
26
32
|
mapper: mapper
|
|
27
33
|
}
|
|
28
34
|
}
|
|
@@ -180,8 +186,8 @@ impl RomHeader {
|
|
|
180
186
|
self.extract_bits(self.control_byte1(), 1, 1) == 1
|
|
181
187
|
}
|
|
182
188
|
|
|
183
|
-
fn
|
|
184
|
-
self.extract_bits(self.control_byte1(), 2, 1)
|
|
189
|
+
pub fn has_trainer(&self) -> bool {
|
|
190
|
+
self.extract_bits(self.control_byte1(), 2, 1) == 1
|
|
185
191
|
}
|
|
186
192
|
|
|
187
193
|
fn four_screen_mirroring(&self) -> bool {
|