https://github.com/fredmorcos/hackism
The Hackism project is MIT licensed (see the LICENSE file). Some
test files are licensed differently and such is stated at the top of
the file.
The Hackism project is a suite of applications related to the HACK
machine and JACK programming language and VM taught by the
Nand2Tetris course. The application
suite is a library and set of programs for handling various tasks
related to the HACK CPU, micro-architecture and instruction set as
well as the JACK programming language and virtual machine. Hackism
currently consists of the following:
- Library for parsing HACK assembly
- HACK assembler and disassembler
- HACK interpreter
- HACK CPU emulator
- JACK virtual machine
- JACK compiler
Hackism executables can be run using cargo run --bin <NAME> in the
project directory or as standalone executables such as
hackism-NAME. The --help flag is available on all Hackism
executables and can be used to discover more information about each
command. The --verbose flag is also available on all Hackism
programs for more verbose output.
To assemble a .asm HACK file with logging enabled: hackism-asm -vvv infile.asm -o outfile.hack.
To disassemble a .hack file: hackism-dis infile.hack -o outfile.asm.
The tools provided by the Nand2Tetris course primarily deal with
what I call bintext: A textual representation of values in binary
form. This is generally awkward but a good way to teach the concepts
without having to teach how to deal with binary data.
The predecessor of hackism dealt with both types of data (e.g. by
passing a --bintext flag when bintext was involved or
desired). However, I decided that continuing to do so was not worth
the abstraction hassles. Hence, hackism only deals with bintext.
Cargo can be used to build and install hackism programs into
~/.cargo/bin using cargo install --path . (note the dot at the
end of the command). The program names are all prefixed with
hackism- (e.g. hackism-asm, hackism-dis, etc...).
To test the hackism library, execute cargo test in the top-level
directory of the project.