From 920c9f02e6766f9a013d0062ed371886d116bbb1 Mon Sep 17 00:00:00 2001 From: JanNeuendorf <75676159+JanNeuendorf@users.noreply.github.com> Date: Sun, 12 Jan 2025 23:33:24 +0100 Subject: [PATCH] Replaced all arrays with Vec to avoid Stack-Overflow on Window(#14) --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/engine.rs | 23 +++++++++-------------- src/main.rs | 4 ++-- src/utils.rs | 2 +- 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e400682..fdd44bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -548,7 +548,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "svc16" -version = "1.0.0-beta1" +version = "1.0.0-beta2" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index 9658bb1..03d8e69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "svc16" -version = "1.0.0-beta1" +version = "1.0.0-beta2" edition = "2021" authors = ["Jan Neuendorf"] description = "An emulator for a simple virtual computer" diff --git a/src/engine.rs b/src/engine.rs index b1e36a0..5e66134 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -21,9 +21,9 @@ const XOR: u16 = 14; const SYNC: u16 = 15; pub struct Engine { - memory: [u16; MEMSIZE], - screen_buffer: [u16; MEMSIZE], - utility_buffer: [u16; MEMSIZE], + memory: Vec, + screen_buffer: Vec, + utility_buffer: Vec, instruction_pointer: u16, pos_code_dest: u16, key_code_dest: u16, @@ -46,7 +46,7 @@ impl Engine { T: IntoIterator, { let mut iter = state.into_iter(); - let mut memory = [0_u16; MEMSIZE]; + let mut memory = vec![0; MEMSIZE]; for i in 0..MEMSIZE { match iter.next() { Some(val) => { @@ -59,8 +59,8 @@ impl Engine { } Self { memory, - screen_buffer: [0; MEMSIZE], - utility_buffer: [0; MEMSIZE], + screen_buffer: vec![0; MEMSIZE], + utility_buffer: vec![0; MEMSIZE], instruction_pointer: 0, pos_code_dest: 0, key_code_dest: 0, @@ -75,18 +75,13 @@ impl Engine { self.set(self.pos_code_dest, pos_code); self.set(self.key_code_dest, key_code); } - pub fn perform_sync( - &mut self, - pos_code: u16, - key_code: u16, - buffer: &mut [u16; MEMSIZE], - ) -> () { + pub fn perform_sync(&mut self, pos_code: u16, key_code: u16, buffer: &mut Vec) -> () { self.sync_called = false; - *buffer = self.screen_buffer; + *buffer = self.screen_buffer.clone(); self.set_input(pos_code, key_code); if self.expansion_triggered { self.expansion_triggered = false; - self.utility_buffer = [0; MEMSIZE]; + self.utility_buffer = vec![0; MEMSIZE]; } } } diff --git a/src/main.rs b/src/main.rs index 1999a8d..bb41f6b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,7 +34,7 @@ async fn main() -> Result<()> { let mut cli = Cli::parse(); print_keybinds(); - let mut buffer = [Color::from_rgba(255, 255, 255, 255); 256 * 256]; + let mut buffer = vec![Color::from_rgba(255, 255, 255, 255); 256 * 256]; let mut image = Image::gen_image_color(256, 256, Color::from_rgba(0, 0, 0, 255)); let texture = Texture2D::from_image(&image); if cli.linear_filtering { @@ -43,7 +43,7 @@ async fn main() -> Result<()> { texture.set_filter(FilterMode::Nearest); } - let mut raw_buffer = [0 as u16; 256 * 256]; + let mut raw_buffer = vec![0 as u16; 256 * 256]; let mut engine = Engine::new(read_u16s_from_file(&cli.program)?); let mut paused = false; let mut ipf = 0; diff --git a/src/utils.rs b/src/utils.rs index 02ef017..584758b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -40,7 +40,7 @@ fn rgb565_to_argb(rgb565: u16) -> (u8, u8, u8) { (r, g, b) } -pub fn update_image_buffer(imbuff: &mut [Color; RES * RES], screen: &[u16; RES * RES]) { +pub fn update_image_buffer(imbuff: &mut Vec, screen: &Vec) { for i in 0..RES * RES { let col = rgb565_to_argb(screen[i]); imbuff[i] = Color {