The general command syntax is:
java -jar Wang700asm.jar [rom-file] [prop=value...]
As a special case, a direct disassembly of a ROM image file to stdout may be done using the syntax:
java -jar Wang700asm.jar -d [-z] [-r] rom-file
Where: -z trims off all trailing zeroed instructions, and -r includes the raw hexadecimal representation of the instruction fields.
The "store" and "revert" buttons are enabled when the current microcode instruction has been modified but not yet stored in the ROM image. Clicking "store" stores the modified instruction in the ROM image (but does not save anything to disk). Clicking "revert" reverts the instruction to the current contents in the ROM image. CAUTION: Navigating to another instruction will automatically store the instruction.
The "execute" button will cause the current microcode instruction to be executed in the simulator, and will also make the simulator oscilloscope window visible.
The "run" button, in conjunction with the "cycles" and "breakpt" fields, will start executing instructions until reaching the limit in "cycles" (machine cycles, i.e. instructions) or the breakpoint address.
A blank or zero "cycles" means infinity (well, currently 1 million cycles).
A blank "breakpt" means no breakpoint is (will be) set. The breakpoint is only set in the microcode image during the actual run, and is removed upon stopping. Invalid entry in the breakpoint field causes the field to be blanked. The breakpoint address may be set to the current instruction by pressing F1.
Instructions are executed with a pause between, set by the "run_rate" property. This value is in milliseconds and defaults to 10. It may be set to "0", however that may significantly increase the load on your PC during runs.
The drop-downs and fields corresponding to microcode instruction word fields are used to modify the current instruction. They also indicate the fields of the current instruction.
The current instruction may be selected by using the UP, DOWN, HOME, END, PAGE_UP, and PAGE_DOWN cursor keys, or by mouse click on the desired instruction, or mouse wheel, or via execution of instructions. CAUTION: This navigation automatically stores a modified instruction.
The current instruction may be cleared to all fields "0" by pressing Shift + Delete.
Note that not all instructions in the ROM image are displayed to begin with. Only as instructions are "visited" do they appear, with the exception that all instructions between the first and last-visited are always created (executing a distant instruction causes all between to be shown).
The microcode oscilloscope shows various CPU and machine registers on the top half. Below that are controls and displays corresponding to the machine's human interface. The "Machine" menu provides various actions related to the condition of registers and memory.
The menu item Machine->Reset_Zero will clear all registers and RAM to "0". Display is also blanked. Note that this does NOT affect the current/next instruction to be executed.
The menu item Machine->Reset_Random will set (most) registers and RAM to random values. Display is also blanked. Note that this does NOT affect the current/next instruction to be executed.
The menu item Machine->Blank_Display will clear the display as if refreshing had stopped. Since the simulation does not automatically blank the display if refreshing stops, this is the only way to be certain whether refreshing is still happening without stopping and resetting the machine.
Address values (NEXT, PC, Row Addr) are displayed in hexadecimal. D1 is displayed in binary. All others are displayed in decimal.
The top pane includes a RAM viewport that allows up to 4 "rows" of RAM to be monitored. RAM is organized in 8-bit words and each row represents 16 words, but accessed as 4-bit words and so shown as two rows. This corresponds to the standard microcode concept of a pair of calculator "registers". Addresses are in the "logical" 4K machine address range. Since less than 4K RAM is always configured, the behavior is the same as for the real calculator (e.g. FF0 == BF0 == 7F0 == 3F0 for 1K RAM).
In the bottom pane, an approximation of the display is shown (if refreshed by microcode), and below that are the RUN/LEARN/... buttons, along with the STEP button and mode switches. In addition, buttons are provided for the basic control functions PRIME, etc.
In addition, an interface is provided to inject key presses. A key-code value is entered into the field left of the KEY button, and then the KEY button is clicked to "press" that key. There are two KEY fields for convenience of entering two-code sequences. The GISN field/button is for entering codes during I/O. Key-codes are either 2-digit hexadecimal or Wang split-decimal notation (For example, "8-12" and "8c" represent the same key-code value).