Overview

The ttk91 crate provides a library for dealing with TTK91 bytecode and symbolic assembly files, compiling assembly to bytecode and executing bytecode. The crate also includes tools for doing these tasks from the command-line. The ttk91-wasm crate provides a (limited) WebAssembly interface for this crate, via which ttk91-web uses this crate.

Features

Example

```rust 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");

} ```

Command-line Utilities

This crate comes with multiple command-line utilities. These utilities can be enables with the tools feature or individually with the ttk91repl and ttk91run features.

ttk91repl

The ttk91repl provides a Read-Execute-Print-Loop environment for the TTK91 symbolic assembly language. It supports alternating between writing and executing code and provides multiple commands suitable for debugging.

text 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

The ttk91run command-line tool is capable of emulating TTK91 programs in both the symbolic and the bytecode formats.

$ ttk91run tests/hello.k91 28 $ ttk91run tests/hello.b91 28