Subprojects for nand2tetris course
In this project I put my solutions for Nand To Tetris. I use the PLMX compiler.
For this repository I use the jhallen’s CP/M environment because it is required that the subprojects be buildable from command line with Makefiles and executable from command line. So I can’t just use an emulator and make and test inside. The executable files must be usable from linux. That’s exacly what jhallen’s cpm does. It runs an emulator, but reads from and writes to the current directory.
Unfortunately it supports only one directory (mapped to A: drive). So in
order to compile I must have the compiler and the project in the same
directory. This is something that I think should be avoid, so I created
bash script to copy the compiler files from plmx.zip
to the project
directory and to remove them when they are not needed.
I had to modify the plmx
binaries in order to rename files with the plm
extension. PLMX used this extension for overlay files. But I prefer to use
the plm
extension for PL/M source code files. I am not the only one who
does it, for example many CP/M source files heve the plm
extension and
PL/M examples from z80pack also
have this extension. I used emacs in order to find the name of .PLM
files
and I replaced them with .DAT
. Not sure whether it’s the best choice for
the extension. Perhaps I should have chosen .OVR
.
- Linux
- GNU coreutils (comm, sort)
- sed
- zipinfo
- github.com/jhallen/cpm with binaries in
$PATH
- Clone the repository
cd
to a subproject that you would like to test or to run.- There should be a Makefile, which you can use running
make
.
And so, the most compete version of the subpackage is compiled. The command should also create linux executable scripts which you can run to test the compiled program.
- You can remove compiled files with
make clean
.
The assembler for the nand2tetris CPU.
In two versions:
- basasm: without variables nor symbols
- hackasm: with variables and symbols
The assembler reads a Hack assembly file and produces a text file containing
a string representation of two binary bytes per line. It means that the
output file contains characters 0
and 1
and CRLF
between lines. And
each line is 16 characters (representing 2 bytes).
The input file has the extension asm
and the ouput is hck
because CP/M
doesn’t like extensions with more than 3 characters.
Creates assembly code from .vm
files.
Written in Java, generates .vm
files from Jack files and projects.
Written in Jack, implements the basic functionality for Jack.