2 个不稳定版本
0.2.0 | 2020年5月25日 |
---|---|
0.1.0-alpha.1 | 2020年1月2日 |
#895 in 编程语言
200KB
4.5K SLoC
概述
ttk91
包提供处理 TTK91 字节码和符号汇编文件的库,将汇编编译成字节码并执行字节码。该包还包括用于执行这些任务的命令行工具。通过 ttk91-wasm
包提供(有限)WebAssembly 接口,ttk91-web
使用此包。
特性
- 解析符号和字节码格式的 TTK91 程序
- 将符号汇编编译成字节码
- 为字节码生成源映射
- 执行字节码
- 可扩展的 IO 和内存接口
- 命令行工具
示例
use ttk91::{
symbolic::Program,
emulator::{Emulator, StdIo, Memory},
};
fn main() {
// Simple TTK91 program that adds 13 and 15 together and outputs the answer.
let symbolic_source = r#"
;; DATA
X DC 13
Y DC 15
;; CODE
MAIN LOAD R1, X
ADD R1, Y
OUT R1, =CRT
SVC SP, =HALT
"#;
// Parse the symbolic assembly into symbolic IR.
let symbolic = Program::parse(symbolic_source).unwrap();
// Translate the symbolic IR into bytecode IR.
let compiled = symbolic.compile();
// Convert the bytecode IR to bytecode.
let memory = compiled.to_words();
// Load the bytecode into an emulator which uses the standard output.
let mut emulator = Emulator::new(memory, StdIo);
// Execute the bytecode.
emulator.run()
.expect("an error occured while emulating the program");
}
命令行工具
此包包含多个命令行工具。这些工具可以通过 tools
功能启用,也可以通过 ttk91repl
和 ttk91run
功能分别启用。
ttk91repl
ttk91repl
提供了一个用于 TTK91 符号汇编语言的读取-执行-打印-循环环境。它支持交替编写和执行代码,并提供适用于调试的多个命令。
0x8000> LOAD R1, =5
0x8001> OUT R1, =CRT
5
0x0002> .register r1
Register R1 = 5
0x8002> SUB R1, =1
0x8003> JNZER R1, 0x8001
4
3
2
1
0x8004>
ttk91run
ttk91run
命令行工具能够模拟符号和字节码格式的 TTK91 程序。
$ ttk91run tests/hello.k91
28
$ ttk91run tests/hello.b91
28
依赖关系
~3–11MB
~76K SLoC