~maddie/STT-implementation

ref: 907f5140b04af9e5061120b6c7f701fdc6ccb088 STT-implementation/src/main.rs -rw-r--r-- 1.9 KiB
907f5140 — kn0000 Added keyboard input checking, yet to be tested though, but nothing that was working is broken. 4 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use std::{fs, io};
use minifb::{Window, WindowOptions};
use implementation::*;

fn main() {
    let mut filename = String::new();
    println!("Enter filename of the program to load into memory");
    io::stdin().read_line(&mut filename).unwrap();
    let program = fs::read_to_string(filename.trim()).unwrap();

    let mut i = 0;
    let mut memory = [0u16;MEMORY_SIZE];
    for line in program.lines() {
        let mut byte = 0u16;
        let mut count = 0;
        for digit in line.chars() {
            match digit {
                '0' => {
                    byte = byte << 1;
                    count += 1;
                }
                '1' => {
                    byte = (byte << 1) | 1;
                    count += 1;
                }
                _ => ()
            }
            if count > 10 {panic!("10 bits only :)\nFailed at line {i}")};
        }
        memory[i] = byte;
        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);
}