use std::{fs, io};
use minifb::{Window, WindowOptions};
use implementation::*;
fn main() {
let mut filename = String::new();
print!("Enter filename of the program to load into memory");
io::stdin().read_line(&mut filename).unwrap();
let program = fs::read_to_string(filename).unwrap();
let mut i = 0;
let mut memory = [0u16;0xFFFFF];
for line in program.lines() {
let mut byte = 0u16;
let mut count = 0;
for digit in line.chars() {
count += 1;
match digit {
'0' => {
byte = byte << 1;
count += 1;
}
'1' => {
byte = (byte << 1) | 1;
count += 1;
}
_ => ()
}
if count > 10 {panic!("10 bits only :)")};
}
memory[i] = byte;
i += 1;
}
let mut processor = Processor {
stack_a: Vec::new(),
stack_b: Vec::new(),
memory,
carry: false,
pc: 0
};
let mut window = Window::new("STT Display", 128, 128, WindowOptions::default()).unwrap();
while window.is_open() && processor.run() {
if processor.memory[(2<<20)-(2<<14)-1] != 0 {
processor.memory[(2<<20)-(2<<14)-1] = 0;
window.update_with_buffer(&mem_to_buf(&processor.memory), 128, 128).unwrap();
}
}
}