mirror of
https://github.com/JanNeuendorf/SVC16.git
synced 2025-06-06 03:25:28 +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]]
|
[[package]]
|
||||||
name = "svc16"
|
name = "svc16"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "svc16"
|
name = "svc16"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Jan Neuendorf"]
|
authors = ["Jan Neuendorf"]
|
||||||
description = "An emulator for a simple virtual computer"
|
description = "An emulator for a simple virtual computer"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::ops::{BitAnd, BitXor};
|
use std::ops::{BitAnd, BitXor};
|
||||||
use thiserror::Error;
|
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 SET: u16 = 0;
|
||||||
const GOTO: u16 = 1;
|
const GOTO: u16 = 1;
|
||||||
@ -71,10 +71,15 @@ impl Engine {
|
|||||||
self.pos_code = pos_code;
|
self.pos_code = pos_code;
|
||||||
self.key_code = key_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.set_input(pos_code, key_code);
|
||||||
self.sync_called = false;
|
self.sync_called = false;
|
||||||
return self.screen.clone();
|
*buffer = self.screen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl Engine {
|
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)?
|
Pixels::new(RES as u32, RES as u32, surface_texture)?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut raw_buffer = [0 as u16; engine::MEMSIZE];
|
||||||
|
|
||||||
event_loop.run(|event, elwt| {
|
event_loop.run(|event, elwt| {
|
||||||
let start_time = Instant::now();
|
let start_time = Instant::now();
|
||||||
if input.update(&event) {
|
if input.update(&event) {
|
||||||
@ -65,6 +67,7 @@ fn main() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut ipf = 0;
|
let mut ipf = 0;
|
||||||
|
let engine_start = Instant::now();
|
||||||
while !engine.wants_to_sync() && ipf <= cli.max_ipf {
|
while !engine.wants_to_sync() && ipf <= cli.max_ipf {
|
||||||
match engine.step() {
|
match engine.step() {
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
@ -75,13 +78,19 @@ fn main() -> Result<()> {
|
|||||||
}
|
}
|
||||||
ipf += 1;
|
ipf += 1;
|
||||||
}
|
}
|
||||||
|
let engine_elapsed = engine_start.elapsed();
|
||||||
let (c1, c2) = get_input_code(&input, &pixels);
|
let (c1, c2) = get_input_code(&input, &pixels);
|
||||||
let nb = engine.perform_sync(c1, c2);
|
engine.perform_sync(c1, c2, &mut raw_buffer);
|
||||||
update_image_buffer(pixels.frame_mut(), &nb);
|
update_image_buffer(pixels.frame_mut(), &raw_buffer);
|
||||||
|
|
||||||
let elapsed = start_time.elapsed();
|
let elapsed = start_time.elapsed();
|
||||||
if cli.verbose {
|
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 {
|
if elapsed < FRAMETIME {
|
||||||
std::thread::sleep(FRAMETIME - elapsed);
|
std::thread::sleep(FRAMETIME - elapsed);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user