Skip to content

Commit 723b8e5

Browse files
committed
check floor 0 works
1 parent 1cc3d88 commit 723b8e5

File tree

3 files changed

+106
-3
lines changed

3 files changed

+106
-3
lines changed

tests/src/floor.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use crate::{util, labels, playfield};
2+
3+
pub fn test() {
4+
// check floor 0 doesnt burn lines
5+
6+
let mut emu = util::emulator(None);
7+
8+
for _ in 0..3 {
9+
emu.run_until_vblank();
10+
}
11+
12+
let practise_type = labels::get("practiseType") as usize;
13+
let game_mode = labels::get("gameMode") as usize;
14+
let main_loop = labels::get("mainLoop");
15+
let level_number = labels::get("levelNumber") as usize;
16+
17+
// load floor 0
18+
19+
emu.memory.iram_raw[practise_type] = labels::get("MODE_FLOOR") as _;
20+
emu.memory.iram_raw[level_number] = 18;
21+
emu.memory.iram_raw[game_mode] = 4;
22+
23+
emu.registers.pc = main_loop;
24+
25+
for _ in 0..5 {
26+
emu.run_until_vblank();
27+
}
28+
29+
// setup a tetris
30+
31+
emu.memory.iram_raw[labels::get("currentPiece") as usize] = 0x11;
32+
emu.memory.iram_raw[labels::get("tetriminoX") as usize] = 0x5;
33+
emu.memory.iram_raw[labels::get("tetriminoY") as usize] = 0x11;
34+
emu.memory.iram_raw[labels::get("autorepeatY") as usize] = 0;
35+
36+
playfield::set_str(&mut emu,r##"
37+
##### ####
38+
##### ####
39+
##### ####
40+
##### ####"##);
41+
42+
emu.memory.iram_raw[labels::get("vramRow") as usize] = 0;
43+
44+
for _ in 0..20 {
45+
emu.run_until_vblank();
46+
}
47+
48+
assert_ne!(playfield::get(&mut emu, 0, 19), 0xEF);
49+
}

tests/src/main.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
mod block;
22
mod cycle_count;
3-
mod drought;
43
mod input;
54
mod labels;
5+
mod playfield;
6+
mod util;
7+
mod video;
8+
9+
mod drought;
10+
mod floor;
611
mod pushdown;
712
mod rng;
813
mod score;
914
mod sps;
10-
mod util;
11-
mod video;
1215

1316
use gumdrop::Options;
1417

@@ -39,6 +42,8 @@ fn main() {
3942

4043
// run tests
4144
if options.test {
45+
floor::test();
46+
println!("floor 0 works!");
4247
score::test();
4348
println!("score works!");
4449
score::test_render();

tests/src/playfield.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use rusticnes_core::nes::NesState;
2+
use crate::{labels};
3+
4+
pub fn set(emu: &mut NesState, x: u16, y: u16, value: u8) {
5+
let index = ((y * 10) + x) + labels::get("playfield");
6+
emu.memory.iram_raw[index as usize] = value;
7+
}
8+
9+
pub fn get(emu: &mut NesState, x: u16, y: u16) -> u8 {
10+
let index = ((y * 10) + x) + labels::get("playfield");
11+
emu.memory.iram_raw[index as usize]
12+
}
13+
14+
#[allow(dead_code)]
15+
pub fn clear(emu: &mut NesState) {
16+
for line in 0..20 {
17+
self::fill_line(emu, line);
18+
}
19+
}
20+
21+
#[allow(dead_code)]
22+
pub fn fill_line(emu: &mut NesState, y: u16) {
23+
for x in 0..10 {
24+
self::set(emu, x, y, labels::get("BLOCK_TILES") as _);
25+
}
26+
}
27+
28+
pub fn set_str(emu: &mut NesState, playfield: &str) {
29+
let rows = playfield.trim_start_matches('\n').split("\n").collect::<Vec<_>>();
30+
let offset = 20 - rows.len() as u16;
31+
rows.iter().enumerate().for_each(|(y, line)| {
32+
line.chars().enumerate().for_each(|(x, ch)| {
33+
self::set(emu, x as _, offset + y as u16, if ch == '#' { 0x7b } else { 0xef });
34+
});
35+
});
36+
}
37+
38+
#[allow(dead_code)]
39+
pub fn get_str(emu: &mut NesState) -> String {
40+
let mut s = String::new();
41+
for y in 0..20 {
42+
for x in 0..10 {
43+
s.push_str(if self::get(emu, x, y) == 0xEF { " " } else { "#" });
44+
}
45+
s.push_str("\n");
46+
}
47+
48+
s
49+
}

0 commit comments

Comments
 (0)