- F9: Print program counter, disassemble current instruction, print register values
- F10: Dump memory segments 0 through 63 (inclusive)
- F11: Dump memory segments 64 through 127 (inclusive)
- F12: Disassemble next 16 instructions
## Understanding the Output
### F9
Program counter: The segment and offset address of the current instruction, first in decimal, then hexidecimal.
PC: 036.009 0x24.0x09
Disassembly: The assembly for the current instruction. Decimal constants include comments for their hexadecimal value.
ASM: LRC r02 #036 ; (0x0024)
Registers: Values of registers in decimal and then hexadecimal
r00: 001 (0x01)
r01: 001 (0x01)
...
### F10
16 bytes of memory per row (32 hex digits). This example contains the x y locations of pieces in tetris.
0x00.0x00: 0x070E060F050F070F020E010F000F020F
0x00.0x10: 0x070C070D060D060E0000000000000000
...
Segment 63 contains the return addresses of functions for vaporlang programs.
The first byte `0x04` is the call stack size in bytes. The next 2 bytes `0x02` and `0x1E` are a segment and offset return address. The next `0x21.0x55` is another return address and explains the callstack size (4 bytes). The highest order return address is the current one at the time of execution.
0x3F.0x00: 0x04021E21550000000000000000000000
Looking up `0x02.0x1E` in the assembly (with instruction address logging) shows that this address is directly after a call to the render function.
At `0x21.0x55` is the return address from the renderTile function. The call stack shows that the program has called render and render has called renderTile.
### F12
Disassembly of the next 16 instructions. The * marks the current instruction.