mirror of
https://github.com/JanNeuendorf/SVC16.git
synced 2025-06-03 01:50:18 +00:00
Preallocated the u16 pixel buffer and made the -v output more detailed.
This commit is contained in:
parent
3cbeba00ee
commit
a229e6d378
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1346,7 +1346,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||
|
||||
[[package]]
|
||||
name = "svc16"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "svc16"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
edition = "2021"
|
||||
authors = ["Jan Neuendorf"]
|
||||
description = "An emulator for a simple virtual computer"
|
||||
|
@ -1,7 +1,7 @@
|
||||
use std::ops::{BitAnd, BitXor};
|
||||
use thiserror::Error;
|
||||
|
||||
const MEMSIZE: usize = u16::MAX as usize + 1;
|
||||
pub const MEMSIZE: usize = u16::MAX as usize + 1;
|
||||
|
||||
const SET: u16 = 0;
|
||||
const GOTO: u16 = 1;
|
||||
@ -71,10 +71,15 @@ impl Engine {
|
||||
self.pos_code = pos_code;
|
||||
self.key_code = key_code;
|
||||
}
|
||||
pub fn perform_sync(&mut self, pos_code: u16, key_code: u16) -> [u16; MEMSIZE] {
|
||||
pub fn perform_sync(
|
||||
&mut self,
|
||||
pos_code: u16,
|
||||
key_code: u16,
|
||||
buffer: &mut [u16; MEMSIZE],
|
||||
) -> () {
|
||||
self.set_input(pos_code, key_code);
|
||||
self.sync_called = false;
|
||||
return self.screen.clone();
|
||||
*buffer = self.screen;
|
||||
}
|
||||
}
|
||||
impl Engine {
|
||||
|
15
src/main.rs
15
src/main.rs
@ -49,6 +49,8 @@ fn main() -> Result<()> {
|
||||
Pixels::new(RES as u32, RES as u32, surface_texture)?
|
||||
};
|
||||
|
||||
let mut raw_buffer = [0 as u16; engine::MEMSIZE];
|
||||
|
||||
event_loop.run(|event, elwt| {
|
||||
let start_time = Instant::now();
|
||||
if input.update(&event) {
|
||||
@ -65,6 +67,7 @@ fn main() -> Result<()> {
|
||||
}
|
||||
|
||||
let mut ipf = 0;
|
||||
let engine_start = Instant::now();
|
||||
while !engine.wants_to_sync() && ipf <= cli.max_ipf {
|
||||
match engine.step() {
|
||||
Err(_) => {
|
||||
@ -75,13 +78,19 @@ fn main() -> Result<()> {
|
||||
}
|
||||
ipf += 1;
|
||||
}
|
||||
let engine_elapsed = engine_start.elapsed();
|
||||
let (c1, c2) = get_input_code(&input, &pixels);
|
||||
let nb = engine.perform_sync(c1, c2);
|
||||
update_image_buffer(pixels.frame_mut(), &nb);
|
||||
engine.perform_sync(c1, c2, &mut raw_buffer);
|
||||
update_image_buffer(pixels.frame_mut(), &raw_buffer);
|
||||
|
||||
let elapsed = start_time.elapsed();
|
||||
if cli.verbose {
|
||||
println!("Instructions: {} Frametime: {}ms", ipf, elapsed.as_millis());
|
||||
println!(
|
||||
"Instructions: {} Frametime: {}ms (Engine only: {}ms)",
|
||||
ipf,
|
||||
elapsed.as_millis(),
|
||||
engine_elapsed.as_millis()
|
||||
);
|
||||
}
|
||||
if elapsed < FRAMETIME {
|
||||
std::thread::sleep(FRAMETIME - elapsed);
|
||||
|
Loading…
x
Reference in New Issue
Block a user