use std::{fs, env}; use minifb::{Window, WindowOptions}; use implementation::*; fn main() { let argument: String = env::args().collect::>()[1].clone(); if argument == "-h" || argument == "--help" { println!("Takes the path of a binary file and runs it in the STT vm thing"); return } let program = fs::read(argument).expect("Unable to read file"); let mut i = 0; let mut memory = [0u16;MEMORY_SIZE]; while program.get(2*i) != None { memory[i] = merge(program[2*i], *program.get(2*i + 1).expect("Bad parity")); i += 1; } let mut processor = Processor { stack_a: new_stack(), stack_b: new_stack(), memory, carry: false, pc: 0 }; let mut window = Window::new("STT Display", SCREEN_WIDTH, SCREEN_HEIGHT, WindowOptions::default()).unwrap(); window.update_with_buffer(&[0;(1<<14)],128,128).unwrap(); while window.is_open() && processor.run() { if processor.memory[SCREEN_UPDATE_ADDRESS] != 0 { processor.memory[SCREEN_UPDATE_ADDRESS] = 0; window.update_with_buffer(&mem_to_buf(&processor.memory), SCREEN_WIDTH, SCREEN_HEIGHT).unwrap(); } if processor.memory[KEYBOARD_INTERFACE_ADDRESS] != 0 { //update keyboard state processor.memory[KEYBOARD_INTERFACE_ADDRESS] = 0; for (i, value) in keys_to_state(window.get_keys()).iter().enumerate() { processor.memory[KEYBOARD_INTERFACE_ADDRESS+i+1] = *value; } } } println!("Stack A: {0:?}\nStack B: {1:?}", processor.stack_a, processor.stack_b); }