Replaced all arrays with Vec to avoid Stack-Overflow on Window(#14)

This commit is contained in:
JanNeuendorf 2025-01-12 23:33:24 +01:00 committed by GitHub
parent 32d83e93d2
commit 920c9f02e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 14 additions and 19 deletions

2
Cargo.lock generated
View File

@ -548,7 +548,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "svc16"
version = "1.0.0-beta1"
version = "1.0.0-beta2"
dependencies = [
"anyhow",
"clap",

View File

@ -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"

View File

@ -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<u16>,
screen_buffer: Vec<u16>,
utility_buffer: Vec<u16>,
instruction_pointer: u16,
pos_code_dest: u16,
key_code_dest: u16,
@ -46,7 +46,7 @@ impl Engine {
T: IntoIterator<Item = u16>,
{
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<u16>) -> () {
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];
}
}
}

View File

@ -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;

View File

@ -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<Color>, screen: &Vec<u16>) {
for i in 0..RES * RES {
let col = rgb565_to_argb(screen[i]);
imbuff[i] = Color {