re-arrange modules, add "plug-in" system so instructions can be defined in multiple crates

This commit is contained in:
2020-09-26 00:29:33 +02:00
parent 547beed847
commit f015104b95
45 changed files with 984 additions and 843 deletions
+16
View File
@@ -0,0 +1,16 @@
[package]
name = "launcher"
version = "0.1.0"
authors = ["Ondřej Hruška <ondra@ondrovo.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
crsn = { path = "../crsn" }
crsn_arith = { path = "../crsn_arith" }
simple_logger = "1.9.0"
log = "0.4.11"
thiserror = "1.0.20"
anyhow = "1.0.32"
+80
View File
@@ -0,0 +1,80 @@
#[macro_use]
extern crate log;
use simple_logger::SimpleLogger;
use crsn::asm::data::literal::Addr;
use crsn::runtime::program::Program;
use crsn::runtime::run_thread::{RunThread, ThreadToken};
use crsn_arith::ArithOpParser;
fn main() {
SimpleLogger::new().init().unwrap();
// ;(dec r0 (z? (ret)))
/*let program = "
(
(main
(ld r0 2)
(:again)
(dec r0)
(jif nz :again)
(fault \"that's it\")
)
)
";*/
/*
let program = "
(
(main
(ld r0 2)
(call add2x r0 15)
(ld r0 res0)
(fault \"that's it\")
)
(add2x
(ld r0 arg0)
(ld r1 arg1)
(add r0 r1)
(add r0 r1)
(ret r0)
)
)
";*/
let program = "
(
(main
(ld _ arg0)
(call fibo 5)
(ld r0 res0)
)
(fibo
(cmp arg0 2
(eq? (ret 2)))
(ld r0 arg0)
(dec r0)
(call fibo r0)
(ld r0 arg0)
(mul r0 res0)
(ret r0)
)
)
";
let parsers = vec![
ArithOpParser::new()
];
let parsed = crsn::asm::assemble(program, parsers.as_slice()).unwrap();
debug!("---");
for op in &parsed {
debug!("{:?}", op);
}
debug!("---");
let thread = RunThread::new(ThreadToken(0), Program::new(parsed), Addr(0), &[]);
thread.start().join().unwrap();
}