|
| 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