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;
|
|
|
|
use dekejit::loader::unloader::*;
|
|
|
|
|
2023-05-02 14:13:49 +02:00
|
|
|
|
2022-12-29 01:15:59 +01:00
|
|
|
fn main() {
|
2023-04-28 12:18:07 +02:00
|
|
|
|
|
|
|
|
2023-05-02 14:13:49 +02:00
|
|
|
let code = std::fs::read_to_string("./tests/assembly/hello_world.grasm").unwrap();
|
2023-04-28 12:18:07 +02:00
|
|
|
|
2023-05-02 14:13:49 +02:00
|
|
|
let mut parser = parser::Parser::new(code);
|
2023-04-28 12:18:07 +02:00
|
|
|
|
2023-05-02 14:13:49 +02:00
|
|
|
let r = parser.parse_sections().unwrap();
|
|
|
|
|
|
|
|
println!("Parsed sections: {:?}", r);
|
2023-04-28 12:18:07 +02:00
|
|
|
|
2023-05-02 14:13:49 +02:00
|
|
|
let code = to_binary(r).unwrap();
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
//
|
2023-04-28 12:18:07 +02:00
|
|
|
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
|
|
|
}
|