16 releases (8 breaking)
0.9.1 | Oct 17, 2024 |
---|---|
0.8.1 | Oct 16, 2024 |
0.5.0 | Jun 29, 2024 |
#45 in Simulation
639 downloads per month
325KB
5.5K
SLoC
Ensemble 🎷⚙️ (LC-3 parser, assembler, and simulator)
Ensemble is a parser, assembler, and simulator library for the LC-3 ISA, written in Rust.
This project, while mostly for general use, is mainly used for the lc3-ensemble-test and LC3Tools projects.
Refer to the documentation for additional support.
lib.rs
:
A LC-3 parser, assembler, and simulator.
This is meant to be a general suite to use LC-3 assembly (meant as a backend for Georgia Tech's CS 2110 LC3Tools).
Usage
To convert LC-3 source code to an object file, it must be parsed and assembled:
use lc3_ensemble::parse::parse_ast;
use lc3_ensemble::asm::{assemble, assemble_debug, ObjectFile};
let code = "
.orig x3000
AND R0, R0, #0
AND R0, R0, #7
HALT
.end
";
let ast = parse_ast(code).unwrap();
// Assemble AST into object file:
let obj_file: ObjectFile = assemble(ast).unwrap();
// OR:
let obj_file: ObjectFile = assemble_debug(ast, code).unwrap();
Once an object file has been created, it can be executed with the simulator:
use lc3_ensemble::sim::Simulator;
let mut simulator = Simulator::new(Default::default());
simulator.load_obj_file(&obj_file);
simulator.run().unwrap(); // <-- Result can be handled accordingly
If more granularity is needed for simulation, there are also step-in and step-out functions.
See the [sim
] module for more details.
Dependencies
~2MB