@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.
@@ -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 & 0x0F;
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 & 0x0E;
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
- (y >= self.get_y()) && (y < self.get_y() + height)
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 - (y - self.get_y()),
1375
- false => y - self.get_y()
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(data[HEADER_SIZE..].to_vec()),
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 _trainer_512_bytes(&self) -> u8 {
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 {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tmustier/pi-nes",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "description": "NES emulator extension for pi",
5
5
  "keywords": [
6
6
  "pi-package",