~maddie/STT-implementation

907f5140b04af9e5061120b6c7f701fdc6ccb088 — kn0000 4 months ago 0498f90
Added keyboard input checking, yet to be tested though, but nothing that was working is broken.
2 files changed, 10 insertions(+), 6 deletions(-)

M src/lib.rs
M src/main.rs
M src/lib.rs => src/lib.rs +2 -0
@@ 3,6 3,7 @@ pub const MEMORY_SIZE: usize = 1<<20;
pub const SCREEN_WIDTH: usize = 512;
pub const SCREEN_HEIGHT: usize = 512;
pub const SCREEN_UPDATE_ADDRESS: usize = 0x7FFFF;
pub const KEYBOARD_INTERFACE_ADDRESS: usize = 480<<10;

use minifb::Key;



@@ 155,3 156,4 @@ pub fn keys_to_state(keys: Vec<Key>) -> Vec<u16> { //output is using only 10 bit
    output
}



M src/main.rs => src/main.rs +8 -6
@@ 1,5 1,5 @@
use std::{fs, io};
use minifb::{Window, WindowOptions, Key};
use minifb::{Window, WindowOptions};
use implementation::*;

fn main() {


@@ 41,17 41,19 @@ fn main() {
    
    let mut window = Window::new("STT Display", SCREEN_WIDTH, SCREEN_HEIGHT, WindowOptions::default()).unwrap();
    window.update_with_buffer(&[0;(1<<14)],128,128).unwrap();
    let mut instructions_run = 0;
    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();
        }
        instructions_run += 1;
        if instructions_run%1000 == 0 {
            println!("Program running");
        
        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);
}