Dekejit/src/main.rs

64 lines
1.4 KiB
Rust
Raw Normal View History

use std::env::args;
2023-05-02 14:13:49 +02:00
use dekejit::assembler::parser;
use dekejit::assembler::to_binary;
2023-04-28 12:18:07 +02:00
use dekejit::cpu::IOBuffer;
use dekejit::cpu::CPU;
2023-05-02 14:13:49 +02:00
// use simple_logger::SimpleLogger;
2022-12-29 01:15:59 +01:00
fn main() {
simple_logger::init_with_level(log::Level::Warn).unwrap();
2023-05-02 16:26:54 +02:00
let args: Vec<String> = args().collect();
2023-04-28 12:18:07 +02:00
2023-05-02 16:26:54 +02:00
if args.len() < 2 {
println!("Scialla");
return;
}
2023-05-02 16:26:54 +02:00
// let code = std::fs::read_to_string("./tests/assembly/hello_world.grasm").unwrap();
let code = match std::fs::read_to_string(&args[1]) {
Ok(p) => p,
Err(_) => {
println!("Could not open file '{}'", &args[1]);
return;
}
2023-05-02 16:26:54 +02:00
};
2023-04-28 12:18:07 +02:00
2023-05-02 16:26:54 +02:00
let mut parser = parser::Parser::new(code);
2023-04-28 12:18:07 +02:00
2023-05-02 16:26:54 +02:00
let r = parser.parse_sections().unwrap();
2023-05-02 14:13:49 +02:00
// println!("Parsed sections: {:?}", r);
2023-04-28 12:18:07 +02:00
2023-05-02 16:26:54 +02:00
let code = to_binary(r).unwrap();
2023-05-02 14:13:49 +02:00
// let mut k = make_string("Hello world!");
//
// let mut code: Vec<u16> = vec![
// 0b0111000100000011, // addi ra 3
// 0b1110000100000011, // ecall ra 3
// 0b1111000000000000, // HALT.
// ];
//
// code.append(&mut k);
//
let mut env = IOBuffer::default();
//
let mut cpu = CPU::new(&mut env);
//
// for c in &code[..] {
// // println!("{:#018b}", c);
// }
2023-05-02 14:13:49 +02:00
//
2023-04-28 12:18:07 +02:00
match cpu.run_code_raw(&code) {
Ok(_) => {
println!("Result: {}", env.output)
}
Err(e) => println!("Err: {:?}", e),
};
2022-12-29 01:15:59 +01:00
}