Contributed by Mark Armbrust
25 June 2014
Extract this archive into your nand2tetris/tools directory.
Add your nand2tetris/tools directory to your PATH variable.
Then you can use the tools directly from the command line. For example:
JackCompiler Compiles all .jack files in the current working directory. JackCompiler DIRECTORY Compiles all .jack files in DIRECTORY. JackCompiler FILE.jack Compiles FILE.jack to FILE.vm.
These have been tested on Windows XP and 7, and on Linux (Ubuntu) and Mac OS X.
This archive contains updated batch files and scripts for the Nand2Tetris tools. These batch files and scripts can be used from any working directory without requiring full paths for their arguments.
The batch files have been tested on Windows XP and Windows 7 32- and 64-bit. The scripts have been tested on Ubuntu Linux and Mac OS X.
For these batch files or scripts from the command line, you must add the nand2tetris/tools directory to your PATH variable. The batch files and scripts do handle spaces in directory and file names so they will work if Nand2Tetris is installed under "My Documents".
On Windows, the batch files will run by just typing their name (without the .bat). On Linux and Mac OS X you must change the scripts' attributes to include "executable". It's also handy to make symbolic links  in your ~/bin directory so that you don't need to type the .sh:
ln -s ~/nand2tetris/tools/Assembler.sh Assembler chmod +x Assembler
Note that on Windows 7 64-bit you need to install the 64-bit version of Java so that 64-bit cmd.exe can run java commands in batch files. If the batch files say " 'java' is not recognized..." you likely only have the 32-bit Java installed.
On Windows, you can create desktop icons for the interactive tools – HardwareSimulator, Assembler, CPUEmulator and VMEmulator – by finding them in Explorer and right-clicking on them and pick "Send to > Desktop." Edit the shortcuts' properties and set "Run" to "minimized."
The batch files accept a "/?" option to show their usage, and the scripts accept "-h":
C:\TECS\projects\09>JackCompiler /? Usage: JackCompiler Compiles all .jack files in the current working directory. JackCompiler DIRECTORY Compiles all .jack files in DIRECTORY. JackCompiler FILE.jack Compiles FILE.jack to FILE.vm.
From the command line, typing "Assembler" will start the assembler in interactive mode. Typing "Assembler xxx.asm" will assemble xxx.asm generating xxx.hack. There is no way to automatically compare to expected output. You can automate this compare using the TextComparer tool.
C:\TECS\projects\04\fill>Assembler Fill.asm Assembling "c:\TECS\projects\04\fill\Fill.asm"Failed assembly:
C:\TECS\projects\04\fill>Assembler Fill.asm Assembling "C:\TECS\projects\04\fill\Fill.asm" In line 15, Expression expected
From the command line, typing "HardwareSimulator" will run start the simulator in interactive mode. Typing "HardwareSimulator xxx.tst" will run the test script in the simulator and report the result.
C:\TECS\projects\02>HardwareSimulator ALU.tst End of script - Comparison ended successfullyFailed test:
C:\TECS\projects\02>HardwareSimulator ALU.tst Comparison failure at line 24Error in associated HDL file:
C:\TECS\projects\02>HardwareSimulator ALU.tst In HDL file C:\TECS\projects\02\ALU.hdl, Line 60, out: the specified sub bus is not in the bus range: load ALU.hdl
CPUEmulator and VMEmulator work similarly, either opening the emulator in interactive mode if there is no parameter, or running a test script.
With no arguments, "JackCompiler" will compile all files in the current directory. With an argument, it will compiler a single Jack file or all the files in the named directory. More than one argument is not supported. Wildcards are not supported.
Compile current directory:
C:\TECS\projects\09\Reflect>JackCompiler Compiling "c:\TECS\projects\09\Reflect"Compile single file:
C:\TECS\projects\09\Reflect>JackCompiler Mirrors.jack Compiling "C:\TECS\projects\09\Reflect\Mirrors.jack"Compile "Reflect" directory:
C:\TECS\projects\09>JackCompiler Reflect Compiling "C:\TECS\projects\09\Reflect"
TextComparer takes two files to compare and reports success or failure:
C:\TECS\projects\02>HardwareSimulator ALU.tst Comparison failure at line 24 C:\TECS\projects\02>TextComparer ALU.cmp ALU.out Comparison failure in line 23: |0101101110100000|0001111011010010|1|1|0|0|0|0|0001111011010010|0|0| |0101101110100000|0001111011010010|1|1|0|0|0|0|0001111011010010|0|1|[Note line number discrepancy.]
The tools do not do sensible things with exit codes. If you use them in automated testing you will need to capture and parse their output.
 Why hard links don't work: The class and jar files for the Nand2Tetris tools are stored in subdirectories under the nand2tetris/tools directory. The command that starts the tools needs to tell Java where these files are located, and it uses relative paths to do so. The script looks at $0 (argument 0 it the command's file path) and changes to that directory before running the Java command.
If you put a hard link from ~/bin/Xxx to ~/nand2tetris/tools/Xxx.sh then $0 will say ~/bin/Xxx so that is where the scrip will be looking for the required subdirectories.
If you use a symbolic link, the script can test for that and follow the link to get to the correct directory where Xxx.sh and the Java files are stored.
|Free forum by Nabble||Edit this page|