Skip to content

Commit 9a46333

Browse files
committed
initial mapper test
1 parent ccb8475 commit 9a46333

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

tests/src/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ mod video;
99
mod drought;
1010
mod floor;
1111
mod garbage;
12+
mod mapper;
1213
mod pushdown;
1314
mod rng;
1415
mod score;
@@ -47,6 +48,8 @@ fn main() {
4748
if options.test {
4849
// garbage::test_garbage4_crash();
4950
// println!(">> garbage4 ✅");
51+
mapper::test();
52+
println!(">> mappers ✅");
5053
floor::test();
5154
println!(">> floor ✅");
5255
tspins::test();

tests/src/mapper.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use crate::util;
2+
use rusticnes_core::nes::NesState;
3+
4+
pub fn get_expected_tilesets() -> (Vec<u8>, Vec<u8>) {
5+
6+
// tilesets as ordered in the game
7+
let title_menu_tileset = include_bytes!("../../src/chr/title_menu_tileset.chr");
8+
let game_tileset = include_bytes!("../../src/chr/game_tileset.chr");
9+
let rocket_tileset = include_bytes!("../../src/chr/rocket_tileset.chr");
10+
let empty_tileset: Vec<u8> = vec![0; 0x1000];
11+
12+
// cnrom limited to reading 8k banks, so pair tilesets accordingly
13+
let mut tileset1: Vec<u8> = vec![0; 0x2000];
14+
tileset1[..0x1000].copy_from_slice(title_menu_tileset);
15+
tileset1[0x1000..].copy_from_slice(game_tileset);
16+
17+
let mut tileset2: Vec<u8> = vec![0; 0x2000];
18+
tileset2[..0x1000].copy_from_slice(rocket_tileset);
19+
tileset2[0x1000..].copy_from_slice(&empty_tileset);
20+
21+
(tileset1, tileset2)
22+
}
23+
24+
25+
pub fn get_current_tilesets(emu: &mut NesState) -> Vec<u8>{
26+
let mut current_tileset = vec![0; 0x2000];
27+
for i in 0..0x2000 {
28+
current_tileset[i] = emu.ppu.read_byte(&mut *emu.mapper, i as u16)
29+
}
30+
current_tileset
31+
}
32+
33+
pub fn get_tile_select(emu: &mut NesState) -> u8 {
34+
let bg_select = emu.ppu.control & 0x10 >> 4;
35+
let sprite_select = emu.ppu.control & 0x08 >> 3;
36+
37+
// validate here that background and sprite tile selects match
38+
assert_eq!(bg_select, sprite_select);
39+
40+
bg_select
41+
}
42+
43+
pub fn test() {
44+
let mut emu = util::emulator(None);
45+
46+
let (tileset1, tileset2) = get_expected_tilesets();
47+
48+
for _ in 0..4 {
49+
emu.run_until_vblank();
50+
}
51+
52+
// test menu tileset is active
53+
let tile_select = get_tile_select(&mut emu);
54+
let current_tileset = get_current_tilesets(&mut emu);
55+
assert_eq!(tile_select, 0);
56+
assert_eq!(current_tileset, tileset1);
57+
}

0 commit comments

Comments
 (0)