home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol013 / forth11.asm < prev    next >
Assembly Source File  |  1984-04-29  |  40KB  |  3,758 lines

  1.  
  2.  
  3. ;
  4. ;    FIG-FORTH 1.1 VERSION A0
  5. ;
  6. FIGREL    EQU 1
  7. FIGREV    EQU 1
  8. USRVER    EQU 0
  9. ;
  10. ;    ASCII CHARACTERS USED
  11. ;
  12. ABL    EQU 20H
  13. BELL    EQU 07H
  14. ACR    EQU 0DH
  15. ADOT    EQU 02EH
  16. BSIN    EQU 7FH
  17. BSOUT    EQU 08H
  18. DLE    EQU 10H
  19. LF    EQU 0AH
  20. FF    EQU 0CH
  21. ;
  22. ;    MEMORY ALLOCATION
  23. ;
  24. HBASE    EQU 4200H
  25. EM    EQU HBASE+3000H
  26. NSCR    EQU 1
  27. KBBUF    EQU 128
  28. US    EQU 40H
  29. RTS    EQU 0A0H
  30. ;
  31. CO    EQU KBBUF+4
  32. NBUF    EQU NSCR*400H/KBBUF
  33. BUF1    EQU EM-CO*NBUF
  34. INITR0    EQU BUF1-US
  35. INITS0    EQU INITR0-RTS
  36. ;
  37.     ORG HBASE+100H
  38. ORIG    NOP
  39.     JMP CLD
  40.     NOP
  41.     JMP WRM
  42.     DB FIGREL
  43.     DB FIGREV
  44.     DB USRVER
  45.     DB 0EH
  46.     DW TASK-7
  47.     DW BSIN
  48.     DW INITR0
  49. ;<<<<<    FOLLOWING USED BY COLD;
  50. ;    MUST BE IN SAME ORDER AS USER VARIABLES
  51.     DW INITS0
  52.     DW INITR0
  53.     DW INITS0
  54.     DW 1FH
  55.     DW 0
  56.     DW INITDP
  57.     DW INITDP
  58.     DW FORTH+8
  59. ;<<<<<<<END    DATA USED BY COLD
  60.     DW 5H,0B320H
  61. ;
  62. ;FORTH    REGISTERS
  63. ;
  64. UP    DW INITR0
  65. RPP    DW INITR0
  66. ;
  67. ;    DEBUG SUPPORT
  68. ;
  69. BIP    DW 0
  70. ;
  71. TNEXT    LXI H,BIP
  72.     MOV A,M
  73.     CMP C
  74.     JNZ TNEXT1
  75.     INX H
  76.     MOV A,M
  77.     CMP B
  78.     JNZ TNEXT1
  79. BREAK    NOP
  80.     NOP
  81.     NOP
  82. TNEXT1    LDAX B
  83.     INX B
  84.     MOV L,A
  85.     JMP NEXT+3
  86. ;
  87. ;    FORTH ADDRESS INTERPRETER
  88. ;
  89. DPUSH    PUSH D
  90. HPUSH    PUSH H
  91. NEXT    LDAX B
  92.     INX B
  93.     MOV L,A
  94.     LDAX B
  95.     INX B
  96.     MOV H,A
  97. NEXT1:    MOV E,M
  98.     INX H
  99.     MOV D,M
  100.     XCHG 
  101.     PCHL
  102. ;
  103. ;    FORTH DICTIONARY
  104. ;
  105. DP0    DB 83H
  106.     DB 'LI'
  107.     DB 'T'+80H
  108.     DW 0
  109. LIT    DW $+2
  110.     LDAX B
  111.     INX B
  112.     MOV L,A
  113.     LDAX B
  114.     INX B
  115.     MOV H,A
  116.     JMP HPUSH
  117. ;
  118.     DB 87H
  119.     DB 'EXECUT'
  120.     DB 'E'+80H
  121.     DW LIT-6
  122. EXEC    DW $+2
  123.     POP H
  124.     JMP NEXT1
  125. ;
  126.     DB 86H
  127.     DB 'BRANC'
  128.     DB 'H'+80H
  129.     DW EXEC-0AH
  130. BRAN    DW $+2
  131. BRAN1    MOV H,B
  132.     MOV L,C
  133.     MOV E,M
  134.     INX H
  135.     MOV D,M
  136.     DCX H
  137.     DAD D
  138.     MOV C,L
  139.     MOV B,H
  140.     JMP NEXT
  141. ;
  142.     DB 87H
  143.     DB '0BRANC'
  144.     DB 'H'+80H
  145.     DW BRAN-9
  146. ZBRAN    DW $+2
  147.     POP H
  148.     MOV A,L
  149.     ORA H
  150.     JZ BRAN1
  151.     INX B
  152.     INX B
  153.     JMP NEXT
  154. ;
  155.     DB 86H
  156.     DB '(LOOP'
  157.     DB ')'+80H
  158.     DW ZBRAN-0AH
  159. XLOOP    DW $+2
  160.     LXI D,1
  161. XLOO1    LHLD RPP
  162.     MOV A,M
  163.     ADD E
  164.     MOV M,A
  165.     MOV E,A
  166.     INX H
  167.     MOV A,M
  168.     ADC D
  169.     MOV M,A
  170.     INX H
  171.     INR D
  172.     DCR D
  173.     MOV D,A
  174.     JM XLOO2
  175.     MOV A,E
  176.     SUB M
  177.     MOV A,D
  178.     INX H
  179.     SBB M
  180.     JMP XLOO3
  181. XLOO2    MOV A,M
  182.     SUB E
  183.     INX H
  184.     MOV A,M
  185.     SBB D
  186. ;
  187. XLOO3    JM BRAN1
  188.     INX H
  189.     SHLD RPP
  190.     INX B
  191.     INX B
  192.     JMP NEXT
  193. ;
  194.     DB 87H
  195.     DB '(+LOOP'
  196.     DB ')'+80H
  197.     DW XLOOP-9
  198. XPLOO    DW $+2
  199.     POP D
  200.     JMP XLOO1
  201. ;
  202.     DB 84H
  203.     DB '(DO'
  204.     DB ')'+80H
  205.     DW XPLOO-0AH
  206. XDO    DW $+2
  207.     LHLD RPP 
  208.     DCX H
  209.     DCX H
  210.     DCX H
  211.     DCX H
  212.     SHLD RPP
  213.     POP D
  214.     MOV M,E
  215.     INX H
  216.     MOV M,D
  217.     POP D
  218.     INX H
  219.     MOV M,E
  220.     INX H
  221.     MOV M,D
  222.     JMP NEXT
  223. ;
  224.     DB 81H
  225.     DB 'I'+80H
  226.     DW XDO-7
  227. IDO    DW $+2
  228.     LHLD RPP 
  229.     MOV E,M
  230.     INX H
  231.     MOV D,M
  232.     PUSH D
  233.     JMP NEXT
  234. ;
  235.     DB 85H
  236.     DB 'DIGI'
  237.     DB 'T'+80H
  238.     DW IDO-4
  239. DIGIT    DW $+2
  240.     POP H
  241.     POP D
  242.     MOV A,E
  243.     SUI 30H
  244.     JM DIGI2
  245.     CPI 0AH
  246.     JM DIGI1
  247.     SUI 7
  248.     CPI 0AH
  249.     JM DIGI2
  250. ;
  251. DIGI1    CMP L
  252.     JP DIGI2
  253.     MOV E,A
  254.     LXI H,1
  255.     JMP DPUSH
  256. ;
  257. DIGI2    MOV L,H
  258.     JMP HPUSH
  259. ;
  260.     DB 86H
  261.     DB '(FIND'
  262.     DB ')'+80H
  263.     DW DIGIT-8
  264. PFIND    DW $+2
  265.     POP D
  266. PFIN1    POP H
  267.     PUSH H
  268.     LDAX D
  269.     XRA M
  270.     ANI 3FH
  271.     JNZ PFIN4
  272. ;
  273. PFIN2    INX H
  274.     INX D
  275.     LDAX D
  276.     XRA M
  277.     ADD A
  278.     JNZ PFIN3
  279.     JNC PFIN2
  280.     LXI H,5
  281.     DAD D
  282.     XTHL
  283. ;
  284. PFIN6    DCX D
  285.     LDAX D
  286.     ORA A
  287.     JP PFIN6
  288.     MOV E,A
  289.     MVI D,0
  290.     LXI H,1
  291.     JMP DPUSH
  292. ;
  293. PFIN3    JC PFIN5
  294. PFIN4    INX D
  295.     LDAX D
  296.     ORA A
  297.     JP PFIN4
  298. PFIN5    INX D
  299.     XCHG
  300.     MOV E,M
  301.     INX H
  302.     MOV D,M
  303.     MOV A,D
  304.     ORA E
  305.     JNZ PFIN1
  306.     POP H
  307.     LXI H,0
  308.     JMP HPUSH
  309. ;
  310.     DB 87H
  311.     DB 'ENCLOS'
  312.     DB 'E'+80H
  313.     DW PFIND-9
  314. ENCL    DW $+2
  315.     POP D
  316.     POP H
  317.     PUSH H
  318.     MOV A,E
  319.     MOV D,A
  320.     MVI E,0FFH
  321.     DCX H
  322. ;
  323. ENCL1    INX H
  324.     INR E
  325.     CMP M
  326.     JZ ENCL1
  327. ;
  328.     MVI D,0
  329.     PUSH D
  330.     MOV D,A
  331.     MOV A,M
  332.     ANA A
  333.     JNZ ENCL2
  334.     MVI D,0
  335.     INR E
  336.     PUSH D
  337.     DCR E
  338.     PUSH D
  339.     JMP NEXT
  340. ;
  341. ENCL2    MOV A,D
  342.     INX H
  343.     INR E
  344.     CMP M
  345.     JZ ENCL4
  346.     MOV A,M
  347.     ANA A
  348.     JNZ ENCL2
  349. ;
  350. ENCL3    MVI D,0
  351.     PUSH D
  352.     PUSH D
  353.     JMP NEXT
  354. ;
  355. ENCL4    MVI D,0
  356.     PUSH D
  357.     INR E
  358.     PUSH D
  359.     JMP NEXT
  360. ;
  361.     DB 84H
  362.     DB 'EMI'
  363.     DB 'T'+80H
  364.     DW ENCL-0AH
  365. EMIT    DW DOCOL
  366.     DW PEMIT
  367.     DW ONE,OUTT
  368.     DW PSTOR,SEMIS
  369. ;
  370.     DB 83H
  371.     DB 'KE'
  372.     DB 'Y'+80H
  373.     DW EMIT-7
  374. KEY    DW $+2
  375.     JMP PKEY
  376. ;
  377.     DB 89H
  378.     DB '?TERMINA'
  379.     DB 'L'+80H
  380.     DW KEY-6
  381. QTERM    DW $+2
  382.     LXI H,0
  383.     JMP PQTER
  384. ;
  385.     DB 82H
  386.     DB 'C'
  387.     DB 'R'+80H
  388.     DW QTERM-0CH
  389. CR    DW $+2
  390.     JMP PCR
  391. ;
  392.     DB 85H
  393.     DB 'CMOV'
  394.     DB 'E'+80H
  395.     DW CR-5
  396. CMOVE    DW $+2
  397.     MOV L,C
  398.     MOV H,B
  399.     POP B
  400.     POP D
  401.     XTHL
  402. ;
  403.     JMP CMOV2
  404. CMOV1    MOV A,M
  405.     INX H
  406.     STAX D
  407.     INX D
  408.     DCX B
  409. CMOV2    MOV A,B
  410.     ORA C
  411.     JNZ CMOV1
  412.     POP B
  413.     JMP NEXT
  414. ;
  415.     DB 82H
  416.     DB 'U'
  417.     DB '*'+80H
  418.     DW CMOVE-8
  419. USTAR    DW $+2
  420.     POP D
  421.     POP H
  422.     PUSH B
  423.     MOV B,H
  424.     MOV A,L
  425.     CALL MPYX
  426.     PUSH H
  427.     MOV H,A
  428.     MOV A,B
  429.     MOV B,H
  430.     CALL MPYX
  431.     POP D
  432.     MOV C,D
  433.     DAD B
  434.     ACI 0
  435.     MOV D,L
  436.     MOV L,H
  437.     MOV H,A
  438.     POP B
  439.     PUSH D
  440.     JMP HPUSH
  441. ;
  442. ;    MULTIPLY PRIMITIVE
  443. ;
  444. MPYX    LXI H,0
  445.     MVI C,8
  446. MPYX1    DAD H
  447.     RAL 
  448.     JNC MPYX2
  449.     DAD D
  450.     ACI 0
  451. MPYX2    DCR C
  452.     JNZ MPYX1
  453.     RET
  454. ;
  455.     DB 82H
  456.     DB 'U'
  457.     DB '/'+80H
  458.     DW USTAR-5
  459. USLAS    DW $+2
  460.     LXI H,4
  461.     DAD SP
  462.     MOV E,M
  463.     MOV M,C
  464.     INX H
  465.     MOV D,M
  466.     MOV M,B
  467.     POP B
  468.     POP H
  469.     MOV A,L
  470.     SUB C
  471.     MOV A,H
  472.     SBB B
  473.     JC USLA1
  474.     LXI H,0FFFFH
  475.     LXI D,0FFFFH
  476.     JMP USLA7
  477. USLA1    MVI A,16
  478. USLA2    DAD H
  479.     RAL 
  480.     XCHG
  481.     DAD H
  482.     JNC USLA3
  483.     INX D
  484.     ANA A
  485. USLA3    XCHG
  486.     RAR
  487.     PUSH PSW
  488.     JNC USLA4
  489.     MOV A,L
  490.     SUB C
  491.     MOV L,A
  492.     MOV A,H
  493.     SBB B
  494.     MOV H,A
  495.     JMP USLA5
  496. USLA4    MOV A,L
  497.     SUB C
  498.     MOV L,A
  499.     MOV A,H
  500.     SBB B
  501.     MOV H,A
  502.     JNC USLA5
  503.     DAD B
  504.     DCX D
  505. USLA5    INX D
  506. USLA6    POP PSW
  507.     DCR A
  508.     JNZ USLA2
  509. USLA7    POP B
  510.     PUSH H
  511.     PUSH D
  512.     JMP NEXT
  513. ;
  514.     DB 83H
  515.     DB 'AN'
  516.     DB 'D'+80H
  517.     DW USLAS-5
  518. ANDD    DW $+2
  519.     POP D
  520.     POP H
  521.     MOV A,E
  522.     ANA L
  523.     MOV L,A
  524.     MOV A,D
  525.     ANA H
  526.     MOV H,A
  527.     JMP HPUSH
  528. ;
  529.     DB 82H
  530.     DB 'O'
  531.     DB 'R'+80H
  532.     DW ANDD-6
  533. ORR    DW $+2
  534.     POP D
  535.     POP H
  536.     MOV A,E
  537.     ORA L
  538.     MOV L,A
  539.     MOV A,D
  540.     ORA H
  541.     MOV H,A
  542.     JMP HPUSH
  543. ;
  544.     DB 83H
  545.     DB 'XO'
  546.     DB 'R'+80H
  547.     DW ORR-5
  548. XORR    DW $+2
  549.     POP D
  550.     POP H
  551.     MOV A,E
  552.     XRA L
  553.     MOV L,A
  554.     MOV A,D
  555.     XRA H
  556.     MOV H,A
  557.     JMP HPUSH
  558. ;
  559.     DB 83H
  560.     DB 'SP'
  561.     DB '@'+80H
  562.     DW XORR-6
  563. SPAT    DW $+2
  564.     LXI H,0
  565.     DAD SP
  566.     JMP HPUSH
  567. ;
  568.     DB 83H
  569.     DB 'SP'
  570.     DB '!'+80H
  571.     DW SPAT-6
  572. SPSTO    DW $+2
  573.     LHLD UP
  574.     LXI D,6
  575.     DAD D
  576.     MOV E,M
  577.     INX H
  578.     MOV D,M
  579.     XCHG
  580.     SPHL
  581.     JMP NEXT
  582. ;
  583.     DB 83H
  584.     DB 'RP'
  585.     DB '@'+80H
  586.     DW SPSTO-6
  587. RPAT    DW $+2
  588.     LHLD RPP
  589.     JMP HPUSH
  590. ;
  591.     DB 83H
  592.     DB 'RP'
  593.     DB '!'+80H
  594.     DW RPAT-6
  595. RPSTO    DW $+2
  596.     LHLD UP
  597.     LXI D,8
  598.     DAD D
  599.     MOV E,M
  600.     INX H
  601.     MOV D,M
  602.     XCHG
  603.     SHLD RPP
  604.     JMP NEXT
  605. ;
  606.     DB 82H
  607.     DB ';'
  608.     DB 'S'+80H
  609.     DW RPSTO-6
  610. SEMIS    DW $+2
  611.     LHLD RPP
  612.     MOV C,M
  613.     INX H
  614.     MOV B,M
  615.     INX H
  616.     SHLD RPP
  617.     JMP NEXT
  618. ;
  619.     DB 85H
  620.     DB 'LEAV'
  621.     DB 'E'+80H
  622.     DW SEMIS-5
  623. LEAVE    DW $+2
  624.     LHLD RPP 
  625.     MOV E,M
  626.     INX H
  627.     MOV D,M
  628.     INX H
  629.     MOV M,E
  630.     INX H
  631.     MOV M,D
  632.     JMP NEXT
  633. ;
  634.     DB 82H
  635.     DB '>'
  636.     DB 'R'+80H
  637.     DW LEAVE-8
  638. TOR    DW $+2
  639.     POP D
  640.     LHLD RPP
  641.     DCX H
  642.     DCX H
  643.     SHLD RPP
  644.     MOV M,E
  645.     INX H
  646.     MOV M,D
  647.     JMP NEXT
  648. ;
  649.     DB 82H
  650.     DB 'R'
  651.     DB '>'+80H
  652.     DW TOR-5
  653. FROMR    DW $+2
  654.     LHLD RPP 
  655.     MOV E,M
  656.     INX H
  657.     MOV D,M
  658.     INX H
  659.     SHLD RPP
  660.     PUSH D
  661.     JMP NEXT
  662. ;
  663.     DB 81H
  664.     DB 'R'+80H
  665.     DW FROMR-5
  666. RR    DW IDO+2
  667. ;
  668.     DB 82H
  669.     DB '0'
  670.     DB '='+80H
  671.     DW RR-4
  672. ZEQU    DW $+2
  673.     POP H
  674.     MOV A,L
  675.     ORA H
  676.     LXI H,0
  677.     JNZ ZEQU1
  678.     INX H
  679. ZEQU1    JMP HPUSH
  680. ;
  681.     DB 82H
  682.     DB '0'
  683.     DB '<'+80H
  684.     DW ZEQU-5
  685. ZLESS    DW $+2
  686.     POP H
  687.     DAD H
  688.     LXI H,0
  689.     JNC ZLES1
  690.     INX H
  691. ZLES1    JMP HPUSH
  692. ;
  693.     DB 81H
  694.     DB '+'+80H
  695.     DW ZLESS-5
  696. PLUS    DW $+2
  697.     POP D
  698.     POP H
  699.     DAD D
  700.     JMP HPUSH
  701. ;
  702.     DB 82H
  703.     DB 'D'
  704.     DB '+'+80H
  705.     DW PLUS-4
  706. DPLUS    DW $+2
  707.     LXI H,6
  708.     DAD SP
  709.     MOV E,M
  710.     MOV M,C
  711.     INX H
  712.     MOV D,M
  713.     MOV M,B
  714.     POP B
  715.     POP H
  716.     DAD D
  717.     XCHG
  718.     POP H
  719.     MOV A,L
  720.     ADC C
  721.     MOV L,A
  722.     MOV A,H
  723.     ADC B
  724.     MOV H,A
  725.     POP B
  726.     PUSH D
  727.     JMP HPUSH
  728. ;
  729.     DB 85H
  730.     DB 'MINU'
  731.     DB 'S'+80H
  732.     DW DPLUS-5
  733. MINUS    DW $+2
  734.     POP H
  735.     MOV A,L
  736.     CMA
  737.     MOV L,A
  738.     MOV A,H
  739.     CMA
  740.     MOV H,A
  741.     INX H
  742.     JMP HPUSH
  743. ;
  744.     DB 86H
  745.     DB 'DMINU'
  746.     DB 'S'+80H
  747.     DW MINUS-8
  748. DMINU    DW $+2
  749.     POP H
  750.     POP D
  751.     SUB A
  752.     SUB E
  753.     MOV E,A
  754.     MVI A,0
  755.     SBB D
  756.     MOV D,A
  757.     MVI A,0
  758.     SBB L
  759.     MOV L,A
  760.     MVI A,0
  761.     SBB H
  762.     MOV H,A
  763.     PUSH D
  764.     JMP HPUSH
  765. ;
  766.     DB 84H
  767.     DB 'OVE'
  768.     DB 'R'+80H
  769.     DW DMINU-9
  770. OVER    DW $+2
  771.     POP D
  772.     POP H
  773.     PUSH H
  774.     JMP DPUSH
  775. ;
  776.     DB 84H
  777.     DB 'DRO'
  778.     DB 'P'+80H
  779.     DW OVER-7
  780. DROP    DW $+2
  781.     POP H
  782.     JMP NEXT
  783. ;
  784.     DB 84H
  785.     DB 'SWA'
  786.     DB 'P'+80H
  787.     DW DROP-7
  788. SWAP    DW $+2
  789.     POP H
  790.     XTHL
  791.     JMP HPUSH
  792. ;
  793.     DB 83H
  794.     DB 'DU'
  795.     DB 'P'+80H
  796.     DW SWAP-7
  797. DUP    DW $+2
  798.     POP H
  799.     PUSH H
  800.     JMP HPUSH
  801. ;
  802.     DB 84H
  803.     DB '2DU'
  804.     DB 'P'+80H
  805.     DW DUP-6
  806. TDUP    DW $+2
  807.     POP H
  808.     POP D
  809.     PUSH D
  810.     PUSH H
  811.     JMP DPUSH
  812. ;
  813.     DB 82H
  814.     DB '+'
  815.     DB '!'+80H
  816.     DW TDUP-7
  817. PSTOR    DW $+2
  818.     POP H
  819.     POP D
  820.     MOV A,M
  821.     ADD E
  822.     MOV M,A
  823.     INX H
  824.     MOV A,M
  825.     ADC D
  826.     MOV M,A
  827.     JMP NEXT
  828. ;
  829.     DB 86H
  830.     DB 'TOGGL'
  831.     DB 'E'+80H
  832.     DW PSTOR-5
  833. TOGGL    DW $+2
  834.     POP D
  835.     POP H
  836.     MOV A,M
  837.     XRA E
  838.     MOV M,A
  839.     JMP NEXT
  840. ;
  841.     DB 81H
  842.     DB '@'+80H
  843.     DW TOGGL-9
  844. AT    DW $+2
  845.     POP H
  846.     MOV E,M
  847.     INX H
  848.     MOV D,M
  849.     PUSH D
  850.     JMP NEXT
  851. ;
  852.     DB 82H
  853.     DB 'C'
  854.     DB '@'+80H
  855.     DW AT-4
  856. CAT    DW $+2
  857.     POP H
  858.     MOV L,M
  859.     MVI H,0
  860.     JMP HPUSH
  861. ;
  862.     DB 82H
  863.     DB '2'
  864.     DB '@'+80H
  865.     DW CAT-5
  866. TAT    DW $+2
  867.     POP H
  868.     LXI D,2
  869.     DAD D
  870.     MOV E,M
  871.     INX H
  872.     MOV D,M
  873.     PUSH D
  874.     LXI D,-3
  875.     DAD D
  876.     MOV E,M
  877.     INX H
  878.     MOV D,M
  879.     PUSH D
  880.     JMP NEXT
  881. ;
  882.     DB 81H
  883.     DB '!'+80H
  884.     DW TAT-5
  885. STORE    DW $+2
  886.     POP H
  887.     POP D
  888.     MOV M,E
  889.     INX H
  890.     MOV M,D
  891.     JMP NEXT
  892. ;
  893.     DB 82H
  894.     DB 'C'
  895.     DB '!'+80H
  896.     DW STORE-4
  897. CSTOR    DW $+2
  898.     POP H
  899.     POP D
  900.     MOV M,E
  901.     JMP NEXT
  902. ;
  903.     DB 82H
  904.     DB '2'
  905.     DB '!'+80H
  906.     DW CSTOR-5
  907. TSTOR    DW $+2
  908.     POP H
  909.     POP D
  910.     MOV M,E
  911.     INX H
  912.     MOV M,D
  913.     INX H
  914.     POP D
  915.     MOV M,E
  916.     INX H
  917.     MOV M,D
  918.     JMP NEXT
  919. ;
  920.     DB 0C1H ; :
  921.     DB ':'+80H
  922.     DW TSTOR-5
  923. COLON    DW DOCOL
  924.     DW QEXEC
  925.     DW SCSP
  926.     DW CURR
  927.     DW AT
  928.     DW CONT
  929.     DW STORE
  930.     DW CREAT
  931.     DW RBRAC
  932.     DW PSCOD
  933. DOCOL    LHLD RPP
  934.     DCX H
  935.     MOV M,B
  936.     DCX H
  937.     MOV M,C
  938.     SHLD RPP
  939.     INX D
  940.     MOV C,E
  941.     MOV B,D
  942.     JMP NEXT
  943. ;
  944.     DB 0C1H ; ;
  945.     DB ';'+80H
  946.     DW COLON-4
  947. SEMI    DW DOCOL
  948.     DW QCSP
  949.     DW COMP
  950.     DW SEMIS
  951.     DW SMUDG
  952.     DW LBRAC
  953.     DW SEMIS
  954. ;
  955.     DB 84H
  956.     DB 'NOO'
  957.     DB 'P'+80H
  958.     DW SEMI-4
  959. NOOP    DW DOCOL
  960.     DW SEMIS
  961. ;
  962.     DB 88H
  963.     DB 'CONSTAN'
  964.     DB 'T'+80H
  965.     DW NOOP-7
  966. CON    DW DOCOL
  967.     DW CREAT
  968.     DW SMUDG
  969.     DW COMMA 
  970.     DW PSCOD
  971. DOCON    INX D
  972.     XCHG
  973.     MOV E,M
  974.     INX H
  975.     MOV D,M
  976.     PUSH D
  977.     JMP NEXT
  978. ;
  979.     DB 88H
  980.     DB 'VARIABL'
  981.     DB 'E'+80H
  982.     DW CON-0BH
  983. VAR    DW DOCOL
  984.     DW CON
  985.     DW PSCOD
  986. DOVAR    INX D
  987.     PUSH D
  988.     JMP NEXT
  989. ;
  990.     DB 84H
  991.     DB 'USE'
  992.     DB 'R'+80H
  993.     DW VAR-0BH
  994. USER    DW DOCOL
  995.     DW CON
  996.     DW PSCOD
  997. DOUSE    INX D
  998.     XCHG
  999.     MOV E,M
  1000.     MVI D,0
  1001.     LHLD UP
  1002.     DAD D
  1003.     JMP HPUSH
  1004. ;
  1005.     DB 81H
  1006.     DB '0'+80H
  1007.     DW USER-7
  1008. ZERO    DW DOCON
  1009.     DW 0
  1010. ;
  1011.     DB 81H
  1012.     DB '1'+80H
  1013.     DW ZERO-4
  1014. ONE    DW DOCON
  1015.     DW 1
  1016. ;
  1017.     DB 81H
  1018.     DB '2'+80H
  1019.     DW ONE-4
  1020. TWO    DW DOCON
  1021.     DW 2
  1022. ;
  1023.     DB 81H
  1024.     DB '3'+80H
  1025.     DW TWO-4
  1026. THREE    DW DOCON
  1027.     DW 3
  1028. ;
  1029.     DB 82H
  1030.     DB 'B'
  1031.     DB 'L'+80H
  1032.     DW THREE-4
  1033. BL    DW DOCON
  1034.     DW 20H
  1035. ;
  1036.     DB 83H
  1037.     DB 'C/'
  1038.     DB 'L'+80H
  1039.     DW BL-5
  1040. CSLL    DW DOCON
  1041.     DW 64
  1042. ;
  1043.     DB 85H
  1044.     DB 'FIRS'
  1045.     DB 'T'+80H
  1046.     DW CSLL-6
  1047. FIRST    DW DOCON
  1048.     DW BUF1
  1049. ;
  1050.     DB 85H
  1051.     DB 'LIMI'
  1052.     DB 'T'+80H
  1053.     DW FIRST-8
  1054. LIMIT    DW DOCON
  1055.     DW EM
  1056. ;
  1057.     DB 85H
  1058.     DB 'B/BU'
  1059.     DB 'F'+80H
  1060.     DW LIMIT-8
  1061. BBUF    DW DOCON
  1062.     DW KBBUF
  1063. ;
  1064.     DB 85H
  1065.     DB 'B/SC'
  1066.     DB 'R'+80H
  1067.     DW BBUF-8
  1068. BSCR    DW DOCON
  1069.     DW 400H/KBBUF
  1070. ;
  1071.     DB 87H
  1072.     DB '+ORIGI'
  1073.     DB 'N'+80H
  1074.     DW BSCR-8
  1075. PORIG    DW DOCOL
  1076.     DW LIT
  1077.     DW ORIG
  1078.     DW PLUS
  1079.     DW SEMIS
  1080. ;
  1081. ;    USER VARIABLES
  1082. ;
  1083.     DB 82H
  1084.     DB 'S'
  1085.     DB '0'+80H
  1086.     DW PORIG-0AH
  1087. SZERO    DW DOUSE
  1088.     DW 6
  1089. ;
  1090.     DB 82H
  1091.     DB 'R'
  1092.     DB '0'+80H
  1093.     DW SZERO-5
  1094. RZERO    DW DOUSE
  1095.     DW 8
  1096. ;
  1097.     DB 83H
  1098.     DB 'TI'
  1099.     DB 'B'+80H
  1100.     DW RZERO-5
  1101. TIB    DW DOUSE
  1102.     DB 0AH
  1103. ;
  1104.     DB 85H
  1105.     DB 'WIDT'
  1106.     DB 'H'+80H
  1107.     DW TIB-6
  1108. WIDTH    DW DOUSE
  1109.     DB 0CH
  1110. ;
  1111.     DB 87H
  1112.     DB 'WARNIN'
  1113.     DB 'G'+80H
  1114.     DW WIDTH-8
  1115. WARN    DW DOUSE
  1116.     DB 0EH
  1117. ;
  1118.     DB 85H
  1119.     DB 'FENC'
  1120.     DB 'E'+80H
  1121.     DW WARN-0AH
  1122. FENCE    DW DOUSE
  1123.     DB 10H
  1124. ;
  1125.     DB 82H
  1126.     DB 'D'
  1127.     DB 'P'+80H
  1128.     DW FENCE-8
  1129. DP    DW DOUSE
  1130.     DB 12H
  1131. ;
  1132.     DB 88H
  1133.     DB 'VOC-LIN'
  1134.     DB 'K'+80H
  1135.     DW DP-5
  1136. VOCL    DW DOUSE
  1137.     DW 14H
  1138. ;
  1139.     DB 83H
  1140.     DB 'BL'
  1141.     DB 'K'+80H
  1142.     DW VOCL-0BH
  1143. BLK    DW DOUSE
  1144.     DB 16H
  1145. ;
  1146.     DB 82H
  1147.     DB 'I'
  1148.     DB 'N'+80H
  1149.     DW BLK-6
  1150. INN    DW DOUSE
  1151.     DB 18H
  1152. ;
  1153.     DB 83H
  1154.     DB 'OU'
  1155.     DB 'T'+80H
  1156.     DW INN-5
  1157. OUTT    DW DOUSE
  1158.     DB 1AH
  1159. ;
  1160.     DB 83H
  1161.     DB 'SC'
  1162.     DB 'R'+80H
  1163.     DW OUTT-6
  1164. SCR    DW DOUSE
  1165.     DB 1CH
  1166. ;
  1167.     DB 86H
  1168.     DB 'OFFSE'
  1169.     DB 'T'+80H
  1170.     DW SCR-6
  1171. OFSET    DW DOUSE
  1172.     DB 1EH
  1173. ;
  1174.     DB 87H
  1175.     DB 'CONTEX'
  1176.     DB 'T'+80H
  1177.     DW OFSET-9
  1178. CONT    DW DOUSE
  1179.     DB 20H
  1180. ;
  1181.     DB 87H
  1182.     DB 'CURREN'
  1183.     DB 'T'+80H
  1184.     DW CONT-0AH
  1185. CURR    DW DOUSE
  1186.     DB 22H
  1187. ;
  1188.     DB 85H
  1189.     DB 'STAT'
  1190.     DB 'E'+80H
  1191.     DW CURR-0AH
  1192. STATE    DW DOUSE
  1193.     DB 24H
  1194. ;
  1195.     DB 84H
  1196.     DB 'BAS'
  1197.     DB 'E'+80H
  1198.     DW STATE-8
  1199. BASE    DW DOUSE
  1200.     DB 26H
  1201. ;
  1202.     DB 83H
  1203.     DB 'DP'
  1204.     DB 'L'+80H
  1205.     DW BASE-7
  1206. DPL    DW DOUSE
  1207.     DB 28H
  1208. ;
  1209.     DB 83H
  1210.     DB 'FL'
  1211.     DB 'D'+80H
  1212.     DW DPL-6
  1213. FLD    DW DOUSE
  1214.     DB 2AH
  1215. ;
  1216.     DB 83H
  1217.     DB 'CS'
  1218.     DB 'P'+80H
  1219.     DW FLD-6
  1220. CSPP    DW DOUSE
  1221.     DB 2CH
  1222. ;
  1223.     DB 82H
  1224.     DB 'R'
  1225.     DB '#'+80H
  1226.     DW CSPP-6
  1227. RNUM    DW DOUSE
  1228.     DB 2EH
  1229. ;
  1230.     DB 83H
  1231.     DB 'HL'
  1232.     DB 'D'+80H
  1233.     DW RNUM-5
  1234. HLD    DW DOUSE
  1235.     DW 30H
  1236. ;
  1237. ;    END OF USER VARIABLES
  1238. ;
  1239.     DB 82H
  1240.     DB '1'
  1241.     DB '+'+80H
  1242.     DW HLD-6
  1243. ONEP    DW DOCOL
  1244.     DW ONE
  1245.     DW PLUS
  1246.     DW SEMIS
  1247. ;
  1248.     DB 82H
  1249.     DB '2'
  1250.     DB '+'+80H
  1251.     DW ONEP-5
  1252. TWOP    DW DOCOL
  1253.     DW TWO
  1254.     DW PLUS
  1255.     DW SEMIS
  1256. ;
  1257.     DB 84H
  1258.     DB 'HER'
  1259.     DB 'E'+80H
  1260.     DW TWOP-5
  1261. HERE    DW DOCOL
  1262.     DW DP
  1263.     DW AT
  1264.     DW SEMIS
  1265. ;
  1266.     DB 85H
  1267.     DB 'ALLO'
  1268.     DB 'T'+80H
  1269.     DW HERE-7
  1270. ALLOT    DW DOCOL
  1271.     DW DP
  1272.     DW PSTOR
  1273.     DW SEMIS
  1274. ;
  1275.     DB 81H
  1276.     DB ','+80H
  1277.     DW ALLOT-8
  1278. COMMA    DW DOCOL
  1279.     DW HERE
  1280.     DW STORE
  1281.     DW TWO
  1282.     DW ALLOT
  1283.     DW SEMIS
  1284. ;
  1285.     DB 82H
  1286.     DB 'C'
  1287.     DB ','+80H
  1288.     DW COMMA-4
  1289. CCOMM    DW DOCOL
  1290.     DW HERE
  1291.     DW CSTOR
  1292.     DW ONE
  1293.     DW ALLOT
  1294.     DW SEMIS
  1295. ;
  1296. ;    SUBROUTINE USED BY - AND <
  1297. ;
  1298. SSUB    MOV A,L
  1299.     SUB E
  1300.     MOV L,A
  1301.     MOV A,H
  1302.     SBB D
  1303.     MOV H,A
  1304.     RET
  1305. ;
  1306.     DB 81H
  1307.     DB '-'+80H
  1308.     DW CCOMM-5
  1309. SUBB    DW $+2
  1310.     POP D
  1311.     POP H
  1312.     CALL SSUB
  1313.     JMP HPUSH
  1314. ;
  1315.     DB 81H
  1316.     DB '='+80H
  1317.     DW SUBB-4
  1318. EQUAL    DW DOCOL
  1319.     DW SUBB
  1320.     DW ZEQU
  1321.     DW SEMIS
  1322. ;
  1323.     DB 81H
  1324.     DB '<'+80H
  1325.     DW EQUAL-4
  1326. LESS    DW $+2
  1327.     POP D
  1328.     POP H
  1329.     MOV A,D
  1330.     XRA H
  1331.     JM LES1
  1332.     CALL SSUB
  1333. LES1    INR H
  1334.     DCR H
  1335.     JM LES2
  1336.     LXI H,0
  1337.     JMP HPUSH
  1338. LES2    LXI H,1
  1339.     JMP HPUSH
  1340. ;
  1341.     DB 82H
  1342.     DB 'U'
  1343.     DB '<'+80H
  1344.     DW LESS-4
  1345. ULESS    DW DOCOL,TDUP
  1346.     DW XORR,ZLESS
  1347.     DW ZBRAN,ULES1-$
  1348.     DW DROP,ZLESS
  1349.     DW ZEQU
  1350.     DW BRAN,ULES2-$
  1351. ULES1    DW SUBB,ZLESS
  1352. ULES2    DW SEMIS
  1353. ;
  1354.     DB 81H
  1355.     DB '>'+80H
  1356.     DW ULESS-5
  1357. GREAT    DW DOCOL
  1358.     DW SWAP
  1359.     DW LESS
  1360.     DW SEMIS
  1361. ;
  1362.     DB 83H
  1363.     DB 'RO'
  1364.     DB 'T'+80H
  1365.     DW GREAT-4
  1366. ROT    DW $+2
  1367.     POP D
  1368.     POP H
  1369.     XTHL
  1370.     JMP DPUSH
  1371. ;
  1372.     DB 85H
  1373.     DB 'SPAC'
  1374.     DB 'E'+80H
  1375.     DW ROT-6
  1376. SPACE    DW DOCOL
  1377.     DW BL
  1378.     DW EMIT
  1379.     DW SEMIS
  1380. ;
  1381.     DB 84H
  1382.     DB '-DU'
  1383.     DB 'P'+80H
  1384.     DW SPACE-8
  1385. DDUP    DW DOCOL
  1386.     DW DUP
  1387.     DW ZBRAN
  1388.     DW DDUP1-$
  1389.     DW DUP
  1390. DDUP1    DW SEMIS
  1391. ;
  1392.     DB 88H
  1393.     DB 'TRAVERS'
  1394.     DB 'E'+80H
  1395.     DW DDUP-7
  1396. TRAV    DW DOCOL
  1397.     DW SWAP
  1398. TRAV1    DW OVER
  1399.     DW PLUS
  1400.     DW LIT
  1401.     DW 7FH
  1402.     DW OVER
  1403.     DW CAT
  1404.     DW LESS
  1405.     DW ZBRAN
  1406.     DW TRAV1-$
  1407.     DW SWAP
  1408.     DW DROP
  1409.     DW SEMIS
  1410. ;
  1411.     DB 86H
  1412.     DB 'LATES'
  1413.     DB 'T'+80H
  1414.     DW TRAV-0BH
  1415. LATES    DW DOCOL
  1416.     DW CURR
  1417.     DW AT
  1418.     DW AT
  1419.     DW SEMIS
  1420. ;
  1421.     DB 83H
  1422.     DB 'LF'
  1423.     DB 'A'+80H
  1424.     DW LATES-9
  1425. LFA    DW DOCOL
  1426.     DW LIT
  1427.     DW 4
  1428.     DW SUBB
  1429.     DW SEMIS
  1430. ;
  1431.     DB 83H
  1432.     DB 'CF'
  1433.     DB 'A'+80H
  1434.     DW LFA-6
  1435. CFA    DW DOCOL
  1436.     DW TWO
  1437.     DW SUBB
  1438.     DW SEMIS
  1439. ;
  1440.     DB 83H
  1441.     DB 'NF'
  1442.     DB 'A'+80H
  1443.     DW CFA-6
  1444. NFA    DW DOCOL
  1445.     DW LIT
  1446.     DW 5
  1447.     DW SUBB
  1448.     DW LIT
  1449.     DW -1
  1450.     DW TRAV
  1451.     DW SEMIS
  1452. ;
  1453.     DB 83H
  1454.     DB 'PF'
  1455.     DB 'A'+80H
  1456.     DW NFA-6
  1457. PFA    DW DOCOL
  1458.     DW ONE
  1459.     DW TRAV
  1460.     DW LIT
  1461.     DW 5
  1462.     DW PLUS
  1463.     DW SEMIS
  1464. ;
  1465.     DB 84H
  1466.     DB '!CS'
  1467.     DB 'P'+80H
  1468.     DW PFA-6
  1469. SCSP    DW DOCOL
  1470.     DW SPAT
  1471.     DW CSPP
  1472.     DW STORE
  1473.     DW SEMIS
  1474. ;
  1475.     DB 86H
  1476.     DB '?ERRO'
  1477.     DB 'R'+80H
  1478.     DW SCSP-7
  1479. QERR    DW DOCOL
  1480.     DW SWAP
  1481.     DW ZBRAN
  1482.     DW QERR1-$
  1483.     DW ERROR
  1484.     DW BRAN
  1485.     DW QERR2-$
  1486. QERR1    DW DROP
  1487. QERR2    DW SEMIS
  1488. ;
  1489.     DB 85H
  1490.     DB '?COM'
  1491.     DB 'P'+80H
  1492.     DW QERR-9
  1493. QCOMP    DW DOCOL
  1494.     DW STATE
  1495.     DW AT
  1496.     DW ZEQU
  1497.     DW LIT
  1498.     DW 11H
  1499.     DW QERR
  1500.     DW SEMIS
  1501. ;
  1502.     DB 85H
  1503.     DB '?EXE'
  1504.     DB 'C'+80H
  1505.     DW QCOMP-8
  1506. QEXEC    DW DOCOL
  1507.     DW STATE
  1508.     DW AT
  1509.     DW LIT
  1510.     DW 12H
  1511.     DW QERR
  1512.     DW SEMIS
  1513. ;
  1514.     DB 86H
  1515.     DB '?PAIR'
  1516.     DB 'S'+80H
  1517.     DW QEXEC-8
  1518. QPAIR    DW DOCOL
  1519.     DW SUBB
  1520.     DW LIT
  1521.     DW 13H
  1522.     DW QERR
  1523.     DW SEMIS
  1524. ;
  1525.     DB 84H
  1526.     DB '?CS'
  1527.     DB 'P'+80H
  1528.     DW QPAIR-9
  1529. QCSP    DW DOCOL
  1530.     DW SPAT
  1531.     DW CSPP
  1532.     DW AT
  1533.     DW SUBB
  1534.     DW LIT
  1535.     DW 14H
  1536.     DW QERR
  1537.     DW SEMIS
  1538. ;
  1539.     DB 88H
  1540.     DB '?LOADIN'
  1541.     DB 'G'+80H
  1542.     DW QCSP-7
  1543. QLOAD    DW DOCOL
  1544.     DW BLK
  1545.     DW AT
  1546.     DW ZEQU
  1547.     DW LIT
  1548.     DW 16H
  1549.     DW QERR
  1550.     DW SEMIS
  1551. ;
  1552.     DB 87H
  1553.     DB 'COMPIL'
  1554.     DB 'E'+80H
  1555.     DW QLOAD-0BH
  1556. COMP    DW DOCOL
  1557.     DW QCOMP
  1558.     DW FROMR
  1559.     DW DUP
  1560.     DW TWOP
  1561.     DW TOR
  1562.     DW AT
  1563.     DW COMMA
  1564.     DW SEMIS
  1565. ;
  1566.     DB 0C1H
  1567.     DB '['+80H
  1568.     DW COMP-0AH
  1569. LBRAC    DW DOCOL
  1570.     DW ZERO
  1571.     DW STATE
  1572.     DW STORE
  1573.     DW SEMIS
  1574. ;
  1575.     DB 81H
  1576.     DB ']'+80H
  1577.     DW LBRAC-4
  1578. RBRAC    DW DOCOL
  1579.     DW LIT,0C0H
  1580.     DW STATE,STORE
  1581.     DW SEMIS
  1582. ;
  1583.     DB 86H
  1584.     DB 'SMUDG'
  1585.     DB 'E'+80H
  1586.     DW RBRAC-4
  1587. SMUDG    DW DOCOL
  1588.     DW LATES
  1589.     DW LIT
  1590.     DW 20H
  1591.     DW TOGGL
  1592.     DW SEMIS
  1593. ;
  1594.     DB 83H
  1595.     DB 'HE'
  1596.     DB 'X'+80H
  1597.     DW SMUDG-9
  1598. HEX    DW DOCOL
  1599.     DW LIT
  1600.     DW 10H
  1601.     DW BASE
  1602.     DW STORE
  1603.     DW SEMIS
  1604. ;
  1605.     DB 87H
  1606.     DB 'DECIMA'
  1607.     DB 'L'+80H
  1608.     DW HEX-6
  1609. DEC    DW DOCOL
  1610.     DW LIT
  1611.     DW 0AH
  1612.     DW BASE
  1613.     DW STORE
  1614.     DW SEMIS
  1615. ;
  1616.     DB 87H
  1617.     DB '(;CODE'
  1618.     DB ')'+80H
  1619.     DW DEC-0AH
  1620. PSCOD    DW DOCOL
  1621.     DW FROMR
  1622.     DW LATES
  1623.     DW PFA
  1624.     DW CFA
  1625.     DW STORE
  1626.     DW SEMIS
  1627. ;
  1628.     DB 0C5H
  1629.     DB ';COD'
  1630.     DB 'E'+80H
  1631.     DW PSCOD-0AH
  1632. SEMIC    DW DOCOL
  1633.     DW QCSP
  1634.     DW COMP
  1635.     DW PSCOD
  1636.     DW LBRAC
  1637. SEMI1    DW NOOP
  1638.     DW SEMIS
  1639. ;
  1640.     DB 87H
  1641.     DB '<BUILD'
  1642.     DB 'S'+80H
  1643.     DW SEMIC-8
  1644. BUILD    DW DOCOL
  1645.     DW ZERO
  1646.     DW CON
  1647.     DW SEMIS
  1648. ;
  1649.     DB 85H
  1650.     DB 'DOES'
  1651.     DB '>'+80H
  1652.     DW BUILD-0AH
  1653. DOES    DW DOCOL
  1654.     DW FROMR
  1655.     DW LATES
  1656.     DW PFA
  1657.     DW STORE
  1658.     DW PSCOD
  1659. DODOE    LHLD RPP
  1660.     DCX H
  1661.     MOV M,B
  1662.     DCX H
  1663.     MOV M,C
  1664.     SHLD RPP
  1665.     INX D
  1666.     XCHG
  1667.     MOV C,M
  1668.     INX H
  1669.     MOV B,M
  1670.     INX H
  1671.     JMP HPUSH
  1672. ;
  1673.     DB 85H
  1674.     DB 'COUN'
  1675.     DB 'T'+80H
  1676.     DW DOES-8
  1677. COUNT    DW DOCOL
  1678.     DW DUP
  1679.     DW ONEP
  1680.     DW SWAP
  1681.     DW CAT
  1682.     DW SEMIS
  1683. ;
  1684.     DB 84H
  1685.     DB 'TYP'
  1686.     DB 'E'+80H
  1687.     DW COUNT-8
  1688. TYPE    DW DOCOL
  1689.     DW DDUP
  1690.     DW ZBRAN
  1691.     DW TYPE1-$
  1692.     DW OVER
  1693.     DW PLUS
  1694.     DW SWAP
  1695.     DW XDO
  1696. TYPE2    DW IDO
  1697.     DW CAT
  1698.     DW EMIT
  1699.     DW XLOOP
  1700.     DW TYPE2-$
  1701.     DW BRAN
  1702.     DW TYPE3-$
  1703. TYPE1    DW DROP
  1704. TYPE3    DW SEMIS
  1705. ;
  1706.     DB 89H
  1707.     DB '-TRAILIN'
  1708.     DB 'G'+80H
  1709.     DW TYPE-7
  1710. DTRAI    DW DOCOL
  1711.     DW DUP
  1712.     DW ZERO
  1713.     DW XDO
  1714. DTRA1    DW OVER
  1715.     DW OVER
  1716.     DW PLUS
  1717.     DW ONE
  1718.     DW SUBB
  1719.     DW CAT
  1720.     DW BL
  1721.     DW SUBB
  1722.     DW ZBRAN
  1723.     DW DTRA2-$
  1724.     DW LEAVE
  1725.     DW BRAN
  1726.     DW DTRA3-$
  1727. DTRA2    DW ONE
  1728.     DW SUBB
  1729. DTRA3    DW XLOOP
  1730.     DW DTRA1-$
  1731.     DW SEMIS
  1732. ;
  1733.     DB 84H
  1734.     DB '(."'
  1735.     DB ')'+80H
  1736.     DW DTRAI-0CH
  1737. PDOTQ    DW DOCOL
  1738.     DW RR
  1739.     DW COUNT
  1740.     DW DUP
  1741.     DW ONEP
  1742.     DW FROMR
  1743.     DW PLUS
  1744.     DW TOR
  1745.     DW TYPE
  1746.     DW SEMIS
  1747. ;
  1748.     DB 0C2H
  1749.     DB '.'
  1750.     DB '"'+80H
  1751.     DW PDOTQ-7
  1752. DOTQ    DW DOCOL
  1753.     DW LIT
  1754.     DW 22H
  1755.     DW STATE
  1756.     DW AT
  1757.     DW ZBRAN
  1758.     DW DOTQ1-$
  1759.     DW COMP
  1760.     DW PDOTQ
  1761.     DW WORD
  1762.     DW HERE
  1763.     DW CAT
  1764.     DW ONEP
  1765.     DW ALLOT
  1766.     DW BRAN
  1767.     DW DOTQ2-$
  1768. DOTQ1    DW WORD
  1769.     DW HERE
  1770.     DW COUNT
  1771.     DW TYPE
  1772. DOTQ2    DW SEMIS
  1773. ;
  1774.     DB 86H
  1775.     DB 'EXPEC'
  1776.     DB 'T'+80H
  1777.     DW DOTQ-5
  1778. EXPEC    DW DOCOL
  1779.     DW OVER
  1780.     DW PLUS
  1781.     DW OVER
  1782.     DW XDO
  1783. EXPE1    DW KEY
  1784.     DW DUP
  1785.     DW LIT
  1786.     DW 0EH
  1787.     DW PORIG
  1788.     DW AT
  1789.     DW EQUAL
  1790.     DW ZBRAN
  1791.     DW EXPE2-$
  1792.     DW DROP
  1793.     DW DUP
  1794.     DW IDO
  1795.     DW EQUAL
  1796.     DW DUP
  1797.     DW FROMR
  1798.     DW TWO
  1799.     DW SUBB
  1800.     DW PLUS
  1801.     DW TOR
  1802.     DW ZBRAN
  1803.     DW EXPE6-$
  1804.     DW LIT
  1805.     DW BELL
  1806.     DW BRAN
  1807.     DW EXPE7-$
  1808. EXPE6    DW LIT
  1809.     DW BSOUT
  1810. EXPE7    DW BRAN
  1811.     DW EXPE3-$
  1812. EXPE2    DW DUP
  1813.     DW LIT
  1814.     DW 0DH
  1815.     DW EQUAL
  1816.     DW ZBRAN
  1817.     DW EXPE4-$
  1818.     DW LEAVE
  1819.     DW DROP
  1820.     DW BL
  1821.     DW ZERO
  1822.     DW BRAN
  1823.     DW EXPE5-$
  1824. EXPE4    DW DUP
  1825. EXPE5    DW IDO
  1826.     DW CSTOR
  1827.     DW ZERO
  1828.     DW IDO
  1829.     DW ONEP
  1830.     DW STORE
  1831. EXPE3    DW EMIT
  1832.     DW XLOOP
  1833.     DW EXPE1-$
  1834.     DW DROP
  1835.     DW SEMIS
  1836. ;
  1837.     DB 85H
  1838.     DB 'QUER'
  1839.     DB 'Y'+80H
  1840.     DW EXPEC-9
  1841. QUERY    DW DOCOL
  1842.     DW TIB
  1843.     DW AT
  1844.     DW LIT
  1845.     DW 50H
  1846.     DW EXPEC
  1847.     DW ZERO
  1848.     DW INN
  1849.     DW STORE
  1850.     DW SEMIS
  1851. ;
  1852.     DB 0C1H
  1853.     DB 80H
  1854.     DW QUERY-8
  1855. NULL    DW DOCOL
  1856.     DW BLK
  1857.     DW AT
  1858.     DW ZBRAN
  1859.     DW NULL1-$
  1860.     DW ONE
  1861.     DW BLK
  1862.     DW PSTOR
  1863.     DW ZERO
  1864.     DW INN
  1865.     DW STORE
  1866.     DW BLK
  1867.     DW AT
  1868.     DW BSCR
  1869.     DW ONE
  1870.     DW SUBB
  1871.     DW ANDD
  1872.     DW ZEQU
  1873.     DW ZBRAN
  1874.     DW NULL2-$
  1875.     DW QEXEC
  1876.     DW FROMR
  1877.     DW DROP
  1878. NULL2    DW BRAN
  1879.     DW NULL3-$
  1880. NULL1    DW FROMR
  1881.     DW DROP
  1882. NULL3    DW SEMIS
  1883. ;
  1884.     DB 84H
  1885.     DB 'FIL'
  1886.     DB 'L'+80H
  1887.     DW NULL-4
  1888. FILL    DW $+2
  1889.     MOV L,C
  1890.     MOV H,B
  1891.     POP D
  1892.     POP B
  1893.     XTHL
  1894.     XCHG
  1895. FILL1    MOV A,B
  1896.     ORA C
  1897.     JZ FILL2
  1898.     MOV A,L
  1899.     STAX D
  1900.     INX D
  1901.     DCX B
  1902.     JMP FILL1
  1903. FILL2    POP B
  1904.     JMP NEXT
  1905. ;
  1906.     DB 85H
  1907.     DB 'ERAS'
  1908.     DB 'E'+80H
  1909.     DW FILL-7
  1910. ERASEE    DW DOCOL
  1911.     DW ZERO
  1912.     DW FILL
  1913.     DW SEMIS
  1914. ;
  1915.     DB 86H
  1916.     DB 'BLANK'
  1917.     DB 'S'+80H
  1918.     DW ERASEE-8
  1919. BLANK    DW DOCOL
  1920.     DW BL
  1921.     DW FILL
  1922.     DW SEMIS
  1923. ;
  1924.     DB 84H
  1925.     DB 'HOL'
  1926.     DB 'D'+80H
  1927.     DW BLANK-9
  1928. HOLD    DW DOCOL
  1929.     DW LIT
  1930.     DW -1
  1931.     DW HLD
  1932.     DW PSTOR
  1933.     DW HLD
  1934.     DW AT
  1935.     DW CSTOR
  1936.     DW SEMIS
  1937. ;
  1938.     DB 83H
  1939.     DB 'PA'
  1940.     DB 'D'+80H
  1941.     DW HOLD-7
  1942. PAD    DW DOCOL
  1943.     DW HERE
  1944.     DW LIT
  1945.     DW 44H
  1946.     DW PLUS
  1947.     DW SEMIS
  1948. ;
  1949.     DB 84H
  1950.     DB 'WOR'
  1951.     DB 'D'+80H
  1952.     DW PAD-6
  1953. WORD    DW DOCOL
  1954.     DW BLK
  1955.     DW AT
  1956.     DW ZBRAN
  1957.     DW WORD1-$
  1958.     DW BLK
  1959.     DW AT
  1960.     DW BLOCK
  1961.     DW BRAN
  1962.     DW WORD2-$
  1963. WORD1    DW TIB
  1964.     DW AT
  1965. WORD2    DW INN
  1966.     DW AT
  1967.     DW PLUS
  1968.     DW SWAP
  1969.     DW ENCL
  1970.     DW HERE
  1971.     DW LIT
  1972.     DW 22H
  1973.     DW BLANK
  1974.     DW INN
  1975.     DW PSTOR
  1976.     DW OVER
  1977.     DW SUBB
  1978.     DW TOR
  1979.     DW RR
  1980.     DW HERE
  1981.     DW CSTOR
  1982.     DW PLUS
  1983.     DW HERE
  1984.     DW ONEP
  1985.     DW FROMR
  1986.     DW CMOVE
  1987.     DW SEMIS
  1988. ;
  1989.     DB 88H
  1990.     DB '(NUMBER'
  1991.     DB ')'+80H
  1992.     DW WORD-7
  1993. PNUMB    DW DOCOL
  1994. PNUM1    DW ONEP
  1995.     DW DUP
  1996.     DW TOR
  1997.     DW CAT
  1998.     DW BASE
  1999.     DW AT
  2000.     DW DIGIT
  2001.     DW ZBRAN
  2002.     DW PNUM2-$
  2003.     DW SWAP
  2004.     DW BASE
  2005.     DW AT
  2006.     DW USTAR
  2007.     DW DROP
  2008.     DW ROT
  2009.     DW BASE
  2010.     DW AT
  2011.     DW USTAR
  2012.     DW DPLUS
  2013.     DW DPL
  2014.     DW AT
  2015.     DW ONEP
  2016.     DW ZBRAN
  2017.     DW PNUM3-$
  2018.     DW ONE
  2019.     DW DPL
  2020.     DW PSTOR
  2021. PNUM3    DW FROMR
  2022.     DW BRAN
  2023.     DW PNUM1-$
  2024. PNUM2    DW FROMR
  2025.     DW SEMIS
  2026. ;
  2027.     DB 86H
  2028.     DB 'NUMBE'
  2029.     DB 'R'+80H
  2030.     DW PNUMB-0BH
  2031. NUMB    DW DOCOL
  2032.     DW ZERO
  2033.     DW ZERO
  2034.     DW ROT
  2035.     DW DUP
  2036.     DW ONEP
  2037.     DW CAT
  2038.     DW LIT
  2039.     DW 2DH
  2040.     DW EQUAL
  2041.     DW DUP
  2042.     DW TOR
  2043.     DW PLUS
  2044.     DW LIT
  2045.     DW -1
  2046. NUMB1    DW DPL
  2047.     DW STORE
  2048.     DW PNUMB
  2049.     DW DUP
  2050.     DW CAT
  2051.     DW BL
  2052.     DW SUBB
  2053.     DW ZBRAN
  2054.     DW NUMB2-$
  2055.     DW DUP
  2056.     DW CAT
  2057.     DW LIT
  2058.     DW 2EH
  2059.     DW SUBB
  2060.     DW ZERO
  2061.     DW QERR
  2062.     DW ZERO
  2063.     DW BRAN
  2064.     DW NUMB1-$
  2065. NUMB2    DW DROP
  2066.     DW FROMR
  2067.     DW ZBRAN
  2068.     DW NUMB3-$
  2069.     DW DMINU
  2070. NUMB3    DW SEMIS
  2071. ;
  2072.     DB 85H
  2073.     DB '-FIN'
  2074.     DB 'D'+80H
  2075.     DW NUMB-9
  2076. DFIND    DW DOCOL
  2077.     DW BL
  2078.     DW WORD
  2079.     DW HERE
  2080.     DW CONT
  2081.     DW AT
  2082.     DW AT
  2083.     DW PFIND
  2084.     DW DUP
  2085.     DW ZEQU 
  2086.     DW ZBRAN
  2087.     DW DFIN1-$
  2088.     DW DROP
  2089.     DW HERE
  2090.     DW LATES
  2091.     DW PFIND
  2092. DFIN1    DW SEMIS
  2093. ;
  2094.     DB 87H
  2095.     DB '(ABORT'
  2096.     DB ')'+80H
  2097.     DW DFIND-8
  2098. PABOR    DW DOCOL
  2099.     DW ABORT
  2100.     DW SEMIS
  2101. ;
  2102.     DB 85H
  2103.     DB 'ERRO'
  2104.     DB 'R'+80H
  2105.     DW PABOR-0AH
  2106. ERROR    DW DOCOL
  2107.     DW WARN
  2108.     DW AT
  2109.     DW ZLESS
  2110.     DW ZBRAN
  2111.     DW ERRO1-$
  2112.     DW PABOR
  2113. ERRO1    DW HERE
  2114.     DW COUNT
  2115.     DW TYPE
  2116.     DW PDOTQ
  2117.     DB 2
  2118.     DB '? '
  2119.     DW MESS
  2120.     DW SPSTO
  2121. ;    CHANGE FROM FIG MODEL
  2122. ;    DW INN,AT,BLK,AT
  2123.     DW BLK,AT
  2124.     DW DDUP
  2125.     DW ZBRAN,ERRO2-$
  2126.     DW INN,AT
  2127.     DW SWAP
  2128. ERRO2    DW QUIT
  2129. ;
  2130.     DB 83H
  2131.     DB 'ID'
  2132.     DB '.'+80H
  2133.     DW ERROR-8
  2134. IDDOT    DW DOCOL
  2135.     DW PAD
  2136.     DW LIT
  2137.     DW 20H
  2138.     DW LIT
  2139.     DW 5FH
  2140.     DW FILL
  2141.     DW DUP
  2142.     DW PFA
  2143.     DW LFA
  2144.     DW OVER
  2145.     DW SUBB
  2146.     DW PAD
  2147.     DW SWAP
  2148.     DW CMOVE
  2149.     DW PAD
  2150.     DW COUNT
  2151.     DW LIT
  2152.     DW 1FH
  2153.     DW ANDD
  2154.     DW TYPE
  2155.     DW SPACE
  2156.     DW SEMIS
  2157. ;
  2158.     DB 86H
  2159.     DB 'CREAT'
  2160.     DB 'E'+80H
  2161.     DW IDDOT-6
  2162. CREAT    DW DOCOL
  2163.     DW DFIND
  2164.     DW ZBRAN
  2165.     DW CREA1-$
  2166.     DW DROP
  2167.     DW NFA
  2168.     DW IDDOT
  2169.     DW LIT
  2170.     DW 4
  2171.     DW MESS
  2172.     DW SPACE
  2173. CREA1    DW HERE
  2174.     DW DUP
  2175.     DW CAT
  2176.     DW WIDTH
  2177.     DW AT
  2178.     DW MIN
  2179.     DW ONEP
  2180.     DW ALLOT
  2181.     DW DUP
  2182.     DW LIT
  2183.     DW 0A0H
  2184.     DW TOGGL
  2185.     DW HERE
  2186.     DW ONE
  2187.     DW SUBB
  2188.     DW LIT
  2189.     DW 80H
  2190.     DW TOGGL
  2191.     DW LATES
  2192.     DW COMMA
  2193.     DW CURR
  2194.     DW AT
  2195.     DW STORE
  2196.     DW HERE
  2197.     DW TWOP
  2198.     DW COMMA
  2199.     DW SEMIS
  2200. ;
  2201.     DB 0C9H
  2202.     DB '[COMPILE'
  2203.     DB ']'+80H
  2204.     DW CREAT-9
  2205. BCOMP    DW DOCOL
  2206.     DW DFIND
  2207.     DW ZEQU
  2208.     DW ZERO
  2209.     DW QERR
  2210.     DW DROP
  2211.     DW CFA
  2212.     DW COMMA
  2213.     DW SEMIS
  2214. ;
  2215.     DB 0C7H
  2216.     DB 'LITERA'
  2217.     DB 'L'+80H
  2218.     DW BCOMP-0CH
  2219. LITER    DW DOCOL
  2220.     DW STATE
  2221.     DW AT
  2222.     DW ZBRAN
  2223.     DW LITE1-$
  2224.     DW COMP
  2225.     DW LIT
  2226.     DW COMMA
  2227. LITE1    DW SEMIS
  2228. ;
  2229.     DB 0C8H
  2230.     DB 'DLITERA'
  2231.     DB 'L'+80H
  2232.     DW LITER-0AH
  2233. DLITE    DW DOCOL
  2234.     DW STATE
  2235.     DW AT
  2236.     DW ZBRAN
  2237.     DW DLIT1-$
  2238.     DW SWAP
  2239.     DW LITER
  2240.     DW LITER
  2241. DLIT1    DW SEMIS
  2242. ;
  2243.     DB 86H
  2244.     DB '?STAC'
  2245.     DB 'K'+80H
  2246.     DW DLITE-0BH
  2247. QSTAC    DW DOCOL
  2248.     DW SPAT
  2249.     DW SZERO
  2250.     DW AT
  2251.     DW SWAP
  2252.     DW ULESS
  2253.     DW ONE
  2254.     DW QERR
  2255.     DW SPAT
  2256.     DW HERE
  2257.     DW LIT
  2258.     DW 80H
  2259.     DW PLUS
  2260.     DW ULESS
  2261.     DW LIT
  2262.     DW 7
  2263.     DW QERR
  2264.     DW SEMIS
  2265. ;
  2266.     DB 89H
  2267.     DB 'INTERPRE'
  2268.     DB 'T'+80H
  2269.     DW QSTAC-9
  2270. INTER    DW DOCOL
  2271. INTE1    DW DFIND
  2272.     DW ZBRAN
  2273.     DW INTE2-$
  2274.     DW STATE
  2275.     DW AT
  2276.     DW LESS
  2277.     DW ZBRAN
  2278.     DW INTE3-$
  2279.     DW CFA
  2280.     DW COMMA
  2281.     DW BRAN
  2282.     DW INTE4-$
  2283. INTE3    DW CFA
  2284.     DW EXEC
  2285. INTE4    DW QSTAC
  2286.     DW BRAN
  2287.     DW INTE5-$
  2288. INTE2    DW HERE
  2289.     DW NUMB
  2290.     DW DPL
  2291.     DW AT
  2292.     DW ONEP
  2293.     DW ZBRAN
  2294.     DW INTE6-$
  2295.     DW DLITE
  2296.     DW BRAN
  2297.     DW INTE7-$
  2298. INTE6    DW DROP
  2299.     DW LITER
  2300. INTE7    DW QSTAC
  2301. INTE5    DW BRAN
  2302.     DW INTE1-$
  2303. ;
  2304.     DB 89H
  2305.     DB 'IMMEDIAT'
  2306.     DB 'E'+80H
  2307.     DW INTER-0CH
  2308. IMMED    DW DOCOL
  2309.     DW LATES
  2310.     DW LIT
  2311.     DW 40H
  2312.     DW TOGGL
  2313.     DW SEMIS
  2314. ;
  2315.     DB 8AH
  2316.     DB 'VOCABULAR'
  2317.     DB 'Y'+80H
  2318.     DW IMMED-0CH
  2319. VOCAB    DW DOCOL
  2320.     DW BUILD
  2321.     DW LIT
  2322.     DW 0A081H
  2323.     DW COMMA
  2324.     DW CURR
  2325.     DW AT
  2326.     DW CFA
  2327.     DW COMMA
  2328.     DW HERE
  2329.     DW VOCL
  2330.     DW AT
  2331.     DW COMMA
  2332.     DW VOCL
  2333.     DW STORE
  2334.     DW DOES
  2335. DOVOC    DW TWOP
  2336.     DW CONT
  2337.     DW STORE
  2338.     DW SEMIS
  2339. ;
  2340.     DB 0C5H
  2341.     DB 'FORT'
  2342.     DB 'H'+80H
  2343.     DW VOCAB-0DH
  2344. FORTH    DW DODOE
  2345.     DW DOVOC
  2346.     DW 0A081H
  2347.     DW TASK-7
  2348. ;
  2349.     DW 0
  2350. ;
  2351.     DB 8BH
  2352.     DB 'DEFINITION'
  2353.     DB 'S'+80H
  2354.     DW FORTH-8
  2355. DEFIN    DW DOCOL
  2356.     DW CONT
  2357.     DW AT
  2358.     DW CURR
  2359.     DW STORE
  2360.     DW SEMIS
  2361. ;
  2362.     DB 0C1H
  2363.     DB '('+80H
  2364.     DW DEFIN-0EH
  2365. PAREN    DW DOCOL
  2366.     DW LIT
  2367.     DW 29H
  2368.     DW WORD
  2369.     DW SEMIS
  2370. ;
  2371.     DB 84H
  2372.     DB 'QUI'
  2373.     DB 'T'+80H
  2374.     DW PAREN-4
  2375. QUIT    DW DOCOL
  2376.     DW ZERO
  2377.     DW BLK
  2378.     DW STORE
  2379.     DW LBRAC
  2380. QUIT1    DW RPSTO
  2381.     DW CR
  2382.     DW QUERY
  2383.     DW INTER
  2384.     DW STATE
  2385.     DW AT
  2386.     DW ZEQU
  2387.     DW ZBRAN
  2388.     DW QUIT2-$
  2389.     DW PDOTQ
  2390.     DB 2
  2391.     DB 'OK'
  2392. QUIT2    DW BRAN
  2393.     DW QUIT1-$
  2394. ;
  2395.     DB 85H
  2396.     DB 'ABOR'
  2397.     DB 'T'+80H
  2398.     DW QUIT-7
  2399. ABORT    DW DOCOL
  2400.     DW SPSTO
  2401.     DW DEC
  2402.     DW QSTAC
  2403.     DW CR
  2404.     DW DOTCPU
  2405.     DW PDOTQ
  2406.     DB 0DH
  2407.     DB 'FIG-FORTH '
  2408.     DB FIGREL+30H,ADOT,FIGREV+30H
  2409.     DW FORTH
  2410.     DW DEFIN
  2411.     DW QUIT
  2412. ;
  2413. ;
  2414. WRM    LXI B,WRM1
  2415.     JMP NEXT
  2416. WRM1    DW WARM
  2417. ;
  2418.     DB 84H
  2419.     DB 'WAR'
  2420.     DB 'M'+80H
  2421.     DW ABORT-8
  2422. WARM    DW DOCOL
  2423.     DW MTBUF
  2424.     DW ABORT
  2425. ;
  2426. CLD    LXI B,CLD1
  2427.     LHLD ORIG+12H
  2428.     SPHL
  2429.     JMP NEXT
  2430. CLD1    DW COLD
  2431. ;
  2432.     DB 84H
  2433.     DB 'COL'
  2434.     DB 'D'+80H
  2435.     DW WARM-7
  2436. COLD    DW DOCOL
  2437.     DW MTBUF
  2438.     DW ZERO,DENSTY
  2439.     DW STORE
  2440.     DW LIT,BUF1
  2441.     DW USE,STORE
  2442.     DW LIT,BUF1
  2443.     DW PREV,STORE
  2444.     DW DRZER
  2445.     DW LIT,0
  2446.     DW LIT,EPRINT
  2447.     DW STORE
  2448. ;
  2449.     DW LIT
  2450.     DW ORIG+12H
  2451.     DW LIT
  2452.     DW UP
  2453.     DW AT
  2454.     DW LIT
  2455.     DW 6
  2456.     DW PLUS
  2457.     DW LIT
  2458.     DW 10H
  2459.     DW CMOVE
  2460.     DW LIT
  2461.     DW ORIG+0CH
  2462.     DW AT
  2463.     DW LIT
  2464.     DW FORTH+6
  2465.     DW STORE
  2466.     DW ABORT
  2467. ;
  2468.     DB 84H
  2469.     DB 'S->'
  2470.     DB 'D'+80H
  2471.     DW COLD-7
  2472. STOD    DW $+2
  2473.     POP D
  2474.     LXI H,0
  2475.     MOV A,D
  2476.     ANI 80H
  2477.     JZ STOD1
  2478.     DCX H
  2479. STOD1    JMP DPUSH
  2480. ;
  2481.     DB 82H
  2482.     DB '+'
  2483.     DB '-'+80H
  2484.     DW STOD-7
  2485. PM    DW DOCOL
  2486.     DW ZLESS
  2487.     DW ZBRAN
  2488.     DW PM1-$
  2489.     DW MINUS
  2490. PM1    DW SEMIS
  2491. ;
  2492.     DB 83H
  2493.     DB 'D+'
  2494.     DB '-'+80H
  2495.     DW PM-5
  2496. DPM    DW DOCOL
  2497.     DW ZLESS
  2498.     DW ZBRAN
  2499.     DW DPM1-$
  2500.     DW DMINU
  2501. DPM1    DW SEMIS
  2502. ;
  2503.     DB 83H
  2504.     DB 'AB'
  2505.     DB 'S'+80H
  2506.     DW DPM-6
  2507. ABS    DW DOCOL
  2508.     DW DUP
  2509.     DW PM
  2510.     DW SEMIS
  2511. ;
  2512.     DB 84H
  2513.     DB 'DAB'
  2514.     DB 'S'+80H
  2515.     DW ABS-6
  2516. DABS    DW DOCOL
  2517.     DW DUP
  2518.     DW DPM
  2519.     DW SEMIS
  2520. ;
  2521.     DB 83H
  2522.     DB 'MI'
  2523.     DB 'N'+80H
  2524.     DW DABS-7
  2525. MIN    DW DOCOL,TDUP
  2526.     DW GREAT
  2527.     DW ZBRAN
  2528.     DW MIN1-$
  2529.     DW SWAP
  2530. MIN1    DW DROP
  2531.     DW SEMIS
  2532. ;
  2533.     DB 83H
  2534.     DB 'MA'
  2535.     DB 'X'+80H
  2536.     DW MIN-6
  2537. MAX    DW DOCOL,TDUP
  2538.     DW LESS
  2539.     DW ZBRAN
  2540.     DW MAX1-$
  2541.     DW SWAP
  2542. MAX1    DW DROP
  2543.     DW SEMIS
  2544. ;
  2545.     DB 82H
  2546.     DB 'M'
  2547.     DB '*'+80H
  2548.     DW MAX-6
  2549. MSTAR    DW DOCOL,TDUP
  2550.     DW XORR
  2551.     DW TOR
  2552.     DW ABS
  2553.     DW SWAP
  2554.     DW ABS
  2555.     DW USTAR
  2556.     DW FROMR
  2557.     DW DPM
  2558.     DW SEMIS
  2559. ;
  2560.     DB 82H
  2561.     DB 'M'
  2562.     DB '/'+80H
  2563.     DW MSTAR-5
  2564. MSLAS    DW DOCOL
  2565.     DW OVER
  2566.     DW TOR
  2567.     DW TOR
  2568.     DW DABS
  2569.     DW RR
  2570.     DW ABS
  2571.     DW USLAS
  2572.     DW FROMR
  2573.     DW RR
  2574.     DW XORR
  2575.     DW PM
  2576.     DW SWAP
  2577.     DW FROMR
  2578.     DW PM
  2579.     DW SWAP
  2580.     DW SEMIS
  2581. ;
  2582.     DB 81H
  2583.     DB '*'+80H
  2584.     DW MSLAS-5
  2585. STAR    DW DOCOL
  2586.     DW MSTAR
  2587.     DW DROP
  2588.     DW SEMIS
  2589. ;
  2590.     DB 84H
  2591.     DB '/MO'
  2592.     DB 'D'+80H
  2593.     DW STAR-4
  2594. SLMOD    DW DOCOL
  2595.     DW TOR
  2596.     DW STOD
  2597.     DW FROMR
  2598.     DW MSLAS
  2599.     DW SEMIS
  2600. ;
  2601.     DB 81H
  2602.     DB '/'+80H
  2603.     DW SLMOD-7
  2604. SLASH    DW DOCOL
  2605.     DW SLMOD
  2606.     DW SWAP
  2607.     DW DROP
  2608.     DW SEMIS
  2609. ;
  2610.     DB 83H
  2611.     DB 'MO'
  2612.     DB 'D'+80H
  2613.     DW SLASH-4
  2614. MODD    DW DOCOL
  2615.     DW SLMOD
  2616.     DW DROP
  2617.     DW SEMIS
  2618. ;
  2619.     DB 85H
  2620.     DB '*/MO'
  2621.     DB 'D'+80H
  2622.     DW MODD-6
  2623. SSMOD    DW DOCOL
  2624.     DW TOR
  2625.     DW MSTAR
  2626.     DW FROMR
  2627.     DW MSLAS
  2628.     DW SEMIS
  2629. ;
  2630.     DB 82H
  2631.     DB '*'
  2632.     DB '/'+80H
  2633.     DW SSMOD-8
  2634. SSLA    DW DOCOL
  2635.     DW SSMOD
  2636.     DW SWAP
  2637.     DW DROP
  2638.     DW SEMIS
  2639. ;
  2640.     DB 85H
  2641.     DB 'M/MO'
  2642.     DB 'D'+80H
  2643.     DW SSLA-5
  2644. MSMOD    DW DOCOL
  2645.     DW TOR
  2646.     DW ZERO
  2647.     DW RR
  2648.     DW USLAS
  2649.     DW FROMR
  2650.     DW SWAP
  2651.     DW TOR
  2652.     DW USLAS
  2653.     DW FROMR
  2654.     DW SEMIS
  2655. ;
  2656. ;    BLOCK MOVED DOWN 2 PAGES
  2657. ;
  2658. ;
  2659.     DB 86H
  2660.     DB '(LINE'
  2661.     DB ')'+80H
  2662.     DW MSMOD-8
  2663. PLINE    DW DOCOL
  2664.     DW TOR
  2665.     DW LIT
  2666.     DW 40H
  2667.     DW BBUF
  2668.     DW SSMOD 
  2669.     DW FROMR
  2670.     DW BSCR
  2671.     DW STAR
  2672.     DW PLUS
  2673.     DW BLOCK
  2674.     DW PLUS
  2675.     DW LIT
  2676.     DW 40H
  2677.     DW SEMIS
  2678. ;
  2679.     DB 85H
  2680.     DB '.LIN'
  2681.     DB 'E'+80H
  2682.     DW PLINE-9
  2683. DLINE    DW DOCOL
  2684.     DW PLINE
  2685.     DW DTRAI
  2686.     DW TYPE
  2687.     DW SEMIS
  2688. ;
  2689.     DB 87H
  2690.     DB 'MESSAG'
  2691.     DB 'E'+80H
  2692.     DW DLINE-8
  2693. MESS    DW DOCOL
  2694.     DW WARN
  2695.     DW AT
  2696.     DW ZBRAN
  2697.     DW MESS1-$
  2698.     DW DDUP
  2699.     DW ZBRAN
  2700.     DW MESS2-$
  2701.     DW LIT
  2702.     DW 4
  2703.     DW OFSET
  2704.     DW AT
  2705.     DW BSCR
  2706.     DW SLASH
  2707.     DW SUBB
  2708.     DW DLINE
  2709.     DW SPACE
  2710. MESS2    DW BRAN
  2711.     DW MESS3-$
  2712. MESS1    DW PDOTQ
  2713.     DB 6
  2714.     DB 'MSG # '
  2715.     DW DOT
  2716. MESS3    DW SEMIS
  2717. ;
  2718. ;    8080 PORT FETCH AND STORE
  2719. ;    ( SELF MODIFYING CODE, NOT REENTRANT)
  2720. ;
  2721.     DB 82H
  2722.     DB 'P'
  2723.     DB '@'+80H
  2724.     DW MESS-0AH
  2725. PTAT:    DW $+2
  2726.     POP D
  2727.     LXI H,$+5
  2728.     MOV M,E
  2729.     IN 0
  2730.     MOV L,A
  2731.     MVI H,0
  2732.     JMP HPUSH
  2733. ;
  2734.     DB 82H
  2735.     DB 'P'
  2736.     DB '!'+80H
  2737.     DW PTAT-5
  2738. PTSTO:    DW $+2
  2739.     POP D
  2740.     LXI H,$+7
  2741.     MOV M,E
  2742.     POP H
  2743.     MOV A,L
  2744.     OUT 0
  2745.     JMP NEXT
  2746. ;
  2747. ;    CP/M DISK INTERFACE
  2748. ;
  2749. ;    CP/M BIOS CALLS USED
  2750. ;
  2751. ;    NOTE EQU'S ARE 3 LOWER THAN DOCUMENTED OFFSETS
  2752. ;    BECAUSE BASE ADDR IS BIOS+3
  2753. ;
  2754. RITSEC    EQU 39
  2755. RDSEC    EQU 36
  2756. SETDMA    EQU 33
  2757. SETSEC    EQU 30
  2758. SETTRK    EQU 27
  2759. SETDSK    EQU 24
  2760. ;
  2761. ;    DOUBLE DENSITY 8" CAPACITIES
  2762. SPT2    EQU 52
  2763. TRKS2    EQU 77
  2764. SPDRV2    EQU SPT2*TRKS2
  2765. ;    SINGLE DENSITY 8" CAPACITIES
  2766. SPT1    EQU 20
  2767. TRKS1    EQU 40
  2768. SPDRV1    EQU SPT1*TRKS1
  2769. ;
  2770. BPS    EQU 128
  2771. MXDRV    EQU 2
  2772. ;
  2773. ;    FORTH VARIABLES AND CONSTANTS USED IN DISK INTERFACE
  2774. ;
  2775.     DB 85H
  2776.     DB 'DRIV'
  2777.     DB 'E'+80H
  2778.     DW PTSTO-5
  2779. DRIVE    DW DOVAR,0
  2780. ;
  2781.     DB 83H
  2782.     DB 'SE'
  2783.     DB 'C'+80H
  2784.     DW DRIVE-8
  2785. SEC:    DW DOVAR
  2786.     DW 0
  2787. ;
  2788.     DB 85H
  2789.     DB 'TRAC'
  2790.     DB 'K'+80H
  2791.     DW SEC-6
  2792. TRACK:    DW DOVAR,0
  2793. ;
  2794.     DB 83H
  2795.     DB 'US'
  2796.     DB 'E'+80H
  2797.     DW TRACK-8
  2798. USE:    DW DOVAR
  2799.     DW BUF1
  2800. ;
  2801.     DB 84H
  2802.     DB 'PRE'
  2803.     DB 'V'+80H
  2804.     DW USE-6
  2805. PREV    DW DOVAR
  2806.     DW BUF1
  2807. ;
  2808.     DB 87H
  2809.     DB 'SEC/BL'
  2810.     DB 'K'+80H
  2811.     DW PREV-7
  2812. SPBLK    DW DOCON
  2813.     DW KBBUF/BPS
  2814. ;
  2815.     DB 85H
  2816.     DB '#BUF'
  2817.     DB 'F'+80H
  2818.     DW SPBLK-10
  2819. NOBUF    DW DOCON,NBUF
  2820. ;
  2821.     DB 87H
  2822.     DB 'DENSIT'
  2823.     DB 'Y'+80H
  2824.     DW NOBUF-8
  2825. DENSTY    DW DOVAR
  2826.     DW 0
  2827. ;
  2828.     DB 8AH
  2829.     DB 'DISK-ERRO'
  2830.     DB 'R'+80H
  2831.     DW DENSTY-10
  2832. DSKERR    DW DOVAR,0
  2833. ;
  2834. ;    DISK INTERFACE HIGH LEVEL ROUTINES
  2835. ;
  2836.     DB 84H
  2837.     DB '+BU'
  2838.     DB 'F'+80H
  2839.     DW DSKERR-13
  2840. PBUF    DW DOCOL
  2841.     DW LIT,CO
  2842.     DW PLUS,DUP
  2843.     DW LIMIT,EQUAL
  2844.     DW ZBRAN,PBUF1-$
  2845.     DW DROP,FIRST
  2846. PBUF1:    DW DUP,PREV
  2847.     DW AT,SUBB
  2848.     DW SEMIS
  2849. ;
  2850.     DB 86H
  2851.     DB 'UPDAT'
  2852.     DB 'E'+80H
  2853.     DW PBUF-7
  2854. UPDAT    DW DOCOL,PREV
  2855.     DW AT,AT
  2856.     DW LIT,8000H
  2857.     DW ORR
  2858.     DW PREV,AT
  2859.     DW STORE,SEMIS
  2860. ;
  2861.     DB 8DH
  2862.     DB 'EMPTY-BUFFER'
  2863.     DB 'S'+80H
  2864.     DW UPDAT-9
  2865. MTBUF    DW DOCOL,FIRST
  2866.     DW LIMIT,OVER
  2867.     DW SUBB,ERASEE
  2868.     DW SEMIS
  2869. ;
  2870.     DB 83H
  2871.     DB 'DR'
  2872.     DB '0'+80H
  2873.     DW MTBUF-16
  2874. DRZER    DW DOCOL,ZERO
  2875.     DW OFSET,STORE
  2876.     DW SEMIS
  2877. ;
  2878.     DB 83H
  2879.     DB 'DR'
  2880.     DB '1'+80H
  2881.     DW DRZER-6
  2882. DRONE    DW DOCOL
  2883.     DW DENSTY,AT
  2884.     DW ZBRAN,DRON1-$
  2885.     DW LIT,SPDRV2
  2886.     DW BRAN,DRON2-$
  2887. DRON1    DW LIT,SPDRV1
  2888. DRON2    DW OFSET,STORE
  2889.     DW SEMIS
  2890. ;
  2891.     DB 86H
  2892.     DB 'BUFFE'
  2893.     DB 'R'+80H
  2894.     DW DRONE-6
  2895. BUFFE:    DW DOCOL,USE
  2896.     DW AT,DUP
  2897.     DW TOR
  2898. BUFF1    DW PBUF
  2899.     DW ZBRAN,BUFF1-$
  2900.     DW USE,STORE
  2901.     DW RR,AT
  2902.     DW ZLESS
  2903.     DW ZBRAN,BUFF2-$
  2904.     DW RR,TWOP
  2905.     DW RR,AT
  2906.     DW LIT,7FFFH
  2907.     DW ANDD,ZERO
  2908.     DW RSLW
  2909. BUFF2    DW RR,STORE
  2910.     DW RR,PREV
  2911.     DW STORE,FROMR
  2912.     DW TWOP,SEMIS
  2913. ;
  2914.     DB 85H
  2915.     DB 'BLOC'
  2916.     DB 'K'+80H
  2917.     DW BUFFE-9
  2918. BLOCK    DW DOCOL,OFSET
  2919.     DW AT,PLUS
  2920.     DW TOR,PREV
  2921.     DW AT,DUP
  2922.     DW AT,RR
  2923.     DW SUBB
  2924.     DW DUP,PLUS
  2925.     DW ZBRAN,BLOC1-$
  2926. BLOC2    DW PBUF,ZEQU
  2927.     DW ZBRAN,BLOC3-$
  2928.     DW DROP,RR
  2929.     DW BUFFE,DUP
  2930.     DW RR,ONE
  2931.     DW RSLW
  2932.     DW TWO,SUBB
  2933. BLOC3    DW DUP,AT
  2934.     DW RR,SUBB
  2935.     DW DUP,PLUS
  2936.     DW ZEQU
  2937.     DW ZBRAN,BLOC2-$
  2938.     DW DUP,PREV
  2939.     DW STORE
  2940. BLOC1    DW FROMR,DROP
  2941.     DW TWOP,SEMIS
  2942. ;
  2943. ;
  2944. ;    CP/M INTERFACE ROUTINES
  2945. ;
  2946. ;
  2947. IOS    LHLD HBASE+1
  2948.     DAD D
  2949.     PCHL
  2950. ;
  2951. ;
  2952.     DB 86H
  2953. ;
  2954.     DB 'SET-I'
  2955.     DB 'O'+80H
  2956.     DW BLOCK-8
  2957. SETIO:    DW $+2
  2958.     PUSH B
  2959.     LHLD USE+2
  2960.     MOV B,H
  2961.     MOV C,L
  2962.     LXI D,SETDMA
  2963.     CALL IOS
  2964. ;
  2965.     LHLD SEC+2
  2966.     MOV C,L
  2967.     LXI D,SETSEC
  2968.     CALL IOS
  2969. ;
  2970.     LHLD TRACK+2
  2971.     MOV B,H
  2972.     MOV C,L
  2973.     LXI D,SETTRK
  2974.     CALL IOS
  2975. ;
  2976.     POP B
  2977.     JMP NEXT
  2978. ;
  2979.     DB 89H
  2980.     DB 'SET-DRIV'
  2981.     DB 'E'+80H
  2982.     DW SETIO-9
  2983. SETDRV:    DW $+2
  2984.     PUSH B
  2985.     LDA DRIVE+2
  2986.     MOV C,A
  2987.     LXI D,SETDSK
  2988.     CALL IOS
  2989.     POP B
  2990.     JMP NEXT
  2991. ;
  2992. ;    T&SCALC (CALCULATES DRIVE, TRACK, AND SECTOR)
  2993. ;
  2994. ;
  2995.     DB 87H
  2996.     DB 'T&SCAL'
  2997.     DB 'C'+80H
  2998.     DW SETDRV-12
  2999. TSCALC:    DW DOCOL,DENSTY
  3000.     DW AT
  3001.     DW ZBRAN,TSCALS-$
  3002.     DW LIT,SPDRV2
  3003.     DW SLMOD
  3004.     DW LIT,MXDRV
  3005.     DW MIN
  3006.     DW DUP,DRIVE
  3007.     DW AT,EQUAL
  3008.     DW ZBRAN,TSCAL1-$
  3009.     DW DROP
  3010.     DW BRAN,TSCAL2-$
  3011. TSCAL1    DW DRIVE,STORE
  3012.     DW SETDRV
  3013. TSCAL2    DW LIT,SPT2
  3014.     DW SLMOD,TRACK
  3015.     DW STORE,ONEP
  3016.     DW SEC,STORE
  3017.     DW SEMIS
  3018. ;    SINGLE DENSITY
  3019. TSCALS    DW LIT,SPDRV1
  3020.     DW SLMOD
  3021.     DW LIT,MXDRV
  3022.     DW MIN
  3023.     DW DUP,DRIVE
  3024.     DW AT,EQUAL
  3025.     DW ZBRAN,TSCAL3-$
  3026.     DW DROP
  3027.     DW BRAN,TSCAL4-$
  3028. TSCAL3    DW DRIVE,STORE
  3029.     DW SETDRV
  3030. TSCAL4    DW LIT,SPT1
  3031.     DW SLMOD,TRACK
  3032.     DW STORE,ONEP
  3033.     DW SEC,STORE
  3034.     DW SEMIS
  3035. ;
  3036. ;    SEC-READ
  3037. ;
  3038.     DB 88H
  3039.     DB 'SEC-REA'
  3040.     DB 'D'+80H
  3041.     DW TSCALC-10
  3042. SECRD    DW $+2
  3043.     PUSH B
  3044.     LXI D,RDSEC
  3045.     CALL IOS
  3046.     STA DSKERR+2
  3047.     POP B
  3048.     JMP NEXT
  3049. ;
  3050. ;    SEC-WRITE
  3051. ;
  3052.     DB 89H
  3053.     DB 'SEC-WRIT'
  3054.     DB 'E'+80H
  3055.     DW SECRD-11
  3056. SECWT    DW $+2
  3057.     PUSH B
  3058.     LXI D,RITSEC
  3059.     CALL IOS
  3060.     STA DSKERR+2
  3061.     POP B
  3062.     JMP NEXT
  3063. ;
  3064.     DB 83H
  3065.     DB 'R/'
  3066.     DB 'W'+80H
  3067.     DW SECWT-12
  3068. RSLW    DW DOCOL
  3069.     DW USE,AT
  3070.     DW TOR
  3071.     DW SWAP,SPBLK
  3072.     DW STAR,ROT
  3073.     DW USE,STORE
  3074.     DW SPBLK,ZERO
  3075.     DW XDO
  3076. RSLW1    DW OVER,OVER
  3077.     DW TSCALC,SETIO
  3078.     DW ZBRAN,RSLW2-$
  3079.     DW SECRD
  3080.     DW BRAN,RSLW3-$
  3081. RSLW2    DW SECWT
  3082. RSLW3    DW ONEP
  3083.     DW LIT,80H
  3084.     DW USE,PSTOR
  3085.     DW XLOOP,RSLW1-$
  3086.     DW DROP,DROP
  3087.     DW FROMR,USE
  3088.     DW STORE,SEMIS
  3089. ;
  3090.     DB 85H
  3091.     DB 'FLUS'
  3092.     DB 'H'+80H
  3093.     DW RSLW-6
  3094. FLUSH    DW DOCOL
  3095.     DW NOBUF,ONEP
  3096.     DW ZERO,XDO
  3097. FLUS1    DW ZERO,BUFFE
  3098.     DW DROP
  3099.     DW XLOOP,FLUS1-$
  3100.     DW SEMIS
  3101. ;
  3102.     DB 84H
  3103.     DB 'LOA'
  3104.     DB 'D'+80H
  3105.     DW FLUSH-8
  3106. LOAD    DW DOCOL,BLK
  3107.     DW AT,TOR
  3108.     DW INN,AT
  3109.     DW TOR,ZERO
  3110.     DW INN,STORE
  3111.     DW BSCR,STAR
  3112.     DW BLK,STORE
  3113.     DW INTER
  3114.     DW FROMR,INN
  3115.     DW STORE
  3116.     DW FROMR,BLK
  3117.     DW STORE
  3118.     DW SEMIS
  3119. ;
  3120.     DB 0C3H
  3121.     DB '--'
  3122.     DB '>'+80H
  3123.     DW LOAD-7
  3124. ARROW    DW DOCOL
  3125.     DW QLOAD
  3126.     DW ZERO
  3127.     DW INN
  3128.     DW STORE
  3129.     DW BSCR
  3130.     DW BLK
  3131.     DW AT
  3132.     DW OVER
  3133.     DW MODD
  3134.     DW SUBB
  3135.     DW BLK
  3136.     DW PSTOR
  3137.     DW SEMIS
  3138. ;
  3139. ;
  3140. ;    CP/M CONSOLE AND PRINTER INTERFACE
  3141. ;
  3142. ;
  3143. KCSTAT    EQU 3
  3144. KCIN    EQU 6
  3145. KCOUT    EQU 9
  3146. KPOUT    EQU 0CH
  3147. ;
  3148. EPRINT    DW 0
  3149. ;
  3150. ;
  3151. CSTAT    PUSH B
  3152.     LXI D,KCSTAT
  3153.     CALL IOS
  3154.     POP B
  3155.     RET
  3156. ;
  3157. ;
  3158. CIN    PUSH B
  3159.     LXI D,KCIN
  3160.     CALL IOS
  3161.     POP B
  3162.     RET
  3163. ;
  3164. COUT    PUSH H
  3165.     LXI D,KCOUT
  3166.     CALL IOS
  3167.     POP H
  3168.     RET
  3169. ;
  3170. POUT    LXI D,KPOUT
  3171.     CALL IOS
  3172.     RET
  3173. ;
  3174. CPOUT    CALL COUT
  3175.     XCHG
  3176.     LXI H,EPRINT
  3177.     MOV A,M
  3178.     ORA A
  3179.     JZ CPOU1
  3180.     MOV C,E
  3181.     CALL POUT
  3182. CPOU1    RET
  3183. ;
  3184. ;    FORTH TO CP/M SERIAL IO INTERFACE
  3185. ;
  3186. PQTER    CALL CSTAT
  3187.     LXI H,0
  3188.     ORA A
  3189.     JZ PQTE1
  3190.     INR L
  3191. PQTE1    JMP HPUSH
  3192. ;
  3193. PKEY    CALL CIN
  3194.     CPI DLE
  3195.     MOV E,A
  3196.     JNZ PKEY1
  3197.     LXI H,EPRINT
  3198.     MVI E,ABL
  3199.     MOV A,M
  3200.     XRI 1
  3201.     MOV M,A
  3202. PKEY1    MOV L,E
  3203.     MVI H,0
  3204.     JMP HPUSH
  3205. ;
  3206. PEMIT    DW $+2
  3207.     POP H
  3208.     PUSH B
  3209.     MOV C,L
  3210.     CALL CPOUT
  3211. ;
  3212.     POP B
  3213.     JMP NEXT
  3214. ;
  3215. PCR    PUSH B
  3216.     MVI C,ACR
  3217.     MOV L,C
  3218.     CALL CPOUT
  3219.     MVI C,LF
  3220.     MOV L,C
  3221.     CALL CPOUT
  3222.     POP B
  3223.     JMP NEXT
  3224. ;
  3225.     DB 0C1H
  3226.     DB 0A7H ;(')
  3227.     DW ARROW-6
  3228. TICK    DW DOCOL
  3229.     DW DFIND
  3230.     DW ZEQU
  3231.     DW ZERO
  3232.     DW QERR
  3233.     DW DROP
  3234.     DW LITER
  3235.     DW SEMIS
  3236. ;
  3237.     DB 86H
  3238.     DB 'FORGE'
  3239.     DB 'T'+80H
  3240.     DW TICK-4
  3241. FORG    DW DOCOL
  3242.     DW CURR
  3243.     DW AT
  3244.     DW CONT
  3245.     DW AT
  3246.     DW SUBB
  3247.     DW LIT
  3248.     DW 18H
  3249.     DW QERR
  3250.     DW TICK
  3251.     DW DUP
  3252.     DW FENCE
  3253.     DW AT
  3254.     DW LESS
  3255.     DW LIT
  3256.     DW 15H
  3257.     DW QERR
  3258.     DW DUP
  3259.     DW NFA
  3260.     DW DP
  3261.     DW STORE
  3262.     DW LFA
  3263.     DW AT
  3264.     DW CONT
  3265.     DW AT
  3266.     DW STORE
  3267.     DW SEMIS
  3268. ;
  3269.     DB 84H
  3270.     DB 'BAC'
  3271.     DB 'K'+80H
  3272.     DW FORG-9
  3273. BACK    DW DOCOL
  3274.     DW HERE
  3275.     DW SUBB
  3276.     DW COMMA
  3277.     DW SEMIS
  3278. ;
  3279.     DB 0C5H
  3280.     DB 'BEGI'
  3281.     DB 'N'+80H
  3282.     DW BACK-7
  3283. BEGIN    DW DOCOL
  3284.     DW QCOMP
  3285.     DW HERE
  3286.     DW ONE
  3287.     DW SEMIS
  3288. ;
  3289.     DB 0C5H
  3290.     DB 'ENDI'
  3291.     DB 'F'+80H
  3292.     DW BEGIN-8
  3293. ENDIFF    DW DOCOL
  3294.     DW QCOMP
  3295.     DW TWO
  3296.     DW QPAIR
  3297.     DW HERE
  3298.     DW OVER
  3299.     DW SUBB
  3300.     DW SWAP
  3301.     DW STORE
  3302.     DW SEMIS
  3303. ;
  3304.     DB 0C4H
  3305.     DB 'THE'
  3306.     DB 'N'+80H
  3307.     DW ENDIFF-8
  3308. THEN    DW DOCOL
  3309.     DW ENDIFF
  3310.     DW SEMIS
  3311. ;
  3312.     DB 0C2H
  3313.     DB 'D'
  3314.     DB 'O'+80H
  3315.     DW THEN-7
  3316. DO    DW DOCOL
  3317.     DW COMP
  3318.     DW XDO
  3319.     DW HERE
  3320.     DW THREE
  3321.     DW SEMIS
  3322. ;
  3323.     DB 0C4H
  3324.     DB 'LOO'
  3325.     DB 'P'+80H
  3326.     DW DO-5
  3327. LOOP    DW DOCOL
  3328.     DW THREE
  3329.     DW QPAIR
  3330.     DW COMP
  3331.     DW XLOOP
  3332.     DW BACK
  3333.     DW SEMIS
  3334. ;
  3335.     DB 0C5H
  3336.     DB '+LOO'
  3337.     DB 'P'+80H
  3338.     DW LOOP-7
  3339. PLOOP    DW DOCOL
  3340.     DW THREE
  3341.     DW QPAIR
  3342.     DW COMP
  3343.     DW XPLOO
  3344.     DW BACK
  3345.     DW SEMIS
  3346. ;
  3347.     DB 0C5H
  3348.     DB 'UNTI'
  3349.     DB 'L'+80H
  3350.     DW PLOOP-8
  3351. UNTIL    DW DOCOL
  3352.     DW ONE
  3353.     DW QPAIR
  3354.     DW COMP 
  3355.     DW ZBRAN
  3356.     DW BACK
  3357.     DW SEMIS
  3358. ;
  3359.     DB 0C3H
  3360.     DB 'EN'
  3361.     DB 'D'+80H
  3362.     DW UNTIL-8
  3363. ENDD    DW DOCOL
  3364.     DW UNTIL
  3365.     DW SEMIS
  3366. ;
  3367.     DB 0C5H
  3368.     DB 'AGAI'
  3369.     DB 'N'+80H
  3370.     DW ENDD-6
  3371. AGAIN    DW DOCOL
  3372.     DW ONE
  3373.     DW QPAIR
  3374.     DW COMP
  3375.     DW BRAN
  3376.     DW BACK
  3377.     DW SEMIS
  3378. ;
  3379.     DB 0C6H
  3380.     DB 'REPEA'
  3381.     DB 'T'+80H
  3382.     DW AGAIN-8
  3383. REPEA    DW DOCOL
  3384.     DW TOR
  3385.     DW TOR
  3386.     DW AGAIN
  3387.     DW FROMR
  3388.     DW FROMR
  3389.     DW TWO
  3390.     DW SUBB
  3391.     DW ENDIFF
  3392.     DW SEMIS
  3393.     DB 0C2H
  3394.     DB 'I'
  3395.     DB 'F'+80H
  3396.     DW REPEA-9
  3397. IFF    DW DOCOL
  3398.     DW COMP
  3399.     DW ZBRAN
  3400.     DW HERE
  3401.     DW ZERO
  3402.     DW COMMA
  3403.     DW TWO
  3404.     DW SEMIS
  3405. ;
  3406.     DB 0C4H
  3407.     DB 'ELS'
  3408.     DB 'E'+80H
  3409.     DW IFF-5
  3410. ELSEE    DW DOCOL
  3411.     DW TWO
  3412.     DW QPAIR
  3413.     DW COMP
  3414.     DW BRAN
  3415.     DW HERE
  3416.     DW ZERO
  3417.     DW COMMA
  3418.     DW SWAP
  3419.     DW TWO
  3420.     DW ENDIFF
  3421.     DW TWO
  3422.     DW SEMIS
  3423. ;
  3424.     DB 0C5H
  3425.     DB 'WHIL'
  3426.     DB 'E'+80H
  3427.     DW ELSEE-7
  3428. WHILE    DW DOCOL
  3429.     DW IFF
  3430.     DW TWOP
  3431.     DW SEMIS
  3432. ;
  3433.     DB 86H
  3434.     DB 'SPACE'
  3435.     DB 'S'+80H
  3436.     DW WHILE-8
  3437. SPACS    DW DOCOL
  3438.     DW ZERO
  3439.     DW MAX
  3440.     DW DDUP
  3441.     DW ZBRAN
  3442.     DW SPAX1-$
  3443.     DW ZERO
  3444.     DW XDO
  3445. SPAX2    DW SPACE
  3446.     DW XLOOP
  3447.     DW SPAX2-$
  3448. SPAX1    DW SEMIS
  3449. ;
  3450.     DB 82H
  3451.     DB '<'
  3452.     DB '#'+80H
  3453.     DW SPACS-9
  3454. BDIGS    DW DOCOL
  3455.     DW PAD
  3456.     DW HLD
  3457.     DW STORE
  3458.     DW SEMIS
  3459. ;
  3460.     DB 82H
  3461.     DB '#'
  3462.     DB '>'+80H
  3463.     DW BDIGS-5
  3464. EDIGS    DW DOCOL
  3465.     DW DROP
  3466.     DW DROP
  3467.     DW HLD
  3468.     DW AT
  3469.     DW PAD
  3470.     DW OVER
  3471.     DW SUBB
  3472.     DW SEMIS
  3473. ;
  3474.     DB 84H
  3475.     DB 'SIG'
  3476.     DB 'N'+80H
  3477.     DW EDIGS-5
  3478. SIGN    DW DOCOL
  3479.     DW ROT
  3480.     DW ZLESS
  3481.     DW ZBRAN
  3482.     DW SIGN1-$
  3483.     DW LIT
  3484.     DW 2DH
  3485.     DW HOLD
  3486. SIGN1    DW SEMIS
  3487. ;
  3488.     DB 81H
  3489.     DB '#'+80H
  3490.     DW SIGN-7
  3491. DIG    DW DOCOL
  3492.     DW BASE
  3493.     DW AT
  3494.     DW MSMOD
  3495.     DW ROT
  3496.     DW LIT
  3497.     DW 9
  3498.     DW OVER
  3499.     DW LESS
  3500.     DW ZBRAN
  3501.     DW DIG1-$
  3502.     DW LIT
  3503.     DW 7
  3504.     DW PLUS
  3505. DIG1    DW LIT
  3506.     DW 30H
  3507.     DW PLUS
  3508.     DW HOLD
  3509.     DW SEMIS
  3510. ;
  3511.     DB 82H
  3512.     DB '#'
  3513.     DB 'S'+80H
  3514.     DW DIG-4
  3515. DIGS    DW DOCOL
  3516. DIGS1    DW DIG
  3517.     DW OVER
  3518.     DW OVER
  3519.     DW ORR
  3520.     DW ZEQU
  3521.     DW ZBRAN
  3522.     DW DIGS1-$
  3523.     DW SEMIS
  3524. ;
  3525.     DB 83H
  3526.     DB 'D.'
  3527.     DB 'R'+80H
  3528.     DW DIGS-5
  3529. DDOTR    DW DOCOL
  3530.     DW TOR
  3531.     DW SWAP
  3532.     DW OVER
  3533.     DW DABS
  3534.     DW BDIGS
  3535.     DW DIGS
  3536.     DW SIGN
  3537.     DW EDIGS
  3538.     DW FROMR
  3539.     DW OVER
  3540.     DW SUBB
  3541.     DW SPACS
  3542.     DW TYPE
  3543.     DW SEMIS
  3544. ;
  3545.     DB 82H
  3546.     DB '.'
  3547.     DB 'R'+80H
  3548.     DW DDOTR-6
  3549. DOTR    DW DOCOL
  3550.     DW TOR
  3551.     DW STOD
  3552.     DW FROMR
  3553.     DW DDOTR
  3554.     DW SEMIS
  3555. ;
  3556.     DB 82H
  3557.     DB 'D'
  3558.     DB '.'+80H
  3559.     DW DOTR-5
  3560. DDOT    DW DOCOL
  3561.     DW ZERO
  3562.     DW DDOTR
  3563.     DW SPACE
  3564.     DW SEMIS
  3565. ;
  3566.     DB 81H
  3567.     DB '.'+80H
  3568.     DW DDOT-5
  3569. DOT    DW DOCOL
  3570.     DW STOD
  3571.     DW DDOT
  3572.     DW SEMIS
  3573. ;
  3574.     DB 81H
  3575.     DB '?'+80H
  3576.     DW DOT-4
  3577. QUES    DW DOCOL
  3578.     DW AT
  3579.     DW DOT
  3580.     DW SEMIS
  3581. ;
  3582.     DB 82H
  3583.     DB 'U'
  3584.     DB '.'+80H
  3585.     DW QUES-4
  3586. UDOT    DW DOCOL
  3587.     DW ZERO
  3588.     DW DDOT
  3589.     DW SEMIS
  3590. ;
  3591.     DB 85H
  3592.     DB 'VLIS'
  3593.     DB 'T'+80H
  3594.     DW UDOT-5
  3595. VLIST    DW DOCOL
  3596.     DW LIT
  3597.     DW 80H
  3598.     DW OUTT
  3599.     DW STORE
  3600.     DW CONT
  3601.     DW AT
  3602.     DW AT
  3603. VLIS1    DW OUTT
  3604.     DW AT
  3605.     DW CSLL
  3606.     DW GREAT
  3607.     DW ZBRAN
  3608.     DW VLIS2-$
  3609.     DW CR
  3610.     DW ZERO
  3611.     DW OUTT
  3612.     DW STORE
  3613. VLIS2    DW DUP
  3614.     DW IDDOT
  3615.     DW SPACE
  3616.     DW SPACE
  3617.     DW PFA
  3618.     DW LFA
  3619.     DW AT
  3620.     DW DUP
  3621.     DW ZEQU
  3622.     DW QTERM
  3623.     DW ORR
  3624.     DW ZBRAN
  3625.     DW VLIS1-$
  3626.     DW DROP
  3627.     DW SEMIS
  3628. ;
  3629. ;------EXIT    CP/M------
  3630. ;
  3631.     DB 83H
  3632.     DB 'BY'
  3633.     DB 'E'+80H
  3634.     DW VLIST-8
  3635. BYE    DW $+2
  3636.     JMP HBASE+0
  3637. ;
  3638.     DB 84H
  3639.     DB 'LIS'
  3640.     DB 'T'+80H
  3641.     DW BYE-6
  3642. LIST    DW DOCOL,DEC
  3643.     DW CR,DUP
  3644.     DW SCR,STORE
  3645.     DW PDOTQ
  3646.     DB 6,'SCR # '
  3647.     DW DOT
  3648.     DW LIT,10H
  3649.     DW ZERO,XDO
  3650. LIST1    DW CR,IDO
  3651.     DW LIT,3
  3652.     DW DOTR,SPACE
  3653.     DW IDO,SCR
  3654.     DW AT,DLINE
  3655.     DW QTERM
  3656.     DW ZBRAN,LIST2-$
  3657.     DW LEAVE
  3658. LIST2    DW XLOOP,LIST1-$
  3659.     DW CR,SEMIS
  3660. ;
  3661.     DB 85H
  3662.     DB 'INDE'
  3663.     DB 'X'+80H
  3664.     DW LIST-7
  3665. INDEX    DW DOCOL
  3666.     DW LIT,FF
  3667.     DW EMIT,CR
  3668.     DW ONEP,SWAP
  3669.     DW XDO
  3670. INDE1    DW CR,IDO
  3671.     DW LIT,3
  3672.     DW DOTR,SPACE
  3673.     DW ZERO,IDO
  3674.     DW DLINE,QTERM
  3675.     DW ZBRAN,INDE2-$
  3676.     DW LEAVE
  3677. INDE2    DW XLOOP,INDE1-$
  3678.     DW SEMIS
  3679. ;
  3680.     DB 85H
  3681.     DB 'TRIA'
  3682.     DB 'D'+80H
  3683.     DW INDEX-8
  3684. TRIAD    DW DOCOL
  3685.     DW LIT,FF
  3686.     DW EMIT
  3687.     DW LIT,3
  3688.     DW SLASH
  3689.     DW LIT,3
  3690.     DW STAR
  3691.     DW LIT,3
  3692.     DW OVER,PLUS
  3693.     DW SWAP,XDO
  3694. TRIA1    DW CR,IDO
  3695.     DW LIST
  3696.     DW QTERM
  3697.     DW ZBRAN,TRIA2-$
  3698.     DW LEAVE
  3699. TRIA2    DW XLOOP,TRIA1-$
  3700.     DW CR
  3701.     DW LIT,15
  3702.     DW MESS,CR
  3703.     DW SEMIS
  3704. ;
  3705.     DB 84H
  3706.     DB '.CP'
  3707.     DB 'U'+80H
  3708.     DW TRIAD-8
  3709. DOTCPU    DW DOCOL
  3710.     DW BASE,AT
  3711.     DW LIT,36
  3712.     DW BASE,STORE
  3713.     DW LIT,22H
  3714.     DW PORIG,TAT
  3715.     DW DDOT
  3716.     DW BASE,STORE
  3717.     DW SEMIS
  3718. ;
  3719.     DB 84H
  3720.     DB 'TAS'
  3721.     DB 'K'+80H
  3722.     DW DOTCPU-7
  3723. TASK    DW DOCOL
  3724.     DW SEMIS
  3725. ;
  3726. INITDP:    DS EM-$
  3727. ;
  3728. ;
  3729. ;    MEMORY MAP
  3730. ;
  3731. MCOLD    EQU ORIG
  3732. MWARM    EQU ORIG+4
  3733. MA2    EQU ORIG+8
  3734. MUP    EQU UP
  3735. MRP    EQU RPP
  3736. ;
  3737. MBIP    EQU BIP
  3738. MDPUSH    EQU DPUSH
  3739. MHPUSH    EQU HPUSH
  3740. MNEXT    EQU NEXT
  3741. ;
  3742. MDP0    EQU DP0
  3743. MDIO    EQU DRIVE
  3744. MCIO    EQU EPRINT
  3745. MIDP    EQU INITDP
  3746. ;
  3747. MIS0    EQU INITS0
  3748. ;
  3749. MIR0    EQU INITR0
  3750. ;MFIRST    EQU BUF1
  3751. ;
  3752. MEND    EQU EM-1
  3753. MLIMIT    EQU EM
  3754. ;
  3755.     END
  3756.  
  3757.  
  3758.