mirror of
https://github.com/JanNeuendorf/SVC16.git
synced 2025-06-04 18:45:27 +00:00
Replaced all arrays with Vec to avoid Stack-Overflow on Window(#14)
This commit is contained in:
parent
32d83e93d2
commit
920c9f02e6
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -548,7 +548,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "svc16"
|
name = "svc16"
|
||||||
version = "1.0.0-beta1"
|
version = "1.0.0-beta2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "svc16"
|
name = "svc16"
|
||||||
version = "1.0.0-beta1"
|
version = "1.0.0-beta2"
|
||||||
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"
|
||||||
|
@ -21,9 +21,9 @@ const XOR: u16 = 14;
|
|||||||
const SYNC: u16 = 15;
|
const SYNC: u16 = 15;
|
||||||
|
|
||||||
pub struct Engine {
|
pub struct Engine {
|
||||||
memory: [u16; MEMSIZE],
|
memory: Vec<u16>,
|
||||||
screen_buffer: [u16; MEMSIZE],
|
screen_buffer: Vec<u16>,
|
||||||
utility_buffer: [u16; MEMSIZE],
|
utility_buffer: Vec<u16>,
|
||||||
instruction_pointer: u16,
|
instruction_pointer: u16,
|
||||||
pos_code_dest: u16,
|
pos_code_dest: u16,
|
||||||
key_code_dest: u16,
|
key_code_dest: u16,
|
||||||
@ -46,7 +46,7 @@ impl Engine {
|
|||||||
T: IntoIterator<Item = u16>,
|
T: IntoIterator<Item = u16>,
|
||||||
{
|
{
|
||||||
let mut iter = state.into_iter();
|
let mut iter = state.into_iter();
|
||||||
let mut memory = [0_u16; MEMSIZE];
|
let mut memory = vec![0; MEMSIZE];
|
||||||
for i in 0..MEMSIZE {
|
for i in 0..MEMSIZE {
|
||||||
match iter.next() {
|
match iter.next() {
|
||||||
Some(val) => {
|
Some(val) => {
|
||||||
@ -59,8 +59,8 @@ impl Engine {
|
|||||||
}
|
}
|
||||||
Self {
|
Self {
|
||||||
memory,
|
memory,
|
||||||
screen_buffer: [0; MEMSIZE],
|
screen_buffer: vec![0; MEMSIZE],
|
||||||
utility_buffer: [0; MEMSIZE],
|
utility_buffer: vec![0; MEMSIZE],
|
||||||
instruction_pointer: 0,
|
instruction_pointer: 0,
|
||||||
pos_code_dest: 0,
|
pos_code_dest: 0,
|
||||||
key_code_dest: 0,
|
key_code_dest: 0,
|
||||||
@ -75,18 +75,13 @@ impl Engine {
|
|||||||
self.set(self.pos_code_dest, pos_code);
|
self.set(self.pos_code_dest, pos_code);
|
||||||
self.set(self.key_code_dest, key_code);
|
self.set(self.key_code_dest, key_code);
|
||||||
}
|
}
|
||||||
pub fn perform_sync(
|
pub fn perform_sync(&mut self, pos_code: u16, key_code: u16, buffer: &mut Vec<u16>) -> () {
|
||||||
&mut self,
|
|
||||||
pos_code: u16,
|
|
||||||
key_code: u16,
|
|
||||||
buffer: &mut [u16; MEMSIZE],
|
|
||||||
) -> () {
|
|
||||||
self.sync_called = false;
|
self.sync_called = false;
|
||||||
*buffer = self.screen_buffer;
|
*buffer = self.screen_buffer.clone();
|
||||||
self.set_input(pos_code, key_code);
|
self.set_input(pos_code, key_code);
|
||||||
if self.expansion_triggered {
|
if self.expansion_triggered {
|
||||||
self.expansion_triggered = false;
|
self.expansion_triggered = false;
|
||||||
self.utility_buffer = [0; MEMSIZE];
|
self.utility_buffer = vec![0; MEMSIZE];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ async fn main() -> Result<()> {
|
|||||||
let mut cli = Cli::parse();
|
let mut cli = Cli::parse();
|
||||||
print_keybinds();
|
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 mut image = Image::gen_image_color(256, 256, Color::from_rgba(0, 0, 0, 255));
|
||||||
let texture = Texture2D::from_image(&image);
|
let texture = Texture2D::from_image(&image);
|
||||||
if cli.linear_filtering {
|
if cli.linear_filtering {
|
||||||
@ -43,7 +43,7 @@ async fn main() -> Result<()> {
|
|||||||
texture.set_filter(FilterMode::Nearest);
|
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 engine = Engine::new(read_u16s_from_file(&cli.program)?);
|
||||||
let mut paused = false;
|
let mut paused = false;
|
||||||
let mut ipf = 0;
|
let mut ipf = 0;
|
||||||
|
@ -40,7 +40,7 @@ fn rgb565_to_argb(rgb565: u16) -> (u8, u8, u8) {
|
|||||||
(r, g, b)
|
(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 {
|
for i in 0..RES * RES {
|
||||||
let col = rgb565_to_argb(screen[i]);
|
let col = rgb565_to_argb(screen[i]);
|
||||||
imbuff[i] = Color {
|
imbuff[i] = Color {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user