Skip to content

Commit 1ca31c1

Browse files
committed
add SPS tests
1 parent 178875d commit 1ca31c1

File tree

2 files changed

+52
-19
lines changed

2 files changed

+52
-19
lines changed

tests/src/main.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,23 @@ mod labels;
22
mod pushdown;
33
mod util;
44
mod block;
5+
mod sps;
56

67
use gumdrop::Options;
78

9+
fn parse_hex(s: &str) -> Result<u32, std::num::ParseIntError> {
10+
u32::from_str_radix(s, 16)
11+
}
12+
813
#[derive(Debug, Options)]
914
struct TestOptions {
1015
help: bool,
1116
#[options(help = "run tests")]
1217
test: bool,
18+
#[options(help = "set SPS seed", parse(try_from_str = "parse_hex"))]
19+
sps_seed: u32,
20+
#[options(help = "print SPS pieces")]
21+
sps_qty: u32,
1322
}
1423

1524
fn main() {
@@ -20,26 +29,19 @@ fn main() {
2029
println!("pushdown works!");
2130
}
2231

23-
let mut emu = util::emulator(None);
24-
25-
let seed_0 = 0x88;
26-
let seed_1 = 0x88;
27-
let seed_2 = 0x88;
28-
29-
emu.memory.iram_raw[(labels::get("set_seed_input") + 0) as usize] = seed_0;
30-
emu.memory.iram_raw[(labels::get("set_seed") + 0) as usize] = seed_0;
31-
emu.memory.iram_raw[(labels::get("set_seed_input") + 1) as usize] = seed_1;
32-
emu.memory.iram_raw[(labels::get("set_seed") + 1) as usize] = seed_1;
33-
emu.memory.iram_raw[(labels::get("set_seed_input") + 2) as usize] = seed_2;
34-
emu.memory.iram_raw[(labels::get("set_seed") + 2) as usize] = seed_2;
32+
if options.sps_qty > 0 {
33+
let mut blocks = sps::SPS::new();
3534

35+
blocks.set_input((
36+
((options.sps_seed >> 16) & 0xFF) as u8,
37+
((options.sps_seed >> 8) & 0xFF) as u8,
38+
(options.sps_seed& 0xFF) as u8,
39+
));
3640

37-
for i in 0..12 {
38-
emu.registers.pc = labels::get("pickTetriminoSeed");
39-
util::run_to_return(&mut emu, false);
40-
41-
let block: block::Block = emu.memory.iram_raw[labels::get("spawnID") as usize].into();
42-
43-
println!("{:#?}", block);
41+
for i in 0..options.sps_qty {
42+
print!("{:?}", blocks.next());
43+
}
4444
}
45+
46+
// TODO: cycle counts for modes
4547
}

tests/src/sps.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use rusticnes_core::nes::NesState;
2+
use crate::{labels, util, block};
3+
4+
pub struct SPS {
5+
emu: NesState,
6+
}
7+
8+
impl SPS {
9+
pub fn new() -> Self {
10+
Self {
11+
emu: util::emulator(None),
12+
}
13+
}
14+
15+
pub fn set_input(&mut self, seed: (u8, u8, u8)) {
16+
self.emu.memory.iram_raw[(labels::get("set_seed_input") + 0) as usize] = seed.0;
17+
self.emu.memory.iram_raw[(labels::get("set_seed") + 0) as usize] = seed.0;
18+
self.emu.memory.iram_raw[(labels::get("set_seed_input") + 1) as usize] = seed.1;
19+
self.emu.memory.iram_raw[(labels::get("set_seed") + 1) as usize] = seed.1;
20+
self.emu.memory.iram_raw[(labels::get("set_seed_input") + 2) as usize] = seed.2;
21+
self.emu.memory.iram_raw[(labels::get("set_seed") + 2) as usize] = seed.2;
22+
}
23+
24+
pub fn next(&mut self) -> block::Block {
25+
self.emu.registers.pc = labels::get("pickTetriminoSeed");
26+
27+
util::run_to_return(&mut self.emu, false);
28+
29+
self.emu.memory.iram_raw[labels::get("spawnID") as usize].into()
30+
}
31+
}

0 commit comments

Comments
 (0)