~sforman/PythonOberon

d53ef1d7c5f3797309ca12c5ef0c3e05882e30fd — Simon Forman 1 year, 4 months ago 6f149eb
How did it ever work?

the '=' word wasn't PUSHing it's result!  D'oh!

I'm an idiot.
M forth/assembler.output.txt => forth/assembler.output.txt +545 -525
@@ 26,8 26,8 @@
      REPL_dfa: 0x00064 0x00000000                                       line: 172     dw(LINK) -- (in def_)
                0x00068 0x50455204                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          REPL: 0x0006c 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x00070 0x00000820                                       line: 317 dw(INTERPRET)
                0x00074 0x0000073c                                       line: 318 dw(BRANCH)
                0x00070 0x00000870                                       line: 317 dw(INTERPRET)
                0x00074 0x0000078c                                       line: 318 dw(BRANCH)
                0x00078 0xfffffff8                                       line: 319 dw(s_to_u_32(-8))  # Loop back to INTERPRET.
      DROP_dfa: 0x0007c 0x00000064                                       line: 172     dw(LINK) -- (in def_)
                0x00080 0x4f524404                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)


@@ 110,531 110,551 @@
                0x001b4 Asr_imm(0, 0, 0x1e, u=False, v=False)            line: 368 Asr_imm(R0, R0, 30)  # Z is the 31st bit, penultimate from the MSB.
                0x001b8 And_imm(0, 0, 0x1, u=False, v=False)             line: 369 And_imm(R0, R0, 1)  # Mask out N flag.
                0x001bc Xor_imm(0, 0, 0x1, u=False, v=False)             line: 370 Xor_imm(R0, R0, 1)  # flip the (shifted) Z bit.
                0x001c0 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x001c4 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x001c8 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x001cc T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      INCR_dfa: 0x001d0 0x00000190                                       line: 172     dw(LINK) -- (in def_)
                0x001d4 0x002b3102                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          INCR: 0x001d8 0x000001dc                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x001dc Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x001e0 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x001e4 Add_imm(0, 0, 0x1, u=False, v=False)             line: 376 Add_imm(R0, R0, 1)
                0x001e8 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x001ec Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x001f0 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x001f4 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x001f8 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x001fc T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      DECR_dfa: 0x00200 0x000001d0                                       line: 172     dw(LINK) -- (in def_)
                0x00204 0x002d3102                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          DECR: 0x00208 0x0000020c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0020c Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00210 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00214 Sub_imm(0, 0, 0x1, u=False, v=False)             line: 383 Sub_imm(R0, R0, 1)
                0x00218 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0021c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00220 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00224 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00228 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0022c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
  ADDSTORE_dfa: 0x00230 0x00000200                                       line: 172     dw(LINK) -- (in def_)
                0x00234 0x00212b02                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
      ADDSTORE: 0x00238 0x0000023c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0023c Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00240 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00244 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00248 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x0024c Load_word(2, 0)                                  line: 391 Load_word(R2, R0)
                0x00250 Add(2, 2, 1, u=False)                            line: 392 Add(R2, R2, R1)
                0x00254 Store_word(2, 0)                                 line: 393 Store_word(R2, R0)
                0x00258 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0025c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00260 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00264 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
       KEY_dfa: 0x00268 0x00000230                                       line: 172     dw(LINK) -- (in def_)
                0x0026c 0x59454b03                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           KEY: 0x00270 0x00000274                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00274 Mov_imm(1, 0x2c8, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x00278 T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x0027c Load_word(0, 1, offset=0xffffc)                  line: 404 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x00280 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00284 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00288 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0028c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00290 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00294 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      EMIT_dfa: 0x00298 0x00000268                                       line: 172     dw(LINK) -- (in def_)
                0x0029c 0x494d4504                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          EMIT: 0x002a0 0x000002a4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x002a4 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x002a8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x002ac Mov_imm(1, 0x2c8, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x002b0 T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x002b4 Store_word(0, 1, offset=0xffffc)                 line: 411 Store_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x002b8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x002bc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x002c0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x002c4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
          _KEY: 0x002c8 Mov_imm(1, 0xffff, u=True, v=False)              line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x002cc Ior_imm(1, 1, 0xffcc, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x002d0 Load_word(2, 1)                                  line: 427 Load_word(R2, R1)
                0x002d4 EQ_imm(0x3fff48)                                 line: 428 EQ_imm(negative_offset_24(-8))  # if R2==0 repeat
                0x002d8 T(15)                                            line: 433 T(15)  # return
        _blank: 0x002dc Sub_imm(2, 0, 0x20, u=False, v=False)            line: 451 Sub_imm(R2, R0, 32)  # Is it a space char?
                0x002e0 EQ(15)                                           line: 452 EQ(15)
                0x002e4 Sub_imm(2, 0, 0xa, u=False, v=False)             line: 453 Sub_imm(R2, R0, 10)  # Is it a newline char?
                0x002e8 EQ(15)                                           line: 454 EQ(15)
                0x002ec Sub_imm(2, 0, 0x9, u=False, v=False)             line: 455 Sub_imm(R2, R0, 9)  # Is it a tab char?
                0x002f0 EQ(15)                                           line: 456 EQ(15)
                0x002f4 Sub_imm(2, 0, 0xb, u=False, v=False)             line: 457 Sub_imm(R2, R0, 11)  # Is it a '\x0b' char?
                0x002f8 EQ(15)                                           line: 458 EQ(15)
                0x002fc Sub_imm(2, 0, 0xc, u=False, v=False)             line: 459 Sub_imm(R2, R0, 12)  # Is it a '\x0c' char?
                0x00300 EQ(15)                                           line: 460 EQ(15)
                0x00304 Sub_imm(2, 0, 0xd, u=False, v=False)             line: 461 Sub_imm(R2, R0, 13)  # Is it a carriage return char?
                0x00308 T(15)                                            line: 462 T(15)  # return
 _skip_comment: 0x0030c Sub_imm(2, 0, 0x5c, u=False, v=False)            line: 476 Sub_imm(R2, R0, ord('\\'))  # Is it a '\' char?
                0x00310 NE(15)                                           line: 477 NE(15)                      # It's not a '\' char, return.
_skip_cmt_loop: 0x00314 Load_word(2, 1)                                  line: 480 Load_word(R2, R1)           # Get the serial port status.
                0x00318 EQ_imm(0xfffffe)                                 line: 481 EQ_imm(_skip_cmt_loop)      # until serial port status != 0
                0x0031c Load_word(0, 1, offset=0xffffc)                  line: 482 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x00320 Sub_imm(2, 0, 0xa, u=False, v=False)             line: 483 Sub_imm(R2, R0, ord('\n'))  # Is it a newline char?
                0x00324 EQ(15)                                           line: 484 EQ(15)  # We have reached the end of the line, return.
                0x00328 T_imm(0xfffffa)                                  line: 485 T_imm(_skip_cmt_loop)   # ...until newline.
   WORD_BUFFER: 0x0032c 0x00000000
                0x00330 0x00000000
                0x00334 0x00000000
                0x00338 0x00000000
                0x0033c 0x00000000
                0x00340 0x00000000
                0x00344 0x00000000
                0x00348 0x00000000
      WORD_dfa: 0x0034c 0x00000298                                       line: 172     dw(LINK) -- (in def_)
                0x00350 0x524f5704                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          WORD: 0x00354 0x00000358                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
     _word_key: 0x00358 Mov_imm(1, 0x2c8, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x0035c T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x00360 Load_word(0, 1, offset=0xffffc)                  line: 505 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x00364 Mov_imm(2, 0x30c, u=False, v=False)              line: 507 Mov_imm(R2, _skip_comment)  # Skip line comments.
                0x00368 T_link(2)                                        line: 508 T_link(R2)
                0x0036c Mov_imm(1, 0x2dc, u=False, v=False)              line: 510 Mov_imm(R1, _blank)  # Is it a space char?
                0x00370 T_link(1)                                        line: 511 T_link(R1)
                0x00374 EQ_imm(0xfffff8)                                 line: 512 EQ_imm(_word_key)  # then get another char
                0x00378 Mov_imm(6, 0x32c, u=False, v=False)              line: 515 Mov_imm(word_pointer, WORD_BUFFER)
                0x0037c Mov_imm(5, 0x0, u=False, v=False)                line: 516 Mov_imm(word_counter, 0)
                0x00380 Store_word(5, 6)                                 line: 517 Store_word(word_counter, word_pointer)  # Zero out the first word of WORD_BUFFER.
                0x00384 Add_imm(6, 6, 0x1, u=False, v=False)             line: 520 Add_imm(word_pointer, word_pointer, 1)  # Leave a byte for the length.
  _find_length: 0x00388 Sub_imm(2, 5, 0x20, u=False, v=False)            line: 524 Sub_imm(R2, word_counter, 32)
                0x0038c EQ_imm(0xfffff2)                                 line: 525 EQ_imm(_word_key)  # try again.
                0x00390 Store_byte(0, 6)                                 line: 528 Store_byte(R0, word_pointer)
                0x00394 Add_imm(6, 6, 0x1, u=False, v=False)             line: 529 Add_imm(word_pointer, word_pointer, 1)
                0x00398 Add_imm(5, 5, 0x1, u=False, v=False)             line: 530 Add_imm(word_counter, word_counter, 1)
                0x0039c Mov_imm(1, 0x2c8, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x003a0 T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x003a4 Load_word(0, 1, offset=0xffffc)                  line: 534 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x003a8 Mov_imm(1, 0x2dc, u=False, v=False)              line: 537 Mov_imm(R1, _blank)
                0x003ac T_link(1)                                        line: 538 T_link(R1)
                0x003b0 NE_imm(0xfffff5)                                 line: 539 NE_imm(_find_length)  # No, keep getting chars to the buffer
                0x003b4 Mov_imm(6, 0x32c, u=False, v=False)              line: 542 Mov_imm(word_pointer, WORD_BUFFER)
                0x003b8 Store_byte(5, 6)                                 line: 543 Store_byte(word_counter, word_pointer)
                0x003bc Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x003c0 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x003c4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x003c8 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      FIND_dfa: 0x003cc 0x0000034c                                       line: 172     dw(LINK) -- (in def_)
                0x003d0 0x4e494604                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          FIND: 0x003d4 0x000003d8                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x003d8 Mov_imm(6, 0x32c, u=False, v=False)              line: 556 Mov_imm(word_pointer, WORD_BUFFER)
                0x003dc Load_word(5, 6)                                  line: 558 Load_word(word_counter, word_pointer)
                0x003e0 Mov_imm(2, 0xffff, u=True, v=False)              line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x003e4 Ior_imm(2, 2, 0xff7f, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x003e8 Mov_imm(0, 0x550, u=False, v=False)              line: 563 Mov_imm(R0, LATEST_var)
                0x003ec Load_word(0, 0)                                  line: 564 Load_word(R0, R0)          # Point R0 to latest word's LFA.
       _FIND_1: 0x003f0 Load_word(1, 0, offset=0x4)                      line: 566 Load_word(R1, R0, 4)       # load a word of the name field.
                0x003f4 And(1, 1, 2, u=False)                            line: 567 And(R1, R1, R2)            # Clear the IMMEDIATE flag, if any.
                0x003f8 Sub(1, 1, 5, u=False)                            line: 568 Sub(R1, R1, word_counter)  # Compare.
                0x003fc EQ_imm(0x2)                                      line: 569 EQ_imm(_found)             # If this is the word...
                0x00400 Load_word(0, 0)                                  line: 575 Load_word(R0, R0)  # Load the address of the next link field into R0
                0x00404 NE_imm(0xfffffa)                                 line: 576 NE_imm(_FIND_1)  # Check the next word.
        _found: 0x00408 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0040c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00410 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00414 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00418 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0041c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    NUMBER_dfa: 0x00420 0x000003cc                                       line: 172     dw(LINK) -- (in def_)
                0x00424 0x4d554e06                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        NUMBER: 0x00428 0x0000042c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0042c Mov_imm(6, 0x32c, u=False, v=False)              line: 615 Mov_imm(word_pointer, WORD_BUFFER)
                0x00430 Load_byte(5, 6)                                  line: 616 Load_byte(word_counter, word_pointer)
                0x00434 Mov_imm(2, 0x0, u=False, v=False)                line: 617 Mov_imm(R2, 0)  # use R2 as the accumulator for the number's value
                0x00438 Add_imm(6, 6, 0x1, u=False, v=False)             line: 619 Add_imm(word_pointer, word_pointer, 1)  # Point to first char.
                0x0043c Load_byte(0, 6)                                  line: 620 Load_byte(R0, word_pointer)  # Load it.
                0x00440 Sub_imm(0, 0, 0x24, u=False, v=False)            line: 621 Sub_imm(R0, R0, ord('$'))  # Is it a '$'?
                0x00444 NE_imm(0xf)                                      line: 622 NE_imm(_NUM_fin)
                0x00448 Sub_imm(5, 5, 0x1, u=False, v=False)             line: 625 Sub_imm(word_counter, word_counter, 1)  # we have parsed one '$' char.
      _NUM_hex: 0x0044c Add_imm(6, 6, 0x1, u=False, v=False)             line: 628 Add_imm(word_pointer, word_pointer, 1)  # Point to next char.
                0x00450 Load_byte(0, 6)                                  line: 629 Load_byte(R0, word_pointer)  # Load it.
                0x00454 Sub_imm(0, 0, 0x30, u=False, v=False)            line: 631 Sub_imm(R0, R0, ord('0'))
                0x00458 LT_imm(0xa)                                      line: 632 LT_imm(_NUM_fin)  # Is its ASCII value lower than '0'?
                0x0045c Sub_imm(1, 0, 0x9, u=False, v=False)             line: 634 Sub_imm(R1, R0, 9)  # Is it 0-9?
                0x00460 LE_imm(0x5)                                      line: 635 LE_imm(_NUM_add)  # It is!
                0x00464 Sub_imm(0, 0, 0x31, u=False, v=False)            line: 641 Sub_imm(R0, R0, 49)  # so now '1'..'6' -> 0..5
                0x00468 LT_imm(0x6)                                      line: 642 LT_imm(_NUM_fin)  # Its ASCII value is less than 'a', nope out.
                0x0046c Sub_imm(1, 0, 0x5, u=False, v=False)             line: 645 Sub_imm(R1, R0, 5)  # Is it a-f?
                0x00470 GT_imm(0x4)                                      line: 646 GT_imm(_NUM_fin)  # nope, nope out
                0x00474 Add_imm(0, 0, 0xa, u=False, v=False)             line: 648 Add_imm(R0, R0, 10)  # 0..5 -> 10..15
      _NUM_add: 0x00478 Add(2, 2, 0, u=False)                            line: 651 Add( R2, R2, R0)  # Add it to the accumulator.
                0x0047c Sub_imm(5, 5, 0x1, u=False, v=False)             line: 653 Sub_imm(word_counter, word_counter, 1)  # we have parsed a digit char.
                0x00480 NE_imm(0x8)                                      line: 654 NE_imm(_NUM_foo)  # More digits? Keep going.
      _NUM_fin: 0x00484 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00488 Store_word(2, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x0048c Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00490 Store_word(5, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00494 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00498 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x0049c Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x004a0 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      _NUM_foo: 0x004a4 Lsl_imm(2, 2, 0x4, u=False, v=False)             line: 663 Lsl_imm(R2, R2, 4)  # accumulator *= 16
                0x004a8 T_imm(0xffffe8)                                  line: 664 T_imm(_NUM_hex)  # Go get the next digit.
    CREATE_dfa: 0x004ac 0x00000420                                       line: 172     dw(LINK) -- (in def_)
                0x004b0 0x45524306                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        CREATE: 0x004b4 0x000004b8                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x004b8 Mov_imm(0, 0x524, u=False, v=False)              line: 675 Mov_imm(R0, HERE__var)  # R0 <- &HERE
                0x004bc Load_word(0, 0)                                  line: 676 Load_word(R0, R0)       # R0 <- ram[HERE]
                0x004c0 Mov_imm(1, 0x550, u=False, v=False)              line: 678 Mov_imm(R1, LATEST_var)  # R1 <- &LATEST
                0x004c4 Load_word(2, 1)                                  line: 679 Load_word(R2, R1)        # R2 <- ram[LATEST]
                0x004c8 Store_word(2, 0)                                 line: 681 Store_word(R2, R0)  # value of LATEST -> ram[HERE]
                0x004cc Store_word(0, 1)                                 line: 682 Store_word(R0, R1)  # value of HERE (now LFA for new word) -> ram[LATEST]
                0x004d0 Add_imm(0, 0, 0x4, u=False, v=False)             line: 684 Add_imm(R0, R0, 4)  # HERE += 4
                0x004d4 Mov_imm(6, 0x32c, u=False, v=False)              line: 687 Mov_imm(word_pointer, WORD_BUFFER)
                0x004d8 Load_word(1, 6)                                  line: 697 Load_word(R1, word_pointer)  # Get the word from WORD_BUFFER.
                0x004dc Store_word(1, 0)                                 line: 698 Store_word(R1, R0)  # Store word to HERE.
                0x004e0 Add_imm(0, 0, 0x4, u=False, v=False)             line: 699 Add_imm(R0, R0, 4)  # HERE += 4
                0x004e4 Mov_imm(1, 0x524, u=False, v=False)              line: 710 Mov_imm(R1, HERE__var)  # R1 <- &HERE
                0x004e8 Store_word(0, 1)                                 line: 711 Store_word(R0, R1)      # value of HERE -> ram[HERE]
                0x004ec Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x004f0 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x004f4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x004f8 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     HERE__dfa: 0x004fc 0x000004ac                                       line: 172     dw(LINK) -- (in def_)
                0x00500 0x52454804                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         HERE_: 0x00504 0x00000508                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00508 Mov_imm(0, 0x524, u=False, v=False)              line: 212     Mov_imm(R0, LABEL_var) -- (in defvar)
                0x0050c Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00510 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00514 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00518 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x0051c Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00520 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     HERE__var: 0x00524 0x00000a00                                       line: 219     dw(initial) -- (in defvar)
    LATEST_dfa: 0x00528 0x000004fc                                       line: 172     dw(LINK) -- (in def_)
                0x0052c 0x54414c06                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        LATEST: 0x00530 0x00000534                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00534 Mov_imm(0, 0x550, u=False, v=False)              line: 212     Mov_imm(R0, LABEL_var) -- (in defvar)
                0x00538 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0053c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00540 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00544 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00548 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0054c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    LATEST_var: 0x00550 0x000009cc                                       line: 219     dw(initial) -- (in defvar)
     STATE_dfa: 0x00554 0x00000528                                       line: 172     dw(LINK) -- (in def_)
                0x00558 0x41545305                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         STATE: 0x0055c 0x00000560                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00560 Mov_imm(0, 0x57c, u=False, v=False)              line: 212     Mov_imm(R0, LABEL_var) -- (in defvar)
                0x00564 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00568 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x0056c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00570 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00574 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00578 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     STATE_var: 0x0057c 0x00000000                                       line: 219     dw(initial) -- (in defvar)
   __DOCOL_dfa: 0x00580 0x00000554                                       line: 172     dw(LINK) -- (in def_)
                0x00584 0x434f4405                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
       __DOCOL: 0x00588 0x0000058c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0058c Mov_imm(0, 0x0, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x00590 Ior_imm(0, 0, 0x28, u=False, v=False)            line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00594 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00598 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x0059c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x005a0 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x005a4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x005a8 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     COMMA_dfa: 0x005ac 0x00000580                                       line: 172     dw(LINK) -- (in def_)
                0x005b0 0x00002c01                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         COMMA: 0x005b4 0x000005b8                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x005b8 Load_word(2, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x005bc Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x005c0 Mov_imm(1, 0x5d8, u=False, v=False)              line: 738 Mov_imm(R1, _COMMA)
                0x005c4 T_link(1)                                        line: 739 T_link(R1)
                0x005c8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x005cc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x005d0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x005d4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
        _COMMA: 0x005d8 Mov_imm(0, 0x524, u=False, v=False)              line: 748 Mov_imm(R0, HERE__var)  # R0 <- HERE__var
                0x005dc Load_word(1, 0)                                  line: 749 Load_word(R1, R0)       # HERE <- ram[HERE__var]
                0x005e0 Store_word(2, 1)                                 line: 750 Store_word(R2, R1)      # R2 -> ram[HERE]
                0x005e4 Add_imm(1, 1, 0x4, u=False, v=False)             line: 751 Add_imm(R1, R1, 4)      # HERE += 4
                0x005e8 Store_word(1, 0)                                 line: 752 Store_word(R1, R0)      # HERE -> ram[HERE__var]
                0x005ec T(15)                                            line: 753 T(15)  # return
     LBRAC_dfa: 0x005f0 0x000005ac                                       line: 172     dw(LINK) -- (in def_)
                0x005f4 0x00005b81                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         LBRAC: 0x005f8 0x000005fc                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x005fc Mov_imm(0, 0x57c, u=False, v=False)              line: 767 Mov_imm(R0, STATE_var)
                0x00600 Mov_imm(1, 0x0, u=False, v=False)                line: 768 Mov_imm(R1, 0)
                0x00604 Store_word(1, 0)                                 line: 769 Store_word(R1, R0)
                0x00608 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0060c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00610 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00614 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     RBRAC_dfa: 0x00618 0x000005f0                                       line: 172     dw(LINK) -- (in def_)
                0x0061c 0x00005d01                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         RBRAC: 0x00620 0x00000624                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00624 Mov_imm(0, 0x57c, u=False, v=False)              line: 773 Mov_imm(R0, STATE_var)
                0x00628 Mov_imm(1, 0x1, u=False, v=False)                line: 774 Mov_imm(R1, 1)
                0x0062c Store_word(1, 0)                                 line: 775 Store_word(R1, R0)
                0x00630 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00634 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00638 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0063c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     COLON_dfa: 0x00640 0x00000618                                       line: 172     dw(LINK) -- (in def_)
                0x00644 0x00003a01                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         COLON: 0x00648 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x0064c 0x00000354                                       line: 798 dw(WORD)  # "Get the name of the new word"
                0x00650 0x000004b4                                       line: 799 dw(CREATE)  # "CREATE the dictionary entry / header"
                0x00654 0x000000c8                                       line: 800 dw(LIT)  # "Append DOCOL  (the codeword)."
                0x00658 0x00000028                                       line: 801 dw(DOCOL)
                0x0065c 0x000005b4                                       line: 802 dw(COMMA)
                0x00660 0x00000530                                       line: 803 dw(LATEST)  # "Make the word hidden (see below for definition)."
                0x00664 0x00000790                                       line: 804 dw(FETCH)
                0x00668 0x000006dc                                       line: 805 dw(HIDDEN)
                0x0066c 0x00000620                                       line: 806 dw(RBRAC)  # "Go into compile mode."
                0x00670 0x000000a4                                       line: 807 dw(EXIT)  # "Return from the function."
 SEMICOLON_dfa: 0x00674 0x00000640                                       line: 172     dw(LINK) -- (in def_)
                0x00678 0x00003b81                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     SEMICOLON: 0x0067c 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x00680 0x000000c8                                       line: 816 dw(LIT)  # "Append EXIT (so the word will return)."
                0x00684 0x000000a4                                       line: 817 dw(EXIT)
                0x00688 0x000005b4                                       line: 818 dw(COMMA)
                0x0068c 0x00000530                                       line: 819 dw(LATEST)  # "Toggle hidden flag -- unhide the word (see below for definition)."
                0x00690 0x00000790                                       line: 820 dw(FETCH)
                0x00694 0x000006dc                                       line: 821 dw(HIDDEN)
                0x00698 0x000005f8                                       line: 822 dw(LBRAC)  # "Go back to IMMEDIATE mode."
                0x0069c 0x000000a4                                       line: 823 dw(EXIT)  # "Return from the function."
 IMMEDIATE_dfa: 0x006a0 0x00000674                                       line: 172     dw(LINK) -- (in def_)
                0x006a4 0x4d4d4989                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     IMMEDIATE: 0x006a8 0x000006ac                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x006ac Mov_imm(0, 0x550, u=False, v=False)              line: 832 Mov_imm(R0, LATEST_var)  # R0 <- &LATEST
                0x006b0 Load_word(1, 0)                                  line: 833 Load_word(R1, R0)        # R1 <- ram[LATEST]
                0x006b4 Add_imm(1, 1, 0x4, u=False, v=False)             line: 834 Add_imm(R1, R1, 4)       # "Point to name/flags byte."
                0x006b8 Load_word(0, 1)                                  line: 835 Load_word(R0, R1)
                0x006bc Xor_imm(0, 0, 0x80, u=False, v=False)            line: 836 Xor_imm(R0, R0, F_IMMED) # Toggle IMMEDIATE bit.
                0x006c0 Store_word(0, 1)                                 line: 837 Store_word(R0, R1)
                0x006c4 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x006c8 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x006cc Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x006d0 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    HIDDEN_dfa: 0x006d4 0x000006a0                                       line: 172     dw(LINK) -- (in def_)
                0x006d8 0x44494806                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        HIDDEN: 0x006dc 0x000006e0                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x006e0 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x006e4 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x006e8 Add_imm(1, 1, 0x4, u=False, v=False)             line: 848 Add_imm(R1, R1, 4)  # "Point to name/flags byte."
                0x006ec Load_word(0, 1)                                  line: 849 Load_word(R0, R1)
                0x006f0 Xor_imm(0, 0, 0x20, u=False, v=False)            line: 850 Xor_imm(R0, R0, F_HIDDEN)  # "Toggle the HIDDEN bit."
                0x006f4 Store_word(0, 1)                                 line: 851 Store_word(R0, R1)
                0x006f8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x006fc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00700 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00704 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      TICK_dfa: 0x00708 0x000006d4                                       line: 172     dw(LINK) -- (in def_)
                0x0070c 0x00002701                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          TICK: 0x00710 0x00000714                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00714 Load_word(0, 14)                                 line: 870 Load_word(R0, IP)   # Get the address of the next codeword.
                0x00718 Add_imm(14, 14, 0x4, u=False, v=False)           line: 871 Add_imm(IP, IP, 4)  # Skip it.
                0x0071c Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00720 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00724 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00728 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x0072c Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00730 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    BRANCH_dfa: 0x00734 0x00000708                                       line: 172     dw(LINK) -- (in def_)
                0x00738 0x41524206                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        BRANCH: 0x0073c 0x00000740                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00740 Load_word(0, 14)                                 line: 882 Load_word(R0, IP)  # Get the offset.
                0x00744 Add(14, 14, 0, u=False)                          line: 884 Add(IP, IP, R0)    # IP += offset
                0x001c0 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x001c4 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x001c8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x001cc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x001d0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x001d4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
       GTE_dfa: 0x001d8 0x00000190                                       line: 172     dw(LINK) -- (in def_)
                0x001dc 0x003d3e02                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           GTE: 0x001e0 0x000001e4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x001e4 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x001e8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x001ec Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x001f0 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x001f4 Sub(1, 1, 0, u=False)                            line: 378 Sub(R1, R1, R0)
                0x001f8 GE_imm(0x2)                                      line: 379 GE_imm(_GTE_True)
                0x001fc Mov_imm(0, 0x0, u=False, v=False)                line: 380 Mov_imm(R0, 0)
                0x00200 T_imm(0x1)                                       line: 381 T_imm(_GTE_fin)
     _GTE_True: 0x00204 Mov_imm(0, 0x1, u=False, v=False)                line: 383 Mov_imm(R0, 1)
      _GTE_fin: 0x00208 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0020c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00210 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00214 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00218 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0021c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      INCR_dfa: 0x00220 0x000001d8                                       line: 172     dw(LINK) -- (in def_)
                0x00224 0x002b3102                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          INCR: 0x00228 0x0000022c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0022c Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00230 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00234 Add_imm(0, 0, 0x1, u=False, v=False)             line: 391 Add_imm(R0, R0, 1)
                0x00238 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0023c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00240 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00244 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00248 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0024c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      DECR_dfa: 0x00250 0x00000220                                       line: 172     dw(LINK) -- (in def_)
                0x00254 0x002d3102                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          DECR: 0x00258 0x0000025c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0025c Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00260 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00264 Sub_imm(0, 0, 0x1, u=False, v=False)             line: 398 Sub_imm(R0, R0, 1)
                0x00268 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0026c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00270 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00274 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00278 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0027c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
  ADDSTORE_dfa: 0x00280 0x00000250                                       line: 172     dw(LINK) -- (in def_)
                0x00284 0x00212b02                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
      ADDSTORE: 0x00288 0x0000028c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0028c Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00290 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00294 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00298 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x0029c Load_word(2, 0)                                  line: 406 Load_word(R2, R0)
                0x002a0 Add(2, 2, 1, u=False)                            line: 407 Add(R2, R2, R1)
                0x002a4 Store_word(2, 0)                                 line: 408 Store_word(R2, R0)
                0x002a8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x002ac Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x002b0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x002b4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
       KEY_dfa: 0x002b8 0x00000280                                       line: 172     dw(LINK) -- (in def_)
                0x002bc 0x59454b03                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           KEY: 0x002c0 0x000002c4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x002c4 Mov_imm(1, 0x318, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x002c8 T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x002cc Load_word(0, 1, offset=0xffffc)                  line: 419 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x002d0 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x002d4 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x002d8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x002dc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x002e0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x002e4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      EMIT_dfa: 0x002e8 0x000002b8                                       line: 172     dw(LINK) -- (in def_)
                0x002ec 0x494d4504                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          EMIT: 0x002f0 0x000002f4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x002f4 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x002f8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x002fc Mov_imm(1, 0x318, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x00300 T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x00304 Store_word(0, 1, offset=0xffffc)                 line: 426 Store_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x00308 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0030c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00310 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00314 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
          _KEY: 0x00318 Mov_imm(1, 0xffff, u=True, v=False)              line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x0031c Ior_imm(1, 1, 0xffcc, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00320 Load_word(2, 1)                                  line: 442 Load_word(R2, R1)
                0x00324 EQ_imm(0x3fff34)                                 line: 443 EQ_imm(negative_offset_24(-8))  # if R2==0 repeat
                0x00328 T(15)                                            line: 448 T(15)  # return
        _blank: 0x0032c Sub_imm(2, 0, 0x20, u=False, v=False)            line: 466 Sub_imm(R2, R0, 32)  # Is it a space char?
                0x00330 EQ(15)                                           line: 467 EQ(15)
                0x00334 Sub_imm(2, 0, 0xa, u=False, v=False)             line: 468 Sub_imm(R2, R0, 10)  # Is it a newline char?
                0x00338 EQ(15)                                           line: 469 EQ(15)
                0x0033c Sub_imm(2, 0, 0x9, u=False, v=False)             line: 470 Sub_imm(R2, R0, 9)  # Is it a tab char?
                0x00340 EQ(15)                                           line: 471 EQ(15)
                0x00344 Sub_imm(2, 0, 0xb, u=False, v=False)             line: 472 Sub_imm(R2, R0, 11)  # Is it a '\x0b' char?
                0x00348 EQ(15)                                           line: 473 EQ(15)
                0x0034c Sub_imm(2, 0, 0xc, u=False, v=False)             line: 474 Sub_imm(R2, R0, 12)  # Is it a '\x0c' char?
                0x00350 EQ(15)                                           line: 475 EQ(15)
                0x00354 Sub_imm(2, 0, 0xd, u=False, v=False)             line: 476 Sub_imm(R2, R0, 13)  # Is it a carriage return char?
                0x00358 T(15)                                            line: 477 T(15)  # return
 _skip_comment: 0x0035c Sub_imm(2, 0, 0x5c, u=False, v=False)            line: 491 Sub_imm(R2, R0, ord('\\'))  # Is it a '\' char?
                0x00360 NE(15)                                           line: 492 NE(15)                      # It's not a '\' char, return.
_skip_cmt_loop: 0x00364 Load_word(2, 1)                                  line: 495 Load_word(R2, R1)           # Get the serial port status.
                0x00368 EQ_imm(0xfffffe)                                 line: 496 EQ_imm(_skip_cmt_loop)      # until serial port status != 0
                0x0036c Load_word(0, 1, offset=0xffffc)                  line: 497 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x00370 Sub_imm(2, 0, 0xa, u=False, v=False)             line: 498 Sub_imm(R2, R0, ord('\n'))  # Is it a newline char?
                0x00374 EQ(15)                                           line: 499 EQ(15)  # We have reached the end of the line, return.
                0x00378 T_imm(0xfffffa)                                  line: 500 T_imm(_skip_cmt_loop)   # ...until newline.
   WORD_BUFFER: 0x0037c 0x00000000
                0x00380 0x00000000
                0x00384 0x00000000
                0x00388 0x00000000
                0x0038c 0x00000000
                0x00390 0x00000000
                0x00394 0x00000000
                0x00398 0x00000000
      WORD_dfa: 0x0039c 0x000002e8                                       line: 172     dw(LINK) -- (in def_)
                0x003a0 0x524f5704                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          WORD: 0x003a4 0x000003a8                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
     _word_key: 0x003a8 Mov_imm(1, 0x318, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x003ac T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x003b0 Load_word(0, 1, offset=0xffffc)                  line: 520 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x003b4 Mov_imm(2, 0x35c, u=False, v=False)              line: 522 Mov_imm(R2, _skip_comment)  # Skip line comments.
                0x003b8 T_link(2)                                        line: 523 T_link(R2)
                0x003bc Mov_imm(1, 0x32c, u=False, v=False)              line: 525 Mov_imm(R1, _blank)  # Is it a space char?
                0x003c0 T_link(1)                                        line: 526 T_link(R1)
                0x003c4 EQ_imm(0xfffff8)                                 line: 527 EQ_imm(_word_key)  # then get another char
                0x003c8 Mov_imm(6, 0x37c, u=False, v=False)              line: 530 Mov_imm(word_pointer, WORD_BUFFER)
                0x003cc Mov_imm(5, 0x0, u=False, v=False)                line: 531 Mov_imm(word_counter, 0)
                0x003d0 Store_word(5, 6)                                 line: 532 Store_word(word_counter, word_pointer)  # Zero out the first word of WORD_BUFFER.
                0x003d4 Add_imm(6, 6, 0x1, u=False, v=False)             line: 535 Add_imm(word_pointer, word_pointer, 1)  # Leave a byte for the length.
  _find_length: 0x003d8 Sub_imm(2, 5, 0x20, u=False, v=False)            line: 539 Sub_imm(R2, word_counter, 32)
                0x003dc EQ_imm(0xfffff2)                                 line: 540 EQ_imm(_word_key)  # try again.
                0x003e0 Store_byte(0, 6)                                 line: 543 Store_byte(R0, word_pointer)
                0x003e4 Add_imm(6, 6, 0x1, u=False, v=False)             line: 544 Add_imm(word_pointer, word_pointer, 1)
                0x003e8 Add_imm(5, 5, 0x1, u=False, v=False)             line: 545 Add_imm(word_counter, word_counter, 1)
                0x003ec Mov_imm(1, 0x318, u=False, v=False)              line: 235     Mov_imm(R1, _KEY) -- (in busywait_on_serial_ready)
                0x003f0 T_link(1)                                        line: 236     T_link(R1) -- (in busywait_on_serial_ready)
                0x003f4 Load_word(0, 1, offset=0xffffc)                  line: 549 Load_word(R0, R1, negative_offset_20(-4))  # serial port is 4 bytes lower.
                0x003f8 Mov_imm(1, 0x32c, u=False, v=False)              line: 552 Mov_imm(R1, _blank)
                0x003fc T_link(1)                                        line: 553 T_link(R1)
                0x00400 NE_imm(0xfffff5)                                 line: 554 NE_imm(_find_length)  # No, keep getting chars to the buffer
                0x00404 Mov_imm(6, 0x37c, u=False, v=False)              line: 557 Mov_imm(word_pointer, WORD_BUFFER)
                0x00408 Store_byte(5, 6)                                 line: 558 Store_byte(word_counter, word_pointer)
                0x0040c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00410 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00414 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00418 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      FIND_dfa: 0x0041c 0x0000039c                                       line: 172     dw(LINK) -- (in def_)
                0x00420 0x4e494604                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          FIND: 0x00424 0x00000428                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00428 Mov_imm(6, 0x37c, u=False, v=False)              line: 571 Mov_imm(word_pointer, WORD_BUFFER)
                0x0042c Load_word(5, 6)                                  line: 573 Load_word(word_counter, word_pointer)
                0x00430 Mov_imm(2, 0xffff, u=True, v=False)              line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x00434 Ior_imm(2, 2, 0xff7f, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00438 Mov_imm(0, 0x5a0, u=False, v=False)              line: 578 Mov_imm(R0, LATEST_var)
                0x0043c Load_word(0, 0)                                  line: 579 Load_word(R0, R0)          # Point R0 to latest word's LFA.
       _FIND_1: 0x00440 Load_word(1, 0, offset=0x4)                      line: 581 Load_word(R1, R0, 4)       # load a word of the name field.
                0x00444 And(1, 1, 2, u=False)                            line: 582 And(R1, R1, R2)            # Clear the IMMEDIATE flag, if any.
                0x00448 Sub(1, 1, 5, u=False)                            line: 583 Sub(R1, R1, word_counter)  # Compare.
                0x0044c EQ_imm(0x2)                                      line: 584 EQ_imm(_found)             # If this is the word...
                0x00450 Load_word(0, 0)                                  line: 590 Load_word(R0, R0)  # Load the address of the next link field into R0
                0x00454 NE_imm(0xfffffa)                                 line: 591 NE_imm(_FIND_1)  # Check the next word.
        _found: 0x00458 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0045c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00460 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00464 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00468 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0046c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    NUMBER_dfa: 0x00470 0x0000041c                                       line: 172     dw(LINK) -- (in def_)
                0x00474 0x4d554e06                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        NUMBER: 0x00478 0x0000047c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0047c Mov_imm(6, 0x37c, u=False, v=False)              line: 630 Mov_imm(word_pointer, WORD_BUFFER)
                0x00480 Load_byte(5, 6)                                  line: 631 Load_byte(word_counter, word_pointer)
                0x00484 Mov_imm(2, 0x0, u=False, v=False)                line: 632 Mov_imm(R2, 0)  # use R2 as the accumulator for the number's value
                0x00488 Add_imm(6, 6, 0x1, u=False, v=False)             line: 634 Add_imm(word_pointer, word_pointer, 1)  # Point to first char.
                0x0048c Load_byte(0, 6)                                  line: 635 Load_byte(R0, word_pointer)  # Load it.
                0x00490 Sub_imm(0, 0, 0x24, u=False, v=False)            line: 636 Sub_imm(R0, R0, ord('$'))  # Is it a '$'?
                0x00494 NE_imm(0xf)                                      line: 637 NE_imm(_NUM_fin)
                0x00498 Sub_imm(5, 5, 0x1, u=False, v=False)             line: 640 Sub_imm(word_counter, word_counter, 1)  # we have parsed one '$' char.
      _NUM_hex: 0x0049c Add_imm(6, 6, 0x1, u=False, v=False)             line: 643 Add_imm(word_pointer, word_pointer, 1)  # Point to next char.
                0x004a0 Load_byte(0, 6)                                  line: 644 Load_byte(R0, word_pointer)  # Load it.
                0x004a4 Sub_imm(0, 0, 0x30, u=False, v=False)            line: 646 Sub_imm(R0, R0, ord('0'))
                0x004a8 LT_imm(0xa)                                      line: 647 LT_imm(_NUM_fin)  # Is its ASCII value lower than '0'?
                0x004ac Sub_imm(1, 0, 0x9, u=False, v=False)             line: 649 Sub_imm(R1, R0, 9)  # Is it 0-9?
                0x004b0 LE_imm(0x5)                                      line: 650 LE_imm(_NUM_add)  # It is!
                0x004b4 Sub_imm(0, 0, 0x31, u=False, v=False)            line: 656 Sub_imm(R0, R0, 49)  # so now '1'..'6' -> 0..5
                0x004b8 LT_imm(0x6)                                      line: 657 LT_imm(_NUM_fin)  # Its ASCII value is less than 'a', nope out.
                0x004bc Sub_imm(1, 0, 0x5, u=False, v=False)             line: 660 Sub_imm(R1, R0, 5)  # Is it a-f?
                0x004c0 GT_imm(0x4)                                      line: 661 GT_imm(_NUM_fin)  # nope, nope out
                0x004c4 Add_imm(0, 0, 0xa, u=False, v=False)             line: 663 Add_imm(R0, R0, 10)  # 0..5 -> 10..15
      _NUM_add: 0x004c8 Add(2, 2, 0, u=False)                            line: 666 Add( R2, R2, R0)  # Add it to the accumulator.
                0x004cc Sub_imm(5, 5, 0x1, u=False, v=False)             line: 668 Sub_imm(word_counter, word_counter, 1)  # we have parsed a digit char.
                0x004d0 NE_imm(0x8)                                      line: 669 NE_imm(_NUM_foo)  # More digits? Keep going.
      _NUM_fin: 0x004d4 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x004d8 Store_word(2, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x004dc Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x004e0 Store_word(5, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x004e4 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x004e8 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x004ec Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x004f0 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
      _NUM_foo: 0x004f4 Lsl_imm(2, 2, 0x4, u=False, v=False)             line: 678 Lsl_imm(R2, R2, 4)  # accumulator *= 16
                0x004f8 T_imm(0xffffe8)                                  line: 679 T_imm(_NUM_hex)  # Go get the next digit.
    CREATE_dfa: 0x004fc 0x00000470                                       line: 172     dw(LINK) -- (in def_)
                0x00500 0x45524306                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        CREATE: 0x00504 0x00000508                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00508 Mov_imm(0, 0x574, u=False, v=False)              line: 690 Mov_imm(R0, HERE__var)  # R0 <- &HERE
                0x0050c Load_word(0, 0)                                  line: 691 Load_word(R0, R0)       # R0 <- ram[HERE]
                0x00510 Mov_imm(1, 0x5a0, u=False, v=False)              line: 693 Mov_imm(R1, LATEST_var)  # R1 <- &LATEST
                0x00514 Load_word(2, 1)                                  line: 694 Load_word(R2, R1)        # R2 <- ram[LATEST]
                0x00518 Store_word(2, 0)                                 line: 696 Store_word(R2, R0)  # value of LATEST -> ram[HERE]
                0x0051c Store_word(0, 1)                                 line: 697 Store_word(R0, R1)  # value of HERE (now LFA for new word) -> ram[LATEST]
                0x00520 Add_imm(0, 0, 0x4, u=False, v=False)             line: 699 Add_imm(R0, R0, 4)  # HERE += 4
                0x00524 Mov_imm(6, 0x37c, u=False, v=False)              line: 702 Mov_imm(word_pointer, WORD_BUFFER)
                0x00528 Load_word(1, 6)                                  line: 712 Load_word(R1, word_pointer)  # Get the word from WORD_BUFFER.
                0x0052c Store_word(1, 0)                                 line: 713 Store_word(R1, R0)  # Store word to HERE.
                0x00530 Add_imm(0, 0, 0x4, u=False, v=False)             line: 714 Add_imm(R0, R0, 4)  # HERE += 4
                0x00534 Mov_imm(1, 0x574, u=False, v=False)              line: 725 Mov_imm(R1, HERE__var)  # R1 <- &HERE
                0x00538 Store_word(0, 1)                                 line: 726 Store_word(R0, R1)      # value of HERE -> ram[HERE]
                0x0053c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00540 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00544 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00548 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     HERE__dfa: 0x0054c 0x000004fc                                       line: 172     dw(LINK) -- (in def_)
                0x00550 0x52454804                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         HERE_: 0x00554 0x00000558                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00558 Mov_imm(0, 0x574, u=False, v=False)              line: 212     Mov_imm(R0, LABEL_var) -- (in defvar)
                0x0055c Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00560 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00564 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00568 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x0056c Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00570 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     HERE__var: 0x00574 0x00000a50                                       line: 219     dw(initial) -- (in defvar)
    LATEST_dfa: 0x00578 0x0000054c                                       line: 172     dw(LINK) -- (in def_)
                0x0057c 0x54414c06                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        LATEST: 0x00580 0x00000584                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00584 Mov_imm(0, 0x5a0, u=False, v=False)              line: 212     Mov_imm(R0, LABEL_var) -- (in defvar)
                0x00588 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x0058c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00590 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00594 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00598 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0059c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    LATEST_var: 0x005a0 0x00000a1c                                       line: 219     dw(initial) -- (in defvar)
     STATE_dfa: 0x005a4 0x00000578                                       line: 172     dw(LINK) -- (in def_)
                0x005a8 0x41545305                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         STATE: 0x005ac 0x000005b0                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x005b0 Mov_imm(0, 0x5cc, u=False, v=False)              line: 212     Mov_imm(R0, LABEL_var) -- (in defvar)
                0x005b4 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x005b8 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x005bc Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x005c0 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x005c4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x005c8 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     STATE_var: 0x005cc 0x00000000                                       line: 219     dw(initial) -- (in defvar)
   __DOCOL_dfa: 0x005d0 0x000005a4                                       line: 172     dw(LINK) -- (in def_)
                0x005d4 0x434f4405                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
       __DOCOL: 0x005d8 0x000005dc                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x005dc Mov_imm(0, 0x0, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x005e0 Ior_imm(0, 0, 0x28, u=False, v=False)            line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x005e4 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x005e8 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x005ec Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x005f0 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x005f4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x005f8 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     COMMA_dfa: 0x005fc 0x000005d0                                       line: 172     dw(LINK) -- (in def_)
                0x00600 0x00002c01                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         COMMA: 0x00604 0x00000608                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00608 Load_word(2, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x0060c Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00610 Mov_imm(1, 0x628, u=False, v=False)              line: 753 Mov_imm(R1, _COMMA)
                0x00614 T_link(1)                                        line: 754 T_link(R1)
                0x00618 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0061c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00620 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00624 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
        _COMMA: 0x00628 Mov_imm(0, 0x574, u=False, v=False)              line: 763 Mov_imm(R0, HERE__var)  # R0 <- HERE__var
                0x0062c Load_word(1, 0)                                  line: 764 Load_word(R1, R0)       # HERE <- ram[HERE__var]
                0x00630 Store_word(2, 1)                                 line: 765 Store_word(R2, R1)      # R2 -> ram[HERE]
                0x00634 Add_imm(1, 1, 0x4, u=False, v=False)             line: 766 Add_imm(R1, R1, 4)      # HERE += 4
                0x00638 Store_word(1, 0)                                 line: 767 Store_word(R1, R0)      # HERE -> ram[HERE__var]
                0x0063c T(15)                                            line: 768 T(15)  # return
     LBRAC_dfa: 0x00640 0x000005fc                                       line: 172     dw(LINK) -- (in def_)
                0x00644 0x00005b81                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         LBRAC: 0x00648 0x0000064c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0064c Mov_imm(0, 0x5cc, u=False, v=False)              line: 782 Mov_imm(R0, STATE_var)
                0x00650 Mov_imm(1, 0x0, u=False, v=False)                line: 783 Mov_imm(R1, 0)
                0x00654 Store_word(1, 0)                                 line: 784 Store_word(R1, R0)
                0x00658 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0065c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00660 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00664 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     RBRAC_dfa: 0x00668 0x00000640                                       line: 172     dw(LINK) -- (in def_)
                0x0066c 0x00005d01                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         RBRAC: 0x00670 0x00000674                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00674 Mov_imm(0, 0x5cc, u=False, v=False)              line: 788 Mov_imm(R0, STATE_var)
                0x00678 Mov_imm(1, 0x1, u=False, v=False)                line: 789 Mov_imm(R1, 1)
                0x0067c Store_word(1, 0)                                 line: 790 Store_word(R1, R0)
                0x00680 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00684 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00688 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0068c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     COLON_dfa: 0x00690 0x00000668                                       line: 172     dw(LINK) -- (in def_)
                0x00694 0x00003a01                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         COLON: 0x00698 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x0069c 0x000003a4                                       line: 813 dw(WORD)  # "Get the name of the new word"
                0x006a0 0x00000504                                       line: 814 dw(CREATE)  # "CREATE the dictionary entry / header"
                0x006a4 0x000000c8                                       line: 815 dw(LIT)  # "Append DOCOL  (the codeword)."
                0x006a8 0x00000028                                       line: 816 dw(DOCOL)
                0x006ac 0x00000604                                       line: 817 dw(COMMA)
                0x006b0 0x00000580                                       line: 818 dw(LATEST)  # "Make the word hidden (see below for definition)."
                0x006b4 0x000007e0                                       line: 819 dw(FETCH)
                0x006b8 0x0000072c                                       line: 820 dw(HIDDEN)
                0x006bc 0x00000670                                       line: 821 dw(RBRAC)  # "Go into compile mode."
                0x006c0 0x000000a4                                       line: 822 dw(EXIT)  # "Return from the function."
 SEMICOLON_dfa: 0x006c4 0x00000690                                       line: 172     dw(LINK) -- (in def_)
                0x006c8 0x00003b81                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     SEMICOLON: 0x006cc 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x006d0 0x000000c8                                       line: 831 dw(LIT)  # "Append EXIT (so the word will return)."
                0x006d4 0x000000a4                                       line: 832 dw(EXIT)
                0x006d8 0x00000604                                       line: 833 dw(COMMA)
                0x006dc 0x00000580                                       line: 834 dw(LATEST)  # "Toggle hidden flag -- unhide the word (see below for definition)."
                0x006e0 0x000007e0                                       line: 835 dw(FETCH)
                0x006e4 0x0000072c                                       line: 836 dw(HIDDEN)
                0x006e8 0x00000648                                       line: 837 dw(LBRAC)  # "Go back to IMMEDIATE mode."
                0x006ec 0x000000a4                                       line: 838 dw(EXIT)  # "Return from the function."
 IMMEDIATE_dfa: 0x006f0 0x000006c4                                       line: 172     dw(LINK) -- (in def_)
                0x006f4 0x4d4d4989                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     IMMEDIATE: 0x006f8 0x000006fc                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x006fc Mov_imm(0, 0x5a0, u=False, v=False)              line: 847 Mov_imm(R0, LATEST_var)  # R0 <- &LATEST
                0x00700 Load_word(1, 0)                                  line: 848 Load_word(R1, R0)        # R1 <- ram[LATEST]
                0x00704 Add_imm(1, 1, 0x4, u=False, v=False)             line: 849 Add_imm(R1, R1, 4)       # "Point to name/flags byte."
                0x00708 Load_word(0, 1)                                  line: 850 Load_word(R0, R1)
                0x0070c Xor_imm(0, 0, 0x80, u=False, v=False)            line: 851 Xor_imm(R0, R0, F_IMMED) # Toggle IMMEDIATE bit.
                0x00710 Store_word(0, 1)                                 line: 852 Store_word(R0, R1)
                0x00714 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00718 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x0071c Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00720 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    HIDDEN_dfa: 0x00724 0x000006f0                                       line: 172     dw(LINK) -- (in def_)
                0x00728 0x44494806                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        HIDDEN: 0x0072c 0x00000730                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00730 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00734 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00738 Add_imm(1, 1, 0x4, u=False, v=False)             line: 863 Add_imm(R1, R1, 4)  # "Point to name/flags byte."
                0x0073c Load_word(0, 1)                                  line: 864 Load_word(R0, R1)
                0x00740 Xor_imm(0, 0, 0x20, u=False, v=False)            line: 865 Xor_imm(R0, R0, F_HIDDEN)  # "Toggle the HIDDEN bit."
                0x00744 Store_word(0, 1)                                 line: 866 Store_word(R0, R1)
                0x00748 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0074c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00750 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00754 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
   ZBRANCH_dfa: 0x00758 0x00000734                                       line: 172     dw(LINK) -- (in def_)
                0x0075c 0x52423007                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
       ZBRANCH: 0x00760 0x00000764                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00764 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00768 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x0076c Add_imm(0, 0, 0x0, u=False, v=False)             line: 895 Add_imm(R0, R0, 0)  # Set condition flags.
                0x00770 EQ_imm(0xfffff3)                                 line: 896 EQ_imm(BRANCH + 4)  # Zero? Delegate to BRANCH.
                0x00774 Add_imm(14, 14, 0x4, u=False, v=False)           line: 897 Add_imm(IP, IP, 4)  # Non-zero? Skip offset.
                0x00778 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0077c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00780 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00784 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     FETCH_dfa: 0x00788 0x00000758                                       line: 172     dw(LINK) -- (in def_)
                0x0078c 0x00004001                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         FETCH: 0x00790 0x00000794                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00794 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00798 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x0079c Load_word(0, 0)                                  line: 908 Load_word(R0, R0)
                0x007a0 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x007a4 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x007a8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x007ac Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x007b0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x007b4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     STORE_dfa: 0x007b8 0x00000788                                       line: 172     dw(LINK) -- (in def_)
                0x007bc 0x00002101                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         STORE: 0x007c0 0x000007c4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x007c4 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x007c8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x007cc Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x007d0 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x007d4 Store_word(1, 0)                                 line: 921 Store_word(R1, R0)
                0x007d8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x007dc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x007e0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x007e4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
 IS_NUMBER_dfa: 0x007e8 0x000007b8                                       line: 172     dw(LINK) -- (in def_)
                0x007ec 0x003f2302                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     IS_NUMBER: 0x007f0 0x000007f4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x007f4 Mov_imm(6, 0x32c, u=False, v=False)              line: 937 Mov_imm(word_pointer, WORD_BUFFER)
                0x007f8 Load_byte(0, 6, offset=0x1)                      line: 938 Load_byte(R0, word_pointer, 1)  # Load first char of word.
                0x007fc Sub_imm(0, 0, 0x24, u=False, v=False)            line: 939 Sub_imm(R0, R0, ord('$'))  # Is it a '$'?
                0x00800 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00804 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00808 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0080c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00810 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00814 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
 INTERPRET_dfa: 0x00818 0x000007e8                                       line: 172     dw(LINK) -- (in def_)
                0x0081c 0x544e4909                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     INTERPRET: 0x00820 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x00824 0x00000354                                       line: 950 dw(WORD)
                0x00828 0x000007f0                                       line: 951 dw(IS_NUMBER)
                0x0082c 0x00000760                                       line: 952 dw(ZBRANCH)
                0x00830 0x0000001c                                       line: 953 dw(s_to_u_32(4 * 7))  # It could be a number...
                0x00834 0x000003d4                                       line: 956 dw(FIND)
                0x00838 0x000009d4                                       line: 957 dw(DUP)
                0x0083c 0x00000760                                       line: 958 dw(ZBRANCH)  # Zero means it wasn't in the dictionary,
                0x00840 0x0000001c                                       line: 959 dw(s_to_u_32(4 * 7))
                0x00844 0x00000890                                       line: 962 dw(_INTERP)
                0x00848 0x000000a4                                       line: 963 dw(EXIT)
                0x0084c 0x00000428                                       line: 966 dw(NUMBER)
                0x00850 0x000009d4                                       line: 967 dw(DUP)
                0x00854 0x00000760                                       line: 968 dw(ZBRANCH)  # No chars left?  It is a number!
                0x00858 0x00000008                                       line: 969 dw(s_to_u_32(4 * 2))
                0x0085c 0x000000a4                                       line: 973 dw(EXIT)
                0x00860 0x00000084                                       line: 976 dw(DROP)
                0x00864 0x0000055c                                       line: 980 dw(STATE)
                0x00868 0x00000790                                       line: 981 dw(FETCH)
                0x0086c 0x00000760                                       line: 982 dw(ZBRANCH)  #  STATE = 0 -> interpreting.
                0x00870 0x00000014                                       line: 984 dw(s_to_u_32(4 * 5))  # to EXIT
                0x00874 0x000000c8                                       line: 987 dw(LIT)
                0x00878 0x000000c8                                       line: 988 dw(LIT)
                0x0087c 0x000005b4                                       line: 989 dw(COMMA)  # write the address of the codeword of LIT
                0x00880 0x000005b4                                       line: 990 dw(COMMA)  # then the value itself.
                0x00884 0x000000a4                                       line: 992 dw(EXIT)
   _INTERP_dfa: 0x00888 0x00000818                                       line: 172     dw(LINK) -- (in def_)
                0x0088c 0x4e495f27                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
       _INTERP: 0x00890 0x00000894                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00894 Load_word(2, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00898 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x0089c Mov_imm(0, 0x57c, u=False, v=False)              line: 1005 Mov_imm(R0, STATE_var)  # R0 <- &STATE
                0x008a0 Load_word(0, 0)                                  line: 1006 Load_word(R0, R0)  # R0 <- ram[STATE]
                0x008a4 EQ_imm(0xa)                                      line: 1007 EQ_imm(_intrp_exe)  # STATE = 0 -> interpreting.
                0x008a8 Load_word(0, 2, offset=0x4)                      line: 1008 Load_word(R0, R2, 4)  # R0 <- Name field
                0x008ac And_imm(0, 0, 0x80, u=False, v=False)            line: 1009 And_imm(R0, R0, F_IMMED)
                0x008b0 NE_imm(0x7)                                      line: 1010 NE_imm(_intrp_exe)  # word is IMMEDIATE.
                0x008b4 Add_imm(2, 2, 0x8, u=False, v=False)             line: 1013 Add_imm(R2, R2, 8)  # Point from LFA to codeword.
                0x008b8 Mov_imm(1, 0x5d8, u=False, v=False)              line: 1014 Mov_imm(R1, _COMMA)  # Call comma to store it and increment HERE.
                0x008bc T_link(1)                                        line: 1015 T_link(R1)
                0x008c0 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x008c4 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x008c8 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x008cc T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    _intrp_exe: 0x008d0 Add_imm(2, 2, 0x8, u=False, v=False)             line: 1019 Add_imm(R2, R2, 8)  # Point to the codeword
                0x008d4 Load_word(0, 2)                                  line: 1020 Load_word(R0, R2)  # Get the address to which its codeword points...
                0x008d8 Mov(3, 2, u=False)                               line: 1021 Mov(next_function, R2)  # DOCOL depends on this.
                0x008dc T(0)                                             line: 1022 T(R0)  # and jump to it.
       PAI_dfa: 0x008e0 0x00000888                                       line: 172     dw(LINK) -- (in def_)
                0x008e4 0x69617003                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           PAI: 0x008e8 0x000008ec                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x008ec Mov_imm(0, 0xe, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x008f0 Ior_imm(0, 0, 0x7f00, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x008f4 Mov_imm(1, 0x1, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x008f8 Ior_imm(1, 1, 0x8000, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x008fc Mov_imm(8, 0xffff, u=True, v=False)              line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x00900 Ior_imm(8, 8, 0xffff, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00904 Add(1, 1, 0, u=False)                            line: 1048 Add(R1, R1, R0)
                0x00908 Sub_imm(0, 0, 0x4e0, u=False, v=False)           line: 1049 Sub_imm(R0, R0, 312 * 4)  # 312 words in font data.
                0x0090c Mov_imm(2, 0x138, u=False, v=False)              line: 1050 Mov_imm(R2, 13 * 24)
     _pai_loop: 0x00910 Load_word(7, 0)                                  line: 1053 Load_word(R7, R0)
                0x00914 Xor(7, 7, 8, u=False)                            line: 1054 Xor(R7, R7, R8)  #  Reverse video.
                0x00918 Store_word(7, 1)                                 line: 1055 Store_word(R7, R1)
                0x0091c Add_imm(0, 0, 0x4, u=False, v=False)             line: 1056 Add_imm(R0, R0, 4)
                0x00920 Sub_imm(1, 1, 0x80, u=False, v=False)            line: 1057 Sub_imm(R1, R1, 128)
                0x00924 Sub_imm(2, 2, 0x1, u=False, v=False)             line: 1058 Sub_imm(R2, R2, 1)
                0x00928 NE_imm(0xfffff9)                                 line: 1059 NE_imm(_pai_loop)
                0x0092c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00930 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00934 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00938 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
PAINT_CHAR_dfa: 0x0093c 0x000008e0                                       line: 172     dw(LINK) -- (in def_)
                0x00940 0x6961700a                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
    PAINT_CHAR: 0x00944 0x00000948                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00948 Mov_imm(0, 0xe, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x0094c Ior_imm(0, 0, 0x7a20, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00950 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00954 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00958 Sub_imm(1, 1, 0x21, u=False, v=False)            line: 1091 Sub_imm(R1, R1, ord('!'))  # R1 counts byte offset of char.
                0x0095c Asr_imm(2, 1, 0x2, u=False, v=False)             line: 1093 Asr_imm(R2, R1, 2)     # R2 = R1 / 4  Trim the two least bits.
                0x00960 Mul_imm(2, 2, 0x34, u=False, v=False)            line: 1094 Mul_imm(R2, R2, 52)    # R2 *= 13 words/char * 4 bytes/word.
                0x00964 Add(0, 0, 2, u=False)                            line: 1095 Add(R0, R0, R2)        # Point R0 to char's first word in font.
                0x00968 And_imm(1, 1, 0x3, u=False, v=False)             line: 1096 And_imm(R1, R1, 0b11)  # Which byte in the word?
                0x0096c Add(0, 0, 1, u=False)                            line: 1097 Add(R0, R0, R1)        # Point R0 to char's first byte in font.
                0x00970 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00974 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00978 Mov_imm(2, 0xe, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x0097c Ior_imm(2, 2, 0x7f00, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00980 Add(1, 1, 2, u=False)                            line: 1101 Add(R1, R1, R2)     # R1 = x + DISPLAY_START
                0x00984 Mov_imm(7, 0x2ff, u=False, v=False)              line: 1102 Mov_imm(R7, 767)    # Display width - 1 in pixels. (TODO don't hardcod3 this.)
                0x00988 Load_word(2, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x0098c Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00990 Mul_imm(2, 2, 0xd, u=False, v=False)             line: 1104 Mul_imm(R2, R2, 13) # R2 = y in px  (13px/char height)
                0x00994 Sub(2, 7, 2, u=False)                            line: 1105 Sub(R2, R7, R2)     # R2 = 768 - 1 - y
                0x00998 Lsl_imm(2, 2, 0x7, u=False, v=False)             line: 1106 Lsl_imm(R2, R2, 7)  # R2 = (768 - 1 - y) * 128 bytes per line.
                0x0099c Add(1, 1, 2, u=False)                            line: 1107 Add(R1, R1, R2)     # R1 = (768 - 1 - y) * 128 + x + DISPLAY_START
                0x009a0 Mov_imm(2, 0xd, u=False, v=False)                line: 1113 Mov_imm(R2, 13)  # Counter
    _pchr_loop: 0x009a4 Load_byte(7, 0)                                  line: 1116 Load_byte(R7, R0)
                0x009a8 Store_byte(7, 1)                                 line: 1118 Store_byte(R7, R1)
                0x009ac Add_imm(0, 0, 0x4, u=False, v=False)             line: 1119 Add_imm(R0, R0, 4)
                0x009b0 Sub_imm(1, 1, 0x80, u=False, v=False)            line: 1120 Sub_imm(R1, R1, 128)
                0x009b4 Sub_imm(2, 2, 0x1, u=False, v=False)             line: 1121 Sub_imm(R2, R2, 1)
                0x009b8 NE_imm(0xfffffa)                                 line: 1122 NE_imm(_pchr_loop)
                0x009bc Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x009c0 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x009c4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x009c8 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
       DUP_dfa: 0x009cc 0x0000093c                                       line: 172     dw(LINK) -- (in def_)
                0x009d0 0x50554403                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           DUP: 0x009d4 0x000009d8                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x009d8 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
      TICK_dfa: 0x00758 0x00000724                                       line: 172     dw(LINK) -- (in def_)
                0x0075c 0x00002701                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
          TICK: 0x00760 0x00000764                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00764 Load_word(0, 14)                                 line: 885 Load_word(R0, IP)   # Get the address of the next codeword.
                0x00768 Add_imm(14, 14, 0x4, u=False, v=False)           line: 886 Add_imm(IP, IP, 4)  # Skip it.
                0x0076c Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00770 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00774 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00778 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x0077c Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00780 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    BRANCH_dfa: 0x00784 0x00000758                                       line: 172     dw(LINK) -- (in def_)
                0x00788 0x41524206                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
        BRANCH: 0x0078c 0x00000790                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00790 Load_word(0, 14)                                 line: 897 Load_word(R0, IP)  # Get the offset.
                0x00794 Add(14, 14, 0, u=False)                          line: 899 Add(IP, IP, R0)    # IP += offset
                0x00798 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0079c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x007a0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x007a4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
   ZBRANCH_dfa: 0x007a8 0x00000784                                       line: 172     dw(LINK) -- (in def_)
                0x007ac 0x52423007                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
       ZBRANCH: 0x007b0 0x000007b4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x007b4 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x007b8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x007bc Add_imm(0, 0, 0x0, u=False, v=False)             line: 910 Add_imm(R0, R0, 0)  # Set condition flags.
                0x007c0 EQ_imm(0xfffff3)                                 line: 911 EQ_imm(BRANCH + 4)  # Zero? Delegate to BRANCH.
                0x007c4 Add_imm(14, 14, 0x4, u=False, v=False)           line: 912 Add_imm(IP, IP, 4)  # Non-zero? Skip offset.
                0x007c8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x007cc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x007d0 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x007d4 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     FETCH_dfa: 0x007d8 0x000007a8                                       line: 172     dw(LINK) -- (in def_)
                0x007dc 0x00004001                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         FETCH: 0x007e0 0x000007e4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x007e4 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x007e8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x007ec Load_word(0, 0)                                  line: 923 Load_word(R0, R0)
                0x007f0 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x007f4 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x007f8 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x007fc Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00800 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00804 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
     STORE_dfa: 0x00808 0x000007d8                                       line: 172     dw(LINK) -- (in def_)
                0x0080c 0x00002101                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
         STORE: 0x00810 0x00000814                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00814 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00818 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x0081c Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00820 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00824 Store_word(1, 0)                                 line: 936 Store_word(R1, R0)
                0x00828 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0082c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00830 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00834 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
 IS_NUMBER_dfa: 0x00838 0x00000808                                       line: 172     dw(LINK) -- (in def_)
                0x0083c 0x003f2302                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     IS_NUMBER: 0x00840 0x00000844                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00844 Mov_imm(6, 0x37c, u=False, v=False)              line: 952 Mov_imm(word_pointer, WORD_BUFFER)
                0x00848 Load_byte(0, 6, offset=0x1)                      line: 953 Load_byte(R0, word_pointer, 1)  # Load first char of word.
                0x0084c Sub_imm(0, 0, 0x24, u=False, v=False)            line: 954 Sub_imm(R0, R0, ord('$'))  # Is it a '$'?
                0x00850 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00854 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00858 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x0085c Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00860 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00864 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
 INTERPRET_dfa: 0x00868 0x00000838                                       line: 172     dw(LINK) -- (in def_)
                0x0086c 0x544e4909                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
     INTERPRET: 0x00870 0x00000028                                       line: 194     dw(DOCOL)  # codeword points to DOCOL colon word mini-interpreter. -- (in defword)
                0x00874 0x000003a4                                       line: 965 dw(WORD)
                0x00878 0x00000840                                       line: 966 dw(IS_NUMBER)
                0x0087c 0x000007b0                                       line: 967 dw(ZBRANCH)
                0x00880 0x0000001c                                       line: 968 dw(s_to_u_32(4 * 7))  # It could be a number...
                0x00884 0x00000424                                       line: 971 dw(FIND)
                0x00888 0x00000a24                                       line: 972 dw(DUP)
                0x0088c 0x000007b0                                       line: 973 dw(ZBRANCH)  # Zero means it wasn't in the dictionary,
                0x00890 0x0000001c                                       line: 974 dw(s_to_u_32(4 * 7))
                0x00894 0x000008e0                                       line: 977 dw(_INTERP)
                0x00898 0x000000a4                                       line: 978 dw(EXIT)
                0x0089c 0x00000478                                       line: 981 dw(NUMBER)
                0x008a0 0x00000a24                                       line: 982 dw(DUP)
                0x008a4 0x000007b0                                       line: 983 dw(ZBRANCH)  # No chars left?  It is a number!
                0x008a8 0x00000008                                       line: 984 dw(s_to_u_32(4 * 2))
                0x008ac 0x000000a4                                       line: 988 dw(EXIT)
                0x008b0 0x00000084                                       line: 991 dw(DROP)
                0x008b4 0x000005ac                                       line: 995 dw(STATE)
                0x008b8 0x000007e0                                       line: 996 dw(FETCH)
                0x008bc 0x000007b0                                       line: 997 dw(ZBRANCH)  #  STATE = 0 -> interpreting.
                0x008c0 0x00000014                                       line: 999 dw(s_to_u_32(4 * 5))  # to EXIT
                0x008c4 0x000000c8                                       line: 1002 dw(LIT)
                0x008c8 0x000000c8                                       line: 1003 dw(LIT)
                0x008cc 0x00000604                                       line: 1004 dw(COMMA)  # write the address of the codeword of LIT
                0x008d0 0x00000604                                       line: 1005 dw(COMMA)  # then the value itself.
                0x008d4 0x000000a4                                       line: 1007 dw(EXIT)
   _INTERP_dfa: 0x008d8 0x00000868                                       line: 172     dw(LINK) -- (in def_)
                0x008dc 0x4e495f27                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
       _INTERP: 0x008e0 0x000008e4                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x008e4 Load_word(2, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x008e8 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x008ec Mov_imm(0, 0x5cc, u=False, v=False)              line: 1020 Mov_imm(R0, STATE_var)  # R0 <- &STATE
                0x008f0 Load_word(0, 0)                                  line: 1021 Load_word(R0, R0)  # R0 <- ram[STATE]
                0x008f4 EQ_imm(0xa)                                      line: 1022 EQ_imm(_intrp_exe)  # STATE = 0 -> interpreting.
                0x008f8 Load_word(0, 2, offset=0x4)                      line: 1023 Load_word(R0, R2, 4)  # R0 <- Name field
                0x008fc And_imm(0, 0, 0x80, u=False, v=False)            line: 1024 And_imm(R0, R0, F_IMMED)
                0x00900 NE_imm(0x7)                                      line: 1025 NE_imm(_intrp_exe)  # word is IMMEDIATE.
                0x00904 Add_imm(2, 2, 0x8, u=False, v=False)             line: 1028 Add_imm(R2, R2, 8)  # Point from LFA to codeword.
                0x00908 Mov_imm(1, 0x628, u=False, v=False)              line: 1029 Mov_imm(R1, _COMMA)  # Call comma to store it and increment HERE.
                0x0090c T_link(1)                                        line: 1030 T_link(R1)
                0x00910 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00914 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00918 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x0091c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
    _intrp_exe: 0x00920 Add_imm(2, 2, 0x8, u=False, v=False)             line: 1034 Add_imm(R2, R2, 8)  # Point to the codeword
                0x00924 Load_word(0, 2)                                  line: 1035 Load_word(R0, R2)  # Get the address to which its codeword points...
                0x00928 Mov(3, 2, u=False)                               line: 1036 Mov(next_function, R2)  # DOCOL depends on this.
                0x0092c T(0)                                             line: 1037 T(R0)  # and jump to it.
       PAI_dfa: 0x00930 0x000008d8                                       line: 172     dw(LINK) -- (in def_)
                0x00934 0x69617003                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           PAI: 0x00938 0x0000093c                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x0093c Mov_imm(0, 0xe, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x00940 Ior_imm(0, 0, 0x7f00, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00944 Mov_imm(1, 0x1, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x00948 Ior_imm(1, 1, 0x8000, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x0094c Mov_imm(8, 0xffff, u=True, v=False)              line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x00950 Ior_imm(8, 8, 0xffff, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x00954 Add(1, 1, 0, u=False)                            line: 1063 Add(R1, R1, R0)
                0x00958 Sub_imm(0, 0, 0x4e0, u=False, v=False)           line: 1064 Sub_imm(R0, R0, 312 * 4)  # 312 words in font data.
                0x0095c Mov_imm(2, 0x138, u=False, v=False)              line: 1065 Mov_imm(R2, 13 * 24)
     _pai_loop: 0x00960 Load_word(7, 0)                                  line: 1068 Load_word(R7, R0)
                0x00964 Xor(7, 7, 8, u=False)                            line: 1069 Xor(R7, R7, R8)  #  Reverse video.
                0x00968 Store_word(7, 1)                                 line: 1070 Store_word(R7, R1)
                0x0096c Add_imm(0, 0, 0x4, u=False, v=False)             line: 1071 Add_imm(R0, R0, 4)
                0x00970 Sub_imm(1, 1, 0x80, u=False, v=False)            line: 1072 Sub_imm(R1, R1, 128)
                0x00974 Sub_imm(2, 2, 0x1, u=False, v=False)             line: 1073 Sub_imm(R2, R2, 1)
                0x00978 NE_imm(0xfffff9)                                 line: 1074 NE_imm(_pai_loop)
                0x0097c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00980 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00984 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00988 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
PAINT_CHAR_dfa: 0x0098c 0x00000930                                       line: 172     dw(LINK) -- (in def_)
                0x00990 0x6961700a                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
    PAINT_CHAR: 0x00994 0x00000998                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00998 Mov_imm(0, 0xe, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x0099c Ior_imm(0, 0, 0x7a20, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x009a0 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x009a4 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x009a8 Sub_imm(1, 1, 0x21, u=False, v=False)            line: 1106 Sub_imm(R1, R1, ord('!'))  # R1 counts byte offset of char.
                0x009ac Asr_imm(2, 1, 0x2, u=False, v=False)             line: 1108 Asr_imm(R2, R1, 2)     # R2 = R1 / 4  Trim the two least bits.
                0x009b0 Mul_imm(2, 2, 0x34, u=False, v=False)            line: 1109 Mul_imm(R2, R2, 52)    # R2 *= 13 words/char * 4 bytes/word.
                0x009b4 Add(0, 0, 2, u=False)                            line: 1110 Add(R0, R0, R2)        # Point R0 to char's first word in font.
                0x009b8 And_imm(1, 1, 0x3, u=False, v=False)             line: 1111 And_imm(R1, R1, 0b11)  # Which byte in the word?
                0x009bc Add(0, 0, 1, u=False)                            line: 1112 Add(R0, R0, R1)        # Point R0 to char's first byte in font.
                0x009c0 Load_word(1, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x009c4 Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x009c8 Mov_imm(2, 0xe, u=True, v=False)                 line: 229     Mov_imm(reg, HIGH(word), u=1) -- (in move_immediate_word_to_register)
                0x009cc Ior_imm(2, 2, 0x7f00, u=False, v=False)          line: 230     Ior_imm(reg, reg, LOW(word)) -- (in move_immediate_word_to_register)
                0x009d0 Add(1, 1, 2, u=False)                            line: 1116 Add(R1, R1, R2)     # R1 = x + DISPLAY_START
                0x009d4 Mov_imm(7, 0x2ff, u=False, v=False)              line: 1117 Mov_imm(R7, 767)    # Display width - 1 in pixels. (TODO don't hardcod3 this.)
                0x009d8 Load_word(2, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x009dc Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x009e0 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x009e4 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x009e8 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x009ec Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x009f0 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x009f4 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x009f8 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x009fc T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
                0x009e0 Mul_imm(2, 2, 0xd, u=False, v=False)             line: 1119 Mul_imm(R2, R2, 13) # R2 = y in px  (13px/char height)
                0x009e4 Sub(2, 7, 2, u=False)                            line: 1120 Sub(R2, R7, R2)     # R2 = 768 - 1 - y
                0x009e8 Lsl_imm(2, 2, 0x7, u=False, v=False)             line: 1121 Lsl_imm(R2, R2, 7)  # R2 = (768 - 1 - y) * 128 bytes per line.
                0x009ec Add(1, 1, 2, u=False)                            line: 1122 Add(R1, R1, R2)     # R1 = (768 - 1 - y) * 128 + x + DISPLAY_START
                0x009f0 Mov_imm(2, 0xd, u=False, v=False)                line: 1128 Mov_imm(R2, 13)  # Counter
    _pchr_loop: 0x009f4 Load_byte(7, 0)                                  line: 1131 Load_byte(R7, R0)
                0x009f8 Store_byte(7, 1)                                 line: 1133 Store_byte(R7, R1)
                0x009fc Add_imm(0, 0, 0x4, u=False, v=False)             line: 1134 Add_imm(R0, R0, 4)
                0x00a00 Sub_imm(1, 1, 0x80, u=False, v=False)            line: 1135 Sub_imm(R1, R1, 128)
                0x00a04 Sub_imm(2, 2, 0x1, u=False, v=False)             line: 1136 Sub_imm(R2, R2, 1)
                0x00a08 NE_imm(0xfffffa)                                 line: 1137 NE_imm(_pchr_loop)
                0x00a0c Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00a10 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00a14 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00a18 T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)
       DUP_dfa: 0x00a1c 0x0000098c                                       line: 172     dw(LINK) -- (in def_)
                0x00a20 0x50554403                                       line: 181         dw((a<<24) + (b<<16) + (c<<8) + d) -- (in def_)
           DUP: 0x00a24 0x00000a28                                       line: 202     dw(HERE() + 4)  # codeword points to ASM immediately following. -- (in defcode)
                0x00a28 Load_word(0, 10)                                 line: 158     Load_word(reg, Dstack)      # reg <- RAM[Dstack] -- (in POP)
                0x00a2c Add_imm(10, 10, 0x4, u=False, v=False)           line: 159     Add_imm(Dstack, Dstack, 4)  # Dstack += 4 -- (in POP)
                0x00a30 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00a34 Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00a38 Sub_imm(10, 10, 0x4, u=False, v=False)           line: 152     Sub_imm(Dstack, Dstack, 4)  # Dstack -= 4 -- (in PUSH)
                0x00a3c Store_word(0, 10)                                line: 153     Store_word(reg, Dstack)     # reg -> RAM[Dstack] -- (in PUSH)
                0x00a40 Load_word(3, 14)                                 line: 132     Load_word(next_function, IP)        # next_function <- RAM[IP] -- (in NEXT)
                0x00a44 Load_word(4, 3)                                  line: 133     Load_word(codeword, next_function)  # codeword <- RAM[next_function] -- (in NEXT)
                0x00a48 Add_imm(14, 14, 0x4, u=False, v=False)           line: 134     Add_imm(IP, IP, 4)                  # IP += 4 -- (in NEXT)
                0x00a4c T(4)                                             line: 135     T(codeword)                         # PC <- RAM[codeword] -- (in NEXT)

M forth/oberonforth.bin => forth/oberonforth.bin +0 -0
M forth/oberonforth.oberonforth => forth/oberonforth.oberonforth +0 -92
@@ 47,98 47,6 @@ $e7f00 CONSTANT DISPLAY_START
$18000 CONSTANT DISPLAY_LENGTH  ( 1024 * 768 / 8 = 98304 )


( Let's implement a Joy-in-Forth

We're going to use the format specified in the book:
https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-33.html#%_sec_5.3.1

So we have a "vector" of heads and another "vector" of tails, which
contain tagged pointers.  For now I think we want:

- Numbers, both inline and indirect
- List cells
  - "the empty list is denoted by the pointer e0"
- Symbols or Codewords
- ?

The first two decisions are where to put the lists and how long to make
them.  We have plenty of room, and the data and return stacks can be
moved, so let's just use ALLOT.  I think to start out 1024 cells should
be fine.

)

$400 CELLS DUP
ALLOT CONSTANT HEADS
ALLOT CONSTANT TAILS


( From the book: "We presume that there is a special register,
free, that always holds a pair pointer containing the next available
index, and that we can increment the index part of that pointer to find
the next free location." )

VARIABLE free

$0 free !  \ Set the free pointer.

( For tagged pointers I'm going to try putting the tag in the upper, say,
four bits, and let the rest be the offset or numeric value or whatever.
For list cells let the four bits be all zeros.  See how that works out.

So how do we create these things?  Normally there would be a text-to-Joy
function but here there isn't enough infrastructure to do that yet.

We can put a new, empty list onto the Forth stack by simply pushing zero.

    $0

Now how would we put a number onto that Joy stack from Forth?  First,
convert the number to a Joy stack tagged pointer.  Let the MSB indicate
that a value is a number.  So negtive numbers are already fine, and we
just have to set the MSB of positive numbers, eh?

    : nf2j DUP $0 >= IF $80000000 + THEN ;  / number Forth to Joy

So now we have a pointer to a cons cell and a number "pointer" on the
stack, How to cons them together?

    : CONS ( tail head -- list ) 
        / we are going to want to do 
           head HEADS free @ + !
           tail TAILS free @ + !
           free @  / Keep the result list on the stack.
           free $4 +!
    ;

While it would be neat to figure out a way to do all this and only fetch
free once, it's easier to do this:

    : f@+! free @ + ! ;  / Add free pointer to vector and store a value there.
    : f@4! free @ free $4 +! ;  / Leave new list on stack, point to next free cell.

    : CONS HEADS f@+! TAILS f@+! f@4! ;

Eh?  And I bet there's a nice way to write f@4! too.
Naming sucks (for me) but I feel this is a "Forthic"? "Forthionic"? way
to do things.

This is inefficient, but we will figure out ways to more easily specify
more efficient forms as we get into Joy and higher order combinators.

So:

    $0 $123 nf2j CONS

Should create a cons cell in the vectors and leave its pointer on the
stack, eh?  You could then do:

    $1 nf2j CONS $2 nf2j CONS $3 nf2j CONS

To add three more numbers to the Joy stack.

)

pai



M forth/oberonforth.py => forth/oberonforth.py +15 -0
@@ 368,6 368,21 @@ Mov(R0, 0, u=True, v=True)  # Get flags, c register is ignored.
Asr_imm(R0, R0, 30)  # Z is the 31st bit, penultimate from the MSB.
And_imm(R0, R0, 1)  # Mask out N flag.
Xor_imm(R0, R0, 1)  # flip the (shifted) Z bit.
PUSH(R0)
NEXT()


defcode(b'>=', GTE)
POP(R0)
POP(R1)
Sub(R1, R1, R0)
GE_imm(_GTE_True)
Mov_imm(R0, 0)
T_imm(_GTE_fin)
label(_GTE_True)
Mov_imm(R0, 1)
label(_GTE_fin)
PUSH(R0)
NEXT()



M forth/oberonforth.symbols => forth/oberonforth.symbols +0 -0