re-arrange modules, add "plug-in" system so instructions can be defined in multiple crates
This commit is contained in:
@@ -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"
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user