Tools: Updated batch and script files

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Tools: Updated batch and script files

cadet1620
Administrator
Contributed by Mark Armbrust
25 June 2014

Extract this archive into your nand2tetris/tools directory.
  NewBatShFiles.zip
It replaces the *.bat and *.zip files that run the Nand2Tetris tools.

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.


NewBatShFiles.html from the zip file:


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 [1] 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.

 Successful assembly:

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.

 Successful test:

C:\TECS\projects\02>HardwareSimulator ALU.tst
End of script - Comparison ended successfully
 Failed test:
C:\TECS\projects\02>HardwareSimulator ALU.tst
Comparison failure at line 24
 Error in associated HDL file:
C:\TECS\projects\02>HardwareSimulator ALU.tst
In HDL file C:\TECS\projects\02\ALU.hdl, Line 60, out[16]: 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.

 


[1] 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.