home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol067 / rez7-31.asm < prev    next >
Assembly Source File  |  1984-04-29  |  34KB  |  2,830 lines

  1.     TITLE    'Z-80 Disassembler for 8080A'
  2.     ORG    0100H
  3. BDOS    EQU    05H
  4. CTLTBL    EQU    1C00H
  5. FCB    EQU    5CH
  6. STACK    EQU    1BFDH
  7. SYMTBL    EQU    2200H
  8. TBUF    EQU    80H
  9. ;
  10. START:    CALL    ENTRY
  11.     DB    'RESOURCE by Ward Christensen'
  12.     DB    0DH,0AH,'(AS OF 07/31/80)'
  13.     DB    0DH,0AH,'Z-80 Version 2'
  14.     DB    0DH,0AH,'$Copyright 1980'
  15. ENTRY:    POP    D
  16.     MVI    C,9
  17.     CALL    BDOS
  18.     LXI    H,0
  19.     DAD    SP
  20.     SHLD    STACK
  21.     LXI    SP,STACK
  22.     CALL    PRTSTR
  23.     DB    0DH,0AH,'Memory open to '
  24.     DB    0
  25.     LHLD    6
  26.     DCX    H
  27.     CALL    PRWORD
  28.     CALL    CRLF
  29.     CALL    CRLF
  30. L0174:    CALL    INITBL
  31. NXCMD:    XRA    A
  32.     STA    WFIFLG
  33.     STA    QUIFLG
  34.     LXI    SP,STACK
  35.     CALL    GTCMD
  36. L0184:    LXI    H,CMDBUF+2
  37.     MOV    A,M
  38.     CPI    0DH
  39.     JZ    NXCMD
  40.     CPI    ';'
  41.     JZ    CMCMNT
  42.     CPI    'A'
  43.     JZ    CMATMT
  44.     CPI    'B'
  45.     JZ    CMBLD
  46.     CPI    'C'
  47.     JZ    CMCTL
  48.     CPI    'D'
  49.     JZ    CMDUMP
  50.     CPI    'E'
  51.     JZ    CMENTR
  52.     CPI    'F'
  53.     JZ    CMFIND
  54.     CPI    'K'
  55.     JZ    CMKILL
  56.     CPI    'L'
  57.     JZ    CMLIST
  58.     CPI    'O'
  59.     JZ    CMOFST
  60.     CPI    'P'
  61.     JZ    CMPRLG
  62.     CPI    'Q'
  63.     JZ    CMQIET
  64.     CPI    'R'
  65.     JZ    CMREAD
  66.     CPI    'S'
  67.     JZ    CMSAVE
  68.     CPI    'T'
  69.     JZ    CMTRIM
  70.     CPI    'U'
  71.     JZ    CMUSEC
  72.     CPI    'X'
  73.     JZ    CMPURG
  74.     CPI    'Z'
  75.     JZ    CMEOF
  76.     CPI    '?'
  77.     JZ    CMSTTS
  78. CMERR:    XRA    A
  79.     STA    WFIFLG
  80.     STA    QUIFLG
  81.     CALL    PRTSTR
  82.     DB    '?',0DH,0AH,0
  83.     JMP    NXCMD
  84. ;
  85. CMTRIM:    LDA    TRMFLG
  86.     CMA
  87.     STA    TRMFLG
  88.     ORA    A
  89.     JZ    TRMOF
  90.     CALL    PRTSTR
  91.     DB    'Trim On',0DH,0AH,0
  92.     JMP    NXCMD
  93. ;
  94. TRMOF:    CALL    PRTSTR
  95.     DB    'Trim Off',0DH,0AH,0
  96.     JMP    NXCMD
  97. ;
  98. CMPURG:    CALL    PRTSTR
  99.     DB    'Y/N purge all symbols & '
  100.     DB    'CTL?',0
  101.     CALL    GTCMD
  102.     LDA    CMDBUF+2
  103.     CPI    'Y'
  104.     JZ    L0174
  105.     CPI    'N'
  106.     JZ    NXCMD
  107.     JMP    CMPURG
  108. ;
  109. CMPRLG:    LXI    H,CMDBUF+3
  110.     MOV    A,M
  111.     CPI    0DH
  112.     JZ    CMERR
  113.     CALL    GTVAL
  114.     CPI    ' '
  115.     JZ    L0241
  116.     CPI    ','
  117.     JNZ    CMERR
  118. L0241:    INX    H
  119.     PUSH    D
  120.     PUSH    H
  121.     MVI    A,1
  122.     STA    WFIFLG
  123.     CALL    L1A7E
  124.     DB    9,'.LOC',9,0
  125.     POP    H
  126.     POP    D
  127.     MOV    A,D
  128.     CALL    XO0
  129.     MOV    A,E
  130.     CALL    XO
  131.     MVI    A,'H'
  132.     CALL    TYPE
  133.     CALL    CRLF
  134.     PUSH    D
  135.     CALL    GTVAL
  136.     CPI    0DH
  137.     JNZ    CMERR
  138.     POP    B
  139.     LXI    H,SYMTBL
  140. L0272:    INX    H
  141.     INX    H
  142.     MOV    A,M
  143.     ORA    A
  144.     JZ    NXCMD
  145.     DCX    H
  146.     DCX    H
  147.     MOV    A,M
  148.     SUB    C
  149.     INX    H
  150.     MOV    A,M
  151.     SBB    B
  152.     JC    L028C
  153.     DCX    H
  154.     MOV    A,M
  155.     SUB    E
  156.     INX    H
  157.     MOV    A,M
  158.     SBB    D
  159.     JC    L02D9
  160. L028C:    PUSH    H
  161.     PUSH    B
  162.     INX    H
  163.     MOV    B,M
  164.     PUSH    H
  165.     INX    H
  166.     MOV    A,M
  167.     DCX    H
  168.     CPI    'A'
  169.     JC    L02E5
  170. L0299:    INX    H
  171.     MOV    A,M
  172.     CPI    '+'
  173.     JZ    L02E5
  174.     CPI    '-'
  175.     JZ    L02E5
  176.     DCR    B
  177.     JNZ    L0299
  178.     POP    H
  179.     MOV    B,M
  180.     MVI    A,1
  181.     STA    WFIFLG
  182. L02B0:    INX    H
  183.     MOV    A,M
  184.     CALL    TYPE
  185.     DCR    B
  186.     JNZ    L02B0
  187.     CALL    L1A7E
  188.     DB    9,'=',9,0
  189.     POP    B
  190.     POP    H
  191.     MOV    A,M
  192.     ORA    A
  193.     CNZ    XO0
  194.     DCX    H
  195.     MOV    A,M
  196.     CALL    XO
  197.     MVI    A,'H'
  198.     CALL    TYPE
  199.     CALL    CRLF
  200.     XRA    A
  201.     STA    WFIFLG
  202.     INX    H
  203. L02D9:    INX    H
  204.     MOV    A,M
  205.     CALL    ADDF
  206.     INX    H
  207.     CALL    L1ABF
  208.     JMP    L0272
  209. ;
  210. L02E5:    POP    H
  211.     POP    B
  212.     POP    H
  213.     JMP    L02D9
  214. ;
  215. CMQIET:    MVI    A,1
  216.     STA    QUIFLG
  217.     LXI    D,CMDBUF+2
  218.     LXI    H,CMDBUF+3
  219. L02F6:    MOV    A,M
  220.     STAX    D
  221.     INX    H
  222.     INX    D
  223.     CPI    0DH
  224.     JNZ    L02F6
  225.     JMP    L0184
  226. ;
  227.     DB    'Congratulations, you found '
  228.     DB    'the patch area!'
  229. CMDUMP:    LHLD    L1B1B
  230.     PUSH    H
  231.     XCHG
  232.     LHLD    DMPCNT
  233.     DAD    D
  234.     SHLD    L1B1D
  235.     POP    D
  236.     LXI    H,CMDBUF+3
  237.     MOV    A,M
  238.     CPI    0DH
  239.     JZ    L038B
  240.     CPI    'S'
  241.     JZ    DUSYMT
  242.     CPI    '='
  243.     JZ    SDUCNT
  244.     CPI    ','
  245.     JZ    L035D
  246. L0351:    CALL    GTVAL
  247.     PUSH    H
  248.     LHLD    DMPCNT
  249.     DAD    D
  250.     SHLD    L1B1D
  251.     POP    H
  252. L035D:    CPI    0DH
  253.     JZ    L0376
  254.     CPI    ' '
  255.     JZ    L036C
  256.     CPI    ','
  257.     JNZ    CMERR
  258. L036C:    INX    H
  259.     PUSH    D
  260.     CALL    GTVAL
  261.     XCHG
  262.     SHLD    L1B1D
  263.     POP    D
  264. L0376:    LHLD    OFFSET
  265.     PUSH    H
  266.     DAD    D
  267.     SHLD    L1B1B
  268.     LHLD    L1B1D
  269.     POP    D
  270.     DAD    D
  271.     SHLD    L1B1D
  272.     CPI    0DH
  273.     JNZ    CMERR
  274. L038B:    LHLD    L1B1B
  275. L038E:    CALL    L1ABF
  276.     PUSH    H
  277.     CALL    L087C
  278.     CALL    PRWORD
  279.     POP    H
  280.     PUSH    H
  281.     CALL    PRSPC
  282. L039D:    MOV    A,M
  283.     CALL    XO
  284.     INX    H
  285.     MOV    A,L
  286.     ANI    3
  287.     CZ    PRSPC
  288.     MOV    A,L
  289.     ANI    7
  290.     CZ    PRSPC
  291.     MOV    A,L
  292.     ANI    0FH
  293.     JNZ    L039D
  294.     CALL    PSTAR
  295.     POP    H
  296. L03B8:    MOV    A,M
  297.     CPI    ' '
  298.     JC    L03C3
  299.     CPI    7FH
  300.     JC    L03C5
  301. L03C3:    MVI    A,'.'
  302. L03C5:    CALL    TYPE
  303.     INX    H
  304.     MOV    A,L
  305.     ANI    0FH
  306.     JZ    L03D7
  307.     ANI    7
  308.     CZ    PRSPC
  309.     JMP    L03B8
  310. ;
  311. L03D7:    CALL    PSTAR
  312.     CALL    CRLF
  313.     SHLD    L1B1B
  314.     LDA    L1B1D
  315.     SUB    L
  316.     LDA    L1B1D+1
  317.     SBB    H
  318.     JNC    L038E
  319.     JMP    NXCMD
  320. ;
  321. SDUCNT:    INX    H
  322.     CALL    GTVAL
  323.     INX    H
  324.     DCX    D
  325.     XCHG
  326.     SHLD    DMPCNT
  327.     XCHG
  328.     CPI    ','
  329.     JZ    L0351
  330.     CPI    ' '
  331.     JZ    L0351
  332.     CPI    0DH
  333.     JZ    NXCMD
  334.     JMP    CMERR
  335. ;
  336. DUSYMT:    LXI    H,CMDBUF+4
  337.     MOV    A,M
  338.     CPI    '.'
  339.     JNZ    L0423
  340.     CALL    L1872
  341.     CALL    L1798
  342.     JNC    L0426
  343.     LHLD    L1B4B
  344.     JMP    L0426
  345. ;
  346. L0423:    LXI    H,SYMTBL
  347. L0426:    MOV    E,M
  348.     INX    H
  349.     MOV    D,M
  350.     INX    H
  351.     MOV    A,M
  352.     ORA    A
  353.     JZ    NXCMD
  354.     XCHG
  355.     CALL    PRWORD
  356.     XCHG
  357.     MOV    B,M
  358.     INX    H
  359. L0436:    MOV    A,M
  360.     CALL    TYPE
  361.     INX    H
  362.     DCR    B
  363.     JNZ    L0436
  364.     CALL    CRLF
  365.     CALL    L1ABF
  366.     JMP    L0426
  367. ;
  368. L0448:    LHLD    OFFSET
  369.     CALL    PRWORD
  370.     CALL    CRLF
  371.     JMP    NXCMD
  372. ;
  373. CMOFST:    LXI    H,CMDBUF+3
  374.     MOV    A,M
  375.     CPI    0DH
  376.     JZ    L0448
  377.     CALL    GTVAL
  378.     CPI    0DH
  379.     JNZ    CMERR
  380.     XCHG
  381.     SHLD    OFFSET
  382.     JMP    NXCMD
  383. ;
  384. GFNAM:    LDA    WRTFLG
  385.     ORA    A
  386.     JNZ    RRQERR
  387.     STA    FCB
  388.     STA    FCB+12
  389.     LXI    H,CMDBUF+3
  390.     LDA    CMDBUF+4
  391.     CPI    ' '
  392.     JZ    CMERR
  393.     CPI    ':'
  394.     JNZ    L0493
  395.     LDA    CMDBUF+3
  396.     SUI    '@'
  397.     STA    FCB
  398.     INX    H
  399.     INX    H
  400. L0493:    LXI    D,FCB+1
  401.     MVI    B,8
  402.     CALL    L04A1
  403.     MVI    B,3
  404.     CALL    L04A1
  405.     RET
  406. ;
  407. L04A1:    MOV    A,M
  408.     CPI    0DH
  409.     JZ    L04BE
  410.     INX    H
  411.     CPI    '.'
  412.     JZ    L04BE
  413.     STAX    D
  414.     INX    D
  415.     DCR    B
  416.     JNZ    L04A1
  417. L04B3:    MOV    A,M
  418.     CPI    0DH
  419.     RZ
  420.     CPI    '.'
  421.     INX    H
  422.     RZ
  423.     JMP    L04B3
  424. ;
  425. L04BE:    MVI    A,' '
  426.     STAX    D
  427.     INX    D
  428.     DCR    B
  429.     JNZ    L04BE
  430.     RET
  431. ;
  432. CMATMT:    MVI    A,1
  433.     STA    L1B4F
  434.     XRA    A
  435.     STA    SYBFLG
  436.     JMP    L04E2
  437. ;
  438. CMBLD:    MVI    A,1
  439.     STA    SYBFLG
  440.     JMP    L04E2
  441. ;
  442. CMLIST:    XRA    A
  443.     STA    SYBFLG
  444.     STA    L1B4F
  445. L04E2:    XRA    A
  446.     STA    WFIFLG
  447.     LDA    LISCNT
  448.     STA    LISCNT+1
  449.     STA    L1B35
  450.     LXI    H,CMDBUF+3
  451.     MOV    A,M
  452.     CPI    0DH
  453.     JZ    L052A
  454.     CPI    ','
  455.     JZ    L051E
  456.     CPI    ' '
  457.     JZ    L051E
  458.     CPI    '='
  459.     JZ    SLICNT
  460. L0507:    CALL    GTVAL
  461.     XCHG
  462.     SHLD    PCNTR
  463.     XCHG
  464.     CPI    0DH
  465.     JZ    L052A
  466.     CPI    ' '
  467.     JZ    L051E
  468.     CPI    ','
  469.     JNZ    CMERR
  470. L051E:    INX    H
  471.     CALL    GTVAL
  472.     XCHG
  473.     SHLD    L1B25
  474.     XRA    A
  475.     STA    L1B35
  476. L052A:    CALL    L1ABF
  477.     LDA    L1B35
  478.     ORA    A
  479.     JZ    L053E
  480.     LDA    LISCNT+1
  481.     DCR    A
  482.     JM    NXCMD
  483.     JMP    L054C
  484. ;
  485. L053E:    LHLD    L1B25
  486.     LDA    PCNTR
  487.     SUB    L
  488.     LDA    PCNTR+1
  489.     SBB    H
  490.     JNC    NXCMD
  491. L054C:    LDA    L1B4F
  492.     ORA    A
  493.     JZ    L0586
  494.     LHLD    PCNTR
  495.     XCHG
  496.     LHLD    OFFSET
  497.     DAD    D
  498.     MVI    B,8
  499. L055D:    MOV    A,M
  500.     CALL    L1AFE
  501.     JC    L0586
  502.     INX    H
  503.     DCR    B
  504.     JNZ    L055D
  505. L0569:    MOV    A,M
  506.     CALL    L1AFE
  507.     INX    H
  508.     JNC    L0569
  509.     DCX    H
  510.     CALL    L087C
  511.     XCHG
  512.     PUSH    D
  513.     LHLD    PCNTR
  514.     XCHG
  515.     MVI    A,'B'
  516.     CALL    L0B9E
  517.     POP    D
  518.     MVI    A,'I'
  519.     CALL    L0B9E
  520. L0586:    LHLD    DOCTBL
  521.     MOV    A,H
  522.     ORA    L
  523.     JZ    L05C0
  524.     LHLD    PCNTR
  525.     XCHG
  526.     CALL    L0D87
  527.     JC    L05C0
  528.     INX    H
  529.     INX    H
  530.     MOV    B,M
  531. L059B:    MVI    A,1
  532.     STA    WFIFLG
  533.     CALL    SEMIC
  534.     XRA    A
  535.     ORA    B
  536.     JZ    L05BD
  537. L05A8:    INX    H
  538.     MOV    A,M
  539.     CPI    5CH
  540.     JNZ    L05B6
  541.     CALL    CRLF
  542.     DCR    B
  543.     JMP    L059B
  544. ;
  545. L05B6:    CALL    TYPE
  546.     DCR    B
  547.     JNZ    L05A8
  548. L05BD:    CALL    CRLF
  549. L05C0:    LHLD    PCNTR
  550.     XCHG
  551.     CALL    L0C51
  552.     DCX    H
  553.     JC    L05CE
  554.     INX    H
  555.     INX    H
  556.     INX    H
  557. L05CE:    MOV    A,M
  558.     CPI    'I'
  559.     JZ    L061E
  560.     CPI    'E'
  561.     JZ    CMEOF
  562.     PUSH    PSW
  563.     INX    H
  564.     MOV    E,M
  565.     INX    H
  566.     MOV    D,M
  567.     PUSH    D
  568.     LHLD    PCNTR
  569.     XCHG
  570.     CALL    L0EB4
  571.     POP    H
  572.     SHLD    L1B48
  573.     XCHG
  574.     XRA    A
  575.     STA    WFIFLG
  576.     POP    PSW
  577.     CPI    'S'
  578.     JZ    L0648
  579.     CPI    'B'
  580.     JZ    L06A9
  581.     CPI    'W'
  582.     JZ    L067B
  583.     CALL    TYPE
  584.     CALL    PRTSTR
  585.     DB    ': INVALID CTL ENTRY'
  586.     DB    0DH,0AH,0
  587.     JMP    NXCMD
  588. ;
  589. L061E:    CALL    DLINE
  590.     XRA    A
  591.     STA    WFIFLG
  592.     JMP    L052A
  593. ;
  594. SLICNT:    INX    H
  595.     CALL    GTVAL
  596.     MOV    A,E
  597.     ORA    A
  598.     JZ    CMERR
  599.     STA    LISCNT
  600.     MOV    A,M
  601.     INX    H
  602.     CPI    ','
  603.     JZ    L0507
  604.     CPI    ' '
  605.     JZ    L0507
  606.     CPI    0DH
  607.     JZ    NXCMD
  608.     JMP    CMERR
  609. ;
  610. L0648:    PUSH    D
  611.     LDA    PCNTR
  612.     CMA
  613.     MOV    L,A
  614.     LDA    PCNTR+1
  615.     CMA
  616.     MOV    H,A
  617.     INX    H
  618.     DAD    D
  619.     MVI    A,1
  620.     STA    WFIFLG
  621.     CALL    L1A7E
  622.     DB    '.BLKB',9,0
  623.     MOV    A,H
  624.     CALL    XO0
  625.     MOV    A,L
  626.     CALL    XO
  627.     MVI    A,'H'
  628.     CALL    TYPE
  629.     CALL    CRLF
  630.     POP    H
  631.     SHLD    PCNTR
  632.     JMP    L052A
  633. ;
  634. L067B:    MVI    A,1
  635.     STA    WFIFLG
  636.     CALL    L1A7E
  637.     DB    '.WORD',9,0
  638.     LHLD    PCNTR
  639.     XCHG
  640.     LHLD    OFFSET
  641.     DAD    D
  642.     MOV    E,M
  643.     INX    H
  644.     MOV    D,M
  645.     CALL    L106E
  646.     LHLD    PCNTR
  647.     INX    H
  648.     INX    H
  649.     SHLD    PCNTR
  650.     JMP    L052A
  651. ;
  652. L06A3:    CALL    CRLF
  653.     JMP    L052A
  654. ;
  655. L06A9:    MVI    A,1
  656.     STA    WFIFLG
  657. L06BB:    LHLD    PCNTR
  658.     XCHG
  659.     LHLD    OFFSET
  660.     DAD    D
  661.     MOV    A,M
  662.     CPI    ' '
  663.     JC    NPRTC    ;NOT PRINTABLE
  664.     CPI    7FH
  665.     JC    L0722    ;VISIBLE ASCII
  666. NPRTC:    CALL    L1A7E
  667.     DB    '.BYTE',9,0
  668.     XRA    A
  669.     STA    L1B4A
  670. MORINV:    MOV    A,M    ;RESTORE BYTE
  671.     CPI    0AH
  672.     JC    L06E6
  673. L06D3:    CALL    XO0
  674.     MVI    A,'H'
  675.     CALL    TYPE
  676.     LDA    L1B4A
  677.     ADI    2
  678.     STA    L1B4A
  679.     JMP    L06EB
  680. ;
  681. L06E6:    ORI    '0'
  682.     CALL    TYPE
  683. L06EB:    INX    H
  684.     XCHG
  685.     LHLD    PCNTR
  686.     INX    H
  687.     SHLD    PCNTR
  688.     XCHG
  689. L06F5:    LDA    L1B48
  690.     CMP    E
  691.     JNZ    L0703
  692.     LDA    L1B49
  693.     CMP    D
  694.     JZ    L078D
  695. L0703:    LHLD    PCNTR
  696.     XCHG
  697.     CALL    L17EA
  698.     JNC    L06A3
  699.     LDA    L1B4A
  700.     ADI    2
  701.     STA    L1B4A
  702.     CPI    19H
  703.     JNC    L06A3
  704.     LHLD    PCNTR
  705.     XCHG
  706.     LHLD    OFFSET
  707.     DAD    D
  708.     MOV    A,M
  709.     CPI    ' '
  710.     JC    NXINV
  711.     CPI    7FH
  712.     JC    L06A3
  713. NXINV:    MVI    A,','
  714.     CALL    TYPE
  715.     JMP    MORINV
  716. ;
  717. L0722:    CALL    L1A7E
  718.     DB    '.ASCII',9,0
  719.     XRA    A
  720.     STA    L1B4A
  721.     MVI    A,27H
  722.     CALL    TYPE
  723.     LDA    L1B4A
  724.     INR    A
  725.     STA    L1B4A
  726.     MOV    A,M
  727. L072F:    CALL    TYPE
  728.     MOV    A,M
  729.     CPI    27H
  730.     CZ    TYPE
  731.     INX    H
  732.     XCHG
  733.     LHLD    PCNTR
  734.     INX    H
  735.     SHLD    PCNTR
  736.     XCHG
  737.     LDA    L1B48
  738.     CMP    E
  739.     JNZ    L0750
  740.     LDA    L1B49
  741.     CMP    D
  742.     JZ    L0788
  743. L0750:    PUSH    H
  744.     LHLD    PCNTR
  745.     XCHG
  746.     CALL    L17EA
  747.     POP    H
  748.     JNC    L0788
  749.     LDA    L1B4A
  750.     INR    A
  751.     STA    L1B4A
  752.     CPI    '#'
  753.     JNC    L0780
  754.     CPI    19H
  755.     JC    L0775
  756.     DCX    H
  757.     MOV    A,M
  758.     INX    H
  759.     CPI    ' '
  760.     JZ    L0788
  761. L0775:    MOV    A,M
  762.     CPI    ' '
  763.     JC    L0780
  764.     CPI    7FH
  765.     JC    L072F
  766. L0780:    MVI    A,27H
  767.     CALL    TYPE
  768.     JMP    L06A3
  769. ;
  770. L0788:    MVI    A,27H
  771.     CALL    TYPE
  772. L078D:    CALL    CRLF
  773.     JMP    L052A
  774. ;
  775. CMSTTS:    CALL    PRTSTR
  776.     DB    'SYMTBL=',0
  777.     LXI    H,SYMTBL
  778.     CALL    PRWORD
  779.     LHLD    SYMTP
  780.     CALL    PRWORD
  781.     CALL    CRLF
  782.     CALL    PRTSTR
  783.     DB    'PC    =',0
  784.     LHLD    PCNTR
  785.     CALL    PRWORD
  786.     CALL    CRLF
  787.     CALL    PRTSTR
  788.     DB    'OFFSET=',0
  789.     LHLD    OFFSET
  790.     CALL    PRWORD
  791.     CALL    CRLF
  792.     LHLD    DOCTBL
  793.     MOV    A,H
  794.     ORA    L
  795.     JZ    NODOCT
  796.     CALL    PRTSTR
  797.     DB    'COMNTS=',0
  798.     LHLD    DOCTBL
  799.     CALL    PRWORD
  800.     LHLD    DOCEND
  801.     CALL    PRWORD
  802.     CALL    CRLF
  803. NODOCT:    CALL    PRTSTR
  804.     DB    'CTLTBL=',0
  805.     LXI    H,CTLTBL
  806.     CALL    PRWORD
  807. L0808:    MOV    A,M
  808.     INX    H
  809.     ANA    M
  810.     INX    H
  811.     INX    H
  812.     INR    A
  813.     JNZ    L0808
  814.     DCX    H
  815.     DCX    H
  816.     DCX    H
  817.     CALL    PRWORD
  818.     CALL    CRLF
  819.     JMP    NXCMD
  820. ;
  821. CMFIND:    LXI    H,CMDBUF+3
  822.     MOV    A,M
  823.     CPI    0DH
  824.     JZ    L0853
  825.     CALL    GTVAL
  826.     XCHG
  827.     SHLD    L1B2F
  828.     LHLD    OFFSET
  829.     SHLD    L1B2D
  830.     XCHG
  831.     CPI    0DH
  832.     JZ    L0853
  833.     CPI    ' '
  834.     JZ    L0843
  835.     CPI    ','
  836.     JNZ    CMERR
  837. L0843:    INX    H
  838.     CALL    GTVAL
  839.     CPI    0DH
  840.     JNZ    CMERR
  841.     LHLD    OFFSET
  842.     DAD    D
  843.     SHLD    L1B2D
  844. L0853:    LHLD    L1B2F
  845.     XCHG
  846. L0857:    CALL    L1ABF
  847.     LHLD    L1B2D
  848.     MOV    A,M
  849.     INX    H
  850.     SHLD    L1B2D
  851.     CMP    E
  852.     JNZ    L0857
  853.     MOV    A,M
  854.     CMP    D
  855.     JNZ    L0857
  856.     PUSH    H
  857.     PUSH    D
  858.     CALL    L087C
  859.     DCX    H
  860.     CALL    PRWORD
  861.     POP    D
  862.     POP    H
  863.     CALL    PRSPC
  864.     JMP    L0857
  865. ;
  866. L087C:    LDA    OFFSET
  867.     CMA
  868.     MOV    E,A
  869.     LDA    OFFSET+1
  870.     CMA
  871.     MOV    D,A
  872.     INX    D
  873.     DAD    D
  874.     RET
  875. ;
  876. CMEOF:    CALL    L0EB4
  877.     MVI    A,1
  878.     STA    WFIFLG
  879.     CALL    L1A7E
  880.     DB    '.END',0DH,0AH,0
  881.     XRA    A
  882.     STA    WFIFLG
  883.     LDA    WRTFLG
  884.     ORA    A
  885.     JZ    NXCMD
  886.     MVI    A,1AH
  887.     CALL    L19E6
  888.     CALL    L19A7
  889.     XRA    A
  890.     STA    WRTFLG
  891.     CALL    PRTSTR
  892.     DB    '++ASM FILE CLOSED++',0DH
  893.     LDAX    B
  894.     NOP
  895.     JMP    NXCMD
  896. ;
  897. CMREAD:    CALL    GFNAM
  898.     LDA    WRTFLG
  899.     ORA    A
  900.     JNZ    RRQERR
  901.     LXI    H,FCB+9
  902.     LXI    D,SYMLIT
  903.     MVI    C,3
  904.     CALL    CMPSTR
  905.     JNZ    L08F6
  906.     LXI    H,SYMTBL
  907.     CALL    L09C9
  908.     SHLD    SYMTP
  909.     INX    H
  910.     INX    H
  911.     MVI    M,0
  912.     JMP    CMSTTS
  913. ;
  914. L08F6:    LXI    H,FCB+9
  915.     LXI    D,COMLIT
  916.     MVI    C,3
  917.     CALL    CMPSTR
  918.     JNZ    L0947
  919.     CALL    FOPEN
  920.     LHLD    OFFSET
  921.     MOV    A,H
  922.     CPI    1EH
  923.     JC    L097A
  924.     LXI    D,START
  925.     DAD    D
  926. L0914:    PUSH    H
  927.     XCHG
  928.     MVI    C,1AH
  929.     CALL    BDOS
  930.     LXI    D,FCB
  931.     MVI    C,14H
  932.     CALL    BDOS
  933.     ORA    A
  934.     JNZ    L092F
  935.     POP    H
  936.     LXI    D,TBUF
  937.     DAD    D
  938.     JMP    L0914
  939. ;
  940. L092F:    POP    H
  941.     CALL    PRWORD
  942.     CALL    L087C
  943.     CALL    PRWORD
  944.     CALL    CRLF
  945.     LXI    D,TBUF
  946.     MVI    C,1AH
  947.     CALL    BDOS
  948.     JMP    NXCMD
  949. ;
  950. L0947:    LXI    H,FCB+9
  951.     LXI    D,CTLLIT
  952.     MVI    C,3
  953.     CALL    CMPSTR
  954.     JNZ    L0958
  955.     JMP    L0CF1
  956. ;
  957. L0958:    LXI    H,FCB+9
  958.     LXI    D,DOCLIT
  959.     MVI    C,3
  960.     CALL    CMPSTR
  961.     JNZ    CMERR
  962.     CALL    L0DFB
  963.     LHLD    DOCTBL
  964.     CALL    L09C9
  965.     SHLD    DOCEND
  966.     MVI    M,0FFH
  967.     INX    H
  968.     MVI    M,0FFH
  969.     JMP    CMSTTS
  970. ;
  971. L097A:    CALL    PRTSTR
  972.     DB    '++NO, THAT WOULD OVERLAY '
  973.     DB    'THE DISASSEMBLER',0DH,0AH
  974.     DB    'BECAUSE OFFSET IS TOO SMALL: '
  975.     DB    0
  976.     JMP    L0448
  977. ;
  978. L09C9:    CALL    FOPEN
  979. L09CC:    CALL    RDFCHR
  980.     CPI    1AH
  981.     RZ
  982.     CPI    9
  983.     JZ    L09CC
  984.     CPI    0DH
  985.     JZ    L09CC
  986.     CPI    0AH
  987.     JZ    L09CC
  988.     CALL    L0A05
  989.     MOV    M,E
  990.     INX    H
  991.     MOV    M,D
  992.     INX    H
  993.     PUSH    H
  994.     INX    H
  995.     MVI    B,0
  996. L09EC:    CALL    RDFCHR
  997.     CPI    9
  998.     JZ    L09FF
  999.     CPI    0DH
  1000.     JZ    L09FF
  1001.     MOV    M,A
  1002.     INX    H
  1003.     INR    B
  1004.     JMP    L09EC
  1005. ;
  1006. L09FF:    XTHL
  1007.     MOV    M,B
  1008.     POP    H
  1009.     JMP    L09CC
  1010. ;
  1011. L0A05:    LXI    D,0
  1012. L0A08:    CPI    ' '
  1013.     RZ
  1014.     CPI    1AH
  1015. L0A0D:    JZ    L0B62
  1016.     CPI    ':'
  1017.     JC    L0A17
  1018.     SUI    7
  1019. L0A17:    SUI    '0'
  1020.     XCHG
  1021.     DAD    H
  1022.     DAD    H
  1023.     DAD    H
  1024.     DAD    H
  1025.     ADD    L
  1026.     MOV    L,A
  1027.     XCHG
  1028.     CALL    RDFCHR
  1029.     CPI    1AH
  1030.     JZ    L0B62
  1031.     JMP    L0A08
  1032. ;
  1033. CMSAVE:    CALL    GFNAM
  1034.     LDA    WRTFLG
  1035.     ORA    A
  1036.     JNZ    RRQERR
  1037.     LXI    H,FCB+9
  1038.     LXI    D,SYMLIT
  1039.     MVI    C,3
  1040.     CALL    CMPSTR
  1041.     JNZ    L0A9A
  1042.     LXI    H,SYMTBL
  1043. L0A47:    CALL    L1986
  1044. L0A4A:    MOV    E,M
  1045.     INX    H
  1046.     MOV    D,M
  1047.     INX    H
  1048.     MOV    A,M
  1049.     INX    H
  1050.     MOV    B,A
  1051.     ORA    A
  1052.     JZ    L0A73
  1053.     CALL    L0A7E
  1054.     MVI    A,' '
  1055.     CALL    L19E6
  1056. L0A5D:    MOV    A,M
  1057.     CALL    L19E6
  1058.     INX    H
  1059.     DCR    B
  1060.     JNZ    L0A5D
  1061.     MVI    A,0DH
  1062.     CALL    L19E6
  1063.     MVI    A,0AH
  1064.     CALL    L19E6
  1065.     JMP    L0A4A
  1066. ;
  1067. L0A73:    MVI    A,1AH
  1068.     CALL    L19E6
  1069.     CALL    L19A7
  1070.     JMP    NXCMD
  1071. ;
  1072. L0A7E:    MOV    A,D
  1073.     CALL    HEXL
  1074.     CALL    L19E6
  1075.     MOV    A,D
  1076.     CALL    HEXR
  1077.     CALL    L19E6
  1078.     MOV    A,E
  1079.     CALL    HEXL
  1080.     CALL    L19E6
  1081.     MOV    A,E
  1082.     CALL    HEXR
  1083.     JMP    L19E6
  1084. ;
  1085. L0A9A:    LXI    H,FCB+9
  1086.     LXI    D,CTLLIT
  1087.     MVI    C,3
  1088.     CALL    CMPSTR
  1089.     JZ    SAVCTL
  1090.     LXI    H,FCB+9
  1091.     LXI    D,DOCLIT
  1092.     MVI    C,3
  1093.     CALL    CMPSTR
  1094.     JZ    SAVDOC
  1095.     LXI    H,FCB+9
  1096.     LXI    D,ASMLIT
  1097.     MVI    C,3
  1098.     CALL    CMPSTR
  1099.     JNZ    CMERR
  1100.     MVI    A,1
  1101.     STA    WRTFLG
  1102.     XRA    A
  1103.     STA    WFIFLG
  1104.     CALL    L1986
  1105.     CALL    PRTSTR
  1106.     DB    '++WRITING .ASM ENABLED'
  1107.     DB    0DH,0AH,'USE Z COMMAND OR '
  1108.     DB    'E CONTROL TO CLOSE FILE++'
  1109.     DB    0DH,0AH,0
  1110.     JMP    NXCMD
  1111. ;
  1112. SAVDOC:    CALL    L0DFB
  1113.     LHLD    DOCEND
  1114.     INX    H
  1115.     INX    H
  1116.     MVI    M,0
  1117.     LHLD    DOCTBL
  1118.     JMP    L0A47
  1119. ;
  1120. RRQERR:    CALL    PRTSTR
  1121.     DB    '++NO FILE ACCESSES PERMITTED '
  1122.     DB    'UNTIL .ASM CLOSED',0DH,0AH
  1123.     DB    0
  1124.     JMP    NXCMD
  1125. ;
  1126. L0B62:    CALL    PRTSTR
  1127.     DB    '++UNEXPECTED EOF',0DH,0AH
  1128.     DB    0
  1129.     JMP    NXCMD
  1130. ;
  1131. CMCTL:    LXI    H,CMDBUF+3
  1132.     MOV    A,M
  1133.     CPI    0DH
  1134.     JZ    L0C73
  1135.     CALL    GTVAL
  1136.     CPI    0DH
  1137.     JZ    L0C6D
  1138.     CPI    ' '
  1139.     JZ    L0B96
  1140.     CPI    ','
  1141.     JNZ    CMERR
  1142. L0B96:    INX    H
  1143.     MOV    A,M
  1144.     CALL    L0BB0
  1145.     JMP    NXCMD
  1146. ;
  1147. L0B9E:    PUSH    H
  1148.     PUSH    D
  1149.     PUSH    PSW
  1150.     CALL    L0C51
  1151.     DCX    H
  1152.     JC    L0BAB
  1153.     INX    H
  1154.     INX    H
  1155.     INX    H
  1156. L0BAB:    POP    PSW
  1157.     POP    D
  1158.     CMP    M
  1159.     POP    H
  1160.     RZ
  1161. L0BB0:    STA    INTYP
  1162.     CALL    L0C51
  1163.     JC    L0BFB
  1164.     LDA    INTYP
  1165.     CPI    'I'
  1166.     JZ    L0C4D
  1167.     CPI    'W'
  1168.     JZ    L0C4D
  1169.     CPI    'B'
  1170.     JZ    L0C4D
  1171.     CPI    'S'
  1172.     JZ    L0C4D
  1173.     CPI    'E'
  1174.     JZ    L0C4D
  1175.     CPI    'K'
  1176.     JNZ    CMERR
  1177.     XCHG
  1178.     LXI    H,3
  1179.     DAD    D
  1180.     XCHG
  1181. L0BE0:    MOV    A,M
  1182.     INX    H
  1183.     ANA    M
  1184.     DCX    H
  1185.     INR    A
  1186.     JZ    L0BF5
  1187.     MVI    B,3
  1188. L0BEA:    LDAX    D
  1189.     MOV    M,A
  1190.     INX    D
  1191.     INX    H
  1192.     DCR    B
  1193.     JNZ    L0BEA
  1194.     JMP    L0BE0
  1195. ;
  1196. L0BF5:    DCX    H
  1197.     DCX    H
  1198.     DCX    H
  1199.     JMP    NODOCT
  1200. ;
  1201. L0BFB:    LDA    INTYP
  1202.     CPI    'K'
  1203.     JZ    CMERR
  1204.     CPI    'E'
  1205.     JZ    L0C1C
  1206.     CPI    'B'
  1207.     JZ    L0C1C
  1208.     CPI    'W'
  1209.     JZ    L0C1C
  1210.     CPI    'I'
  1211.     JZ    L0C1C
  1212.     CPI    'S'
  1213.     JNZ    CMERR
  1214. L0C1C:    PUSH    D
  1215.     PUSH    H
  1216.     LXI    H,CTLTBL
  1217. L0C21:    MOV    A,M
  1218.     INX    H
  1219.     ANA    M
  1220.     INX    H
  1221.     INX    H
  1222.     INR    A
  1223.     JNZ    L0C21
  1224.     INX    H
  1225.     INX    H
  1226.     INX    H
  1227.     XCHG
  1228.     LXI    H,-3
  1229.     DAD    D
  1230.     POP    B
  1231. L0C33:    DCX    H
  1232.     DCX    D
  1233.     MOV    A,M
  1234.     STAX    D
  1235.     MOV    A,E
  1236.     CMP    C
  1237.     JNZ    L0C33
  1238.     MOV    A,D
  1239.     CMP    B
  1240.     JNZ    L0C33
  1241.     MOV    H,B
  1242.     MOV    L,C
  1243.     POP    D
  1244.     MOV    M,E
  1245.     INX    H
  1246.     MOV    M,D
  1247.     INX    H
  1248.     LDA    INTYP
  1249.     MOV    M,A
  1250.     RET
  1251. ;
  1252. L0C4D:    INX    H
  1253.     INX    H
  1254.     MOV    M,A
  1255.     RET
  1256. ;
  1257. L0C51:    LXI    H,CTLTBL
  1258. L0C54:    MOV    A,M
  1259.     INX    H
  1260.     ANA    M
  1261.     DCX    H
  1262.     INR    A
  1263.     STC
  1264.     RZ
  1265.     INX    H
  1266.     MOV    A,D
  1267.     CMP    M
  1268.     DCX    H
  1269.     RC
  1270.     JNZ    L0C67
  1271.     MOV    A,E
  1272.     CMP    M
  1273.     RZ
  1274.     RC
  1275. L0C67:    INX    H
  1276.     INX    H
  1277.     INX    H
  1278.     JMP    L0C54
  1279. ;
  1280. L0C6D:    CALL    L0C51
  1281.     JMP    L0C76
  1282. ;
  1283. L0C73:    LXI    H,CTLTBL
  1284. L0C76:    CALL    L1ABF
  1285.     MOV    E,M
  1286.     INX    H
  1287.     MOV    D,M
  1288.     INX    H
  1289.     MOV    A,D
  1290.     ANA    E
  1291.     INR    A
  1292.     JNZ    L0C86
  1293.     JMP    NODOCT
  1294. ;
  1295. L0C86:    PUSH    D
  1296.     PUSH    H
  1297.     CALL    L17EA
  1298.     JC    L0C9F
  1299. L0C8E:    MOV    A,M
  1300.     CALL    TYPE
  1301.     INX    H
  1302.     DCR    B
  1303.     JNZ    L0C8E
  1304.     MVI    A,':'
  1305.     CALL    TYPE
  1306.     CALL    CRLF
  1307. L0C9F:    POP    H
  1308.     POP    D
  1309.     CALL    PRSPC
  1310.     CALL    PRSPC
  1311.     XCHG
  1312.     CALL    PRWORD
  1313.     MVI    A,','
  1314.     CALL    TYPE
  1315.     XCHG
  1316.     MOV    A,M
  1317.     CALL    TYPE
  1318.     CALL    CRLF
  1319.     INX    H
  1320.     JMP    L0C76
  1321. ;
  1322. SAVCTL:    CALL    L1986
  1323.     LXI    H,CTLTBL
  1324. L0CC2:    MOV    E,M
  1325.     INX    H
  1326.     MOV    D,M
  1327.     INX    H
  1328.     MOV    A,D
  1329.     ANA    E
  1330.     INR    A
  1331.     JZ    L0CE6
  1332.     CALL    L0A7E
  1333.     MVI    A,','
  1334.     CALL    L19E6
  1335.     MOV    A,M
  1336.     CALL    L19E6
  1337.     MVI    A,0DH
  1338.     CALL    L19E6
  1339.     MVI    A,0AH
  1340.     CALL    L19E6
  1341.     INX    H
  1342.     JMP    L0CC2
  1343. ;
  1344. L0CE6:    MVI    A,1AH
  1345.     CALL    L19E6
  1346.     CALL    L19A7
  1347.     JMP    NXCMD
  1348. ;
  1349. L0CF1:    CALL    FOPEN
  1350.     LXI    H,CTLTBL
  1351. L0CF7:    CALL    RDFCHR
  1352.     LXI    D,0
  1353. L0CFD:    CPI    1AH
  1354.     JZ    L0D2A
  1355.     CPI    ','
  1356.     JZ    L0D1E
  1357.     CPI    ':'
  1358.     JC    L0D0E
  1359.     SUI    7
  1360. L0D0E:    SUI    '0'
  1361.     XCHG
  1362.     DAD    H
  1363.     DAD    H
  1364.     DAD    H
  1365.     DAD    H
  1366.     ADD    L
  1367.     MOV    L,A
  1368.     XCHG
  1369.     CALL    RDFCHR
  1370.     JMP    L0CFD
  1371. ;
  1372. L0D1E:    MOV    M,E
  1373.     INX    H
  1374.     MOV    M,D
  1375.     INX    H
  1376.     CALL    RDFCHR
  1377.     MOV    M,A
  1378.     INX    H
  1379.     JMP    L0CF7
  1380. ;
  1381. L0D2A:    MVI    M,0FFH
  1382.     INX    H
  1383.     MVI    M,0FFH
  1384.     JMP    NODOCT
  1385. ;
  1386. CMCMNT:    CALL    L0DFB
  1387.     LXI    H,CMDBUF+3
  1388.     MOV    A,M
  1389.     CPI    0DH
  1390.     JZ    L0DAB
  1391.     CALL    GTVAL
  1392.     INX    H
  1393.     CPI    0DH
  1394.     JZ    L0DA5
  1395.     CPI    ' '
  1396.     JZ    L0D51
  1397.     CPI    ','
  1398.     JNZ    CMERR
  1399. L0D51:    PUSH    H
  1400.     CALL    L0D87
  1401.     JC    L0D63
  1402.     CALL    L0DD6
  1403.     POP    H
  1404.     PUSH    H
  1405.     MOV    A,M
  1406.     CPI    0DH
  1407.     JZ    NXCMD
  1408. L0D63:    LHLD    DOCEND
  1409.     MOV    M,E
  1410.     INX    H
  1411.     MOV    M,D
  1412.     INX    H
  1413.     POP    D
  1414.     MVI    B,0
  1415.     PUSH    H
  1416. L0D6E:    INX    H
  1417.     LDAX    D
  1418.     MOV    M,A
  1419.     INX    D
  1420.     INR    B
  1421.     LDAX    D
  1422.     CPI    0DH
  1423.     JNZ    L0D6E
  1424.     INX    H
  1425.     SHLD    DOCEND
  1426.     MVI    M,0FFH
  1427.     INX    H
  1428.     MVI    M,0FFH
  1429.     POP    H
  1430.     MOV    M,B
  1431.     JMP    NXCMD
  1432. ;
  1433. L0D87:    LHLD    DOCTBL
  1434. L0D8A:    MOV    A,M
  1435.     INX    H
  1436.     ANA    M
  1437.     DCX    H
  1438.     INR    A
  1439.     STC
  1440.     RZ
  1441.     INX    H
  1442.     MOV    A,D
  1443.     CMP    M
  1444.     DCX    H
  1445.     JNZ    L0D9B
  1446.     MOV    A,E
  1447.     CMP    M
  1448.     RZ
  1449. L0D9B:    INX    H
  1450.     INX    H
  1451.     MOV    A,M
  1452.     CALL    ADDF
  1453.     INX    H
  1454.     JMP    L0D8A
  1455. ;
  1456. L0DA5:    CALL    L0D87
  1457.     JMP    L0DAE
  1458. ;
  1459. L0DAB:    LHLD    DOCTBL
  1460. L0DAE:    CALL    L1ABF
  1461.     MOV    E,M
  1462.     INX    H
  1463.     MOV    D,M
  1464.     INX    H
  1465.     MOV    A,D
  1466.     ANA    E
  1467.     INR    A
  1468.     JZ    NXCMD
  1469.     XCHG
  1470.     CALL    PRWORD
  1471.     XCHG
  1472.     MVI    A,';'
  1473.     CALL    TYPE
  1474.     MOV    B,M
  1475. L0DC6:    INX    H
  1476.     MOV    A,M
  1477.     CALL    TYPE
  1478.     DCR    B
  1479.     JNZ    L0DC6
  1480.     CALL    CRLF
  1481.     INX    H
  1482.     JMP    L0DAE
  1483. ;
  1484. L0DD6:    MOV    A,M
  1485.     INX    H
  1486.     ANA    M
  1487.     INR    A
  1488.     RZ
  1489.     DCX    H
  1490.     PUSH    D
  1491.     MOV    D,H
  1492.     MOV    E,L
  1493.     INX    H
  1494.     INX    H
  1495.     MOV    A,M
  1496.     CALL    ADDF
  1497.     INX    H
  1498.     MVI    B,0
  1499. L0DE8:    MOV    A,M
  1500.     STAX    D
  1501.     INX    H
  1502.     INX    D
  1503.     MOV    C,A
  1504.     ANA    B
  1505.     INR    A
  1506.     MOV    B,C
  1507.     JNZ    L0DE8
  1508.     XCHG
  1509.     DCX    H
  1510.     DCX    H
  1511.     SHLD    DOCEND
  1512.     POP    D
  1513.     RET
  1514. ;
  1515. L0DFB:    LHLD    DOCTBL
  1516.     MOV    A,H
  1517.     ORA    L
  1518.     RNZ
  1519.     CALL    PRTSTR
  1520.     DB    '++COMMAND IGNORED++',0DH
  1521.     DB    0AH,'++Issue ''UNNNN'' to tell '
  1522.     DB    'RESOURCE to use address '
  1523.     DB    'NNNN',0DH,0AH,'as the start '
  1524.     DB    'of the comments table',0DH
  1525.     DB    0AH,0
  1526.     JMP    NXCMD
  1527. ;
  1528. CMUSEC:    LXI    H,CMDBUF+3
  1529.     MOV    A,M
  1530.     CPI    0DH
  1531.     JZ    CMERR
  1532.     CPI    '.'
  1533.     JZ    CMERR
  1534.     CALL    GTVAL
  1535.     XCHG
  1536.     MOV    A,H
  1537.     CPI    1FH
  1538.     JC    L0E9D
  1539.     SHLD    DOCTBL
  1540.     SHLD    DOCEND
  1541.     MVI    M,0FFH
  1542.     INX    H
  1543.     MVI    M,0FFH
  1544.     JMP    NXCMD
  1545. ;
  1546. L0E9D:    CALL    PRTSTR
  1547.     DB    '++NO!! <2300H!',0DH,0AH
  1548.     DB    0
  1549.     JMP    NXCMD
  1550. ;
  1551. L0EB4:    PUSH    D
  1552.     PUSH    H
  1553.     MVI    A,1
  1554.     STA    WFIFLG
  1555.     LHLD    PCNTR
  1556.     XCHG
  1557.     CALL    L17EA
  1558.     JC    L0EF6
  1559.     MOV    C,B
  1560.     PUSH    H
  1561. L0EC7:    MOV    A,M
  1562.     CPI    '+'
  1563.     JZ    L0EF5
  1564.     CPI    '-'
  1565.     JZ    L0EF5
  1566.     INX    H
  1567.     DCR    C
  1568.     JNZ    L0EC7
  1569.     POP    H
  1570.     CALL    PSTRG
  1571.     MVI    A,':'
  1572.     CALL    TYPE
  1573.     LDA    TRMFLG
  1574.     ORA    A
  1575.     JNZ    L0EF6
  1576.     CALL    TABC
  1577.     CALL    TABC
  1578.     CALL    SEMIC
  1579.     LHLD    PCNTR
  1580.     CALL    PRWORD
  1581.     CALL    CRLF
  1582.     JMP    L0EF6
  1583. ;
  1584. L0EF5:    POP    H
  1585. L0EF6:    XRA    A
  1586.     STA    WFIFLG
  1587.     CALL    PRSPC
  1588.     CALL    PRSPC
  1589.     LHLD    PCNTR
  1590.     CALL    PRWORD
  1591.     MVI    A,1
  1592.     STA    WFIFLG
  1593.     CALL    TABC
  1594.     POP    H
  1595.     POP    D
  1596.     RET
  1597. ;
  1598. DLINE:    CALL    L0EB4
  1599.     XRA    A
  1600.     STA    INDX
  1601.     LHLD    PCNTR
  1602.     XCHG
  1603.     LHLD    OFFSET
  1604.     DAD    D
  1605.     SHLD    PGPTR
  1606.     XCHG
  1607.     INX    H    ;COUNT OVER SINGLE BYTE
  1608.     SHLD    PCNTR
  1609.     XCHG
  1610.     MOV    B,M
  1611.     LXI    H,OPCT-7
  1612. L0F2D:    LXI    D,7
  1613. ULP:    DAD    D
  1614.     MOV    A,M
  1615.     ORA    A
  1616.     JZ    PRDB
  1617.     ANA    B
  1618.     MOV    C,A
  1619.     INX    H
  1620.     MOV    A,M
  1621.     CMP    C
  1622.     JNZ    ULP
  1623.     INX    H
  1624.     MOV    A,M
  1625.     STA    INTYP
  1626.     MVI    B,5
  1627. PROLP:    INX    H
  1628.     MOV    A,M
  1629.     CPI    1    ;INDX VALUE FLAG
  1630.     JNZ    PRO2
  1631.     LDA    INDX
  1632.     ORA    A
  1633.     JMP    PRO1
  1634. ;
  1635. PRO2:    CPI    '.'
  1636. PRO1:    CNZ    TYPE
  1637.     DCR    B
  1638.     JNZ    PROLP
  1639.     LHLD    PCNTR
  1640.     LDA    INTYP
  1641.     ANI    3FH
  1642.     CPI    4
  1643.     JC    FOUND
  1644.     CPI    9
  1645.     JNC    FOUND
  1646.     INX    H    ;2 BYTE AT LEAST
  1647.     CPI    6
  1648.     JC    L0F75
  1649.     INX    H    ;3 BYTE INSTR
  1650. L0F75:    SHLD    PCNTR
  1651. FOUND:    MOV    E,A
  1652.     MVI    D,0
  1653.     LXI    H,JMPTBL
  1654. ;
  1655.     DAD    D
  1656.     DAD    D
  1657.     DAD    D
  1658.     PUSH    H
  1659.     LHLD    PGPTR
  1660.     RET
  1661. ;
  1662. INCPC:    PUSH    H
  1663.     LHLD    PCNTR
  1664.     INX    H
  1665.     SHLD    PCNTR
  1666.     POP    H
  1667.     RET
  1668. ;            LGTH    OPRND    EXMPL
  1669. JMPTBL:    JMP    TYPE0    ;1    NONE    DAA
  1670.     JMP    TYPE1    ;1    REG    ADD
  1671.     JMP    TYPE2    ;1    REG    INR
  1672.     JMP    TYPE3    ;1    XR    STAX
  1673.     JMP    TYPE4    ;2    R,DATA    MVI
  1674.     JMP    TYPE5    ;2    DATA    OUT
  1675.     JMP    TYPE6    ;3    XR,ADDR    LXI
  1676.     JMP    TYPE7    ;3    ADDR    LHLD
  1677.     JMP    TYPE8    ;3    ADDR    JZ
  1678.     JMP    TYPE9    ;1    NONE    RZ
  1679.     JMP    TYP10    ;1    NR.    RST
  1680.     JMP    TYP11    ;1    R,R    MOV
  1681.     JMP    TYP12    ;2    "CB"    BIT
  1682.     JMP    TYP13    ;2/4    "ED"    LDI
  1683.     JMP    TYP14    ;2/4    "DD"    SRL
  1684.     JMP    TYP15    ;2/4    "FD"    RL
  1685.     JMP    TYP16    ;2    NONE    JR
  1686.     JMP    TYP17    ;2    FLAG    JR C
  1687.     JMP    TYP18    ;2    N,R    BIT
  1688.     JMP    TYP19    ;X/Y INDEX
  1689.     JMP    TYP20    ;4    X/Y,ADD    LXI
  1690.     JMP    TYP21    ;3    D(),R    MOV
  1691.     JMP    TYP22    ;3    REG    ADD
  1692.     JMP    TYP23    ;3
  1693.     JMP    TYP24    ;4
  1694. ;    
  1695. TYPE0:    JMP    CRLF
  1696. ;
  1697. TYP22:    CALL    INCPC    ;FOR DD/FD INSTRS
  1698. TYPE1:    CALL    TABC
  1699. T1B:    CALL    REG
  1700.     JMP    CRLF
  1701. ;
  1702. TYP23:    CALL    INCPC
  1703. TYPE2:    CALL    TABC
  1704.     CALL    REGM
  1705.     JMP    CRLF
  1706. ;
  1707. TYPE3:    CALL    TABC
  1708.     CALL    XR
  1709.     JMP    CRLF
  1710. ;
  1711. TYP24:    CALL    INCPC
  1712.     CALL    INCPC
  1713. TYPE4:    CALL    TABC
  1714.     CALL    REGM
  1715.     CALL    COMMA
  1716.     JMP    T52
  1717. ;
  1718. TYPE5:    CALL    TABC
  1719. T52:    LHLD    PGPTR
  1720.     INX    H
  1721.     LDA    INDX
  1722.     ORA    A
  1723.     JZ    T52A
  1724.     INX    H
  1725. T52A:    SHLD    PGPTR
  1726. L1017:    LHLD    PGPTR
  1727.     MOV    A,M
  1728.     CPI    ' '
  1729.     JC    PHEXB
  1730.     CPI    5BH
  1731.     JNC    PHEXB
  1732.     LDA    INTYP
  1733.     CPI    4
  1734.     JC    PHEXB
  1735.     CPI    6
  1736.     JNC    PHEXB
  1737.     MOV    A,M
  1738.     CALL    QCHAR
  1739.     MVI    A,27H
  1740.     CALL    TYPE
  1741.     CALL    TABC
  1742.     CALL    SEMIC
  1743. PHEXB:    MOV    A,M
  1744.     CPI    0AH
  1745.     JC    NO2CH
  1746.     CALL    XO0
  1747.     MVI    A,'H'
  1748.     CALL    TYPE
  1749.     JMP    CRLF
  1750. ;
  1751. NO2CH:    ADI    '0'
  1752.     CALL    TYPE
  1753.     JMP    CRLF
  1754. ;
  1755. TYPE6:    CALL    TABC
  1756.     LHLD    PGPTR
  1757.     MOV    A,M
  1758.     CALL    XR
  1759.     CALL    COMMA
  1760. PRT2X:    LHLD    PGPTR
  1761.     INX    H
  1762.     MOV    E,M
  1763.     INX    H
  1764.     MOV    D,M
  1765. L106E:    PUSH    D
  1766.     CALL    L17EA
  1767.     JNC    L1084
  1768.     LDA    SYBFLG
  1769.     ORA    A
  1770.     JZ    L108D
  1771.     POP    D
  1772.     PUSH    D
  1773.     CALL    L173A
  1774.     JMP    L108D
  1775. ;
  1776. L1084:    CALL    PSTRG
  1777.     LDA    TRMFLG
  1778.     ORA    A
  1779.     JZ    TRMLB2
  1780.     POP    D
  1781.     JMP    CRLF
  1782. TRMLB2:    CALL    TABC
  1783.     CALL    SEMIC
  1784. L108D:    POP    D
  1785.     MOV    A,D
  1786.     ORA    E
  1787.     MVI    A,'0'
  1788.     JZ    L10A3
  1789.     MOV    A,D
  1790.     ORA    A
  1791.     JZ    L10A9
  1792.     CALL    XO0
  1793.     MOV    A,E
  1794.     CALL    XO
  1795. L10A1:    MVI    A,'H'
  1796. L10A3:    CALL    TYPE
  1797.     JMP    CRLF
  1798. ;
  1799. L10A9:    MOV    A,E
  1800.     CPI    0AH
  1801.     JC    L10B5
  1802.     CALL    XO0
  1803.     JMP    L10A1
  1804. ;
  1805. L10B5:    ADI    '0'
  1806.     JMP    L10A3
  1807. ;
  1808. TYPE7:    CALL    TABC
  1809.     JMP    PRT2X
  1810. ;
  1811. TYPE8:    CALL    GETCC
  1812.     JMP    TYPE7
  1813. ;
  1814. TYPE9:    CALL    GETCC
  1815.     JMP    CRLF
  1816. ;
  1817. TYP10:    CALL    TABC
  1818.     LHLD    PGPTR
  1819.     MOV    A,M
  1820.     RAR
  1821.     RAR
  1822.     RAR
  1823.     ANI    7
  1824.     ORI    '0'
  1825.     CALL    TYPE
  1826.     JMP    CRLF
  1827. ;
  1828. TYP21:    CALL    INCPC    ;THEN FALL THRU
  1829. ;
  1830. TYP11:    CALL    TABC
  1831.     CALL    REGM
  1832. CMREG:    CALL    COMMA
  1833.     JMP    T1B
  1834. ;
  1835. PRTRL:    MOV    C,L
  1836.     MOV    A,H
  1837.     JMP    PRT2X
  1838. ;
  1839. TYP13:    INX    H
  1840.     SHLD    PGPTR
  1841.     MOV    B,M
  1842.     LXI    H,EDTBL-7
  1843.     CALL    INCPC
  1844.     JMP    L0F2D
  1845. ;
  1846. TYP14:    MVI    A,'X'
  1847.     JMP    IXIYC
  1848. ;
  1849. TYP15:    MVI    A,'Y'
  1850. ;
  1851. IXIYC:    STA    INDX
  1852.     CALL    INCPC    ;ACCNT FOR PREFIX BYTE
  1853.     INX    H    ;SKIP DD/FD
  1854.     MOV    A,M    ;BYTE 2 MAY BE OPCODE
  1855.     CPI    0CBH
  1856.     JNZ    IXIYT
  1857.     INX    H
  1858.     MOV    A,M
  1859.     STA    DISPL    ;FROM THIRD BYTE
  1860. TYP12:    INX    H
  1861.     MOV    B,M    ;ACTUAL OPCODE HERE
  1862.     SHLD    PGPTR
  1863.     CALL    INCPC
  1864.     LXI    H,CBTBL-7
  1865.     JMP    L0F2D
  1866. ;
  1867. IXIYT:    PUSH    PSW
  1868.     SHLD    PGPTR    ;SAVE OPCODE PNTR
  1869.     INX    H
  1870.     MOV    A,M
  1871.     STA    DISPL    ;FROM THIRD BYTE
  1872.     POP    PSW    ;RECOV OPCODE
  1873.     MOV    B,A
  1874.     LXI    H,DDTBL-7
  1875.     JMP    L0F2D
  1876. ;
  1877. TYP16:    CALL    TABC
  1878.     INX    H
  1879.     MOV    A,M
  1880.     CALL    INCPC
  1881.     LHLD    PCNTR
  1882.     MOV    E,A
  1883.     MVI    D,0
  1884.     CMP    D
  1885.     JP    NTNEG
  1886.     DCR    D
  1887. NTNEG:    DAD    D
  1888.     XCHG
  1889.     JMP    L106E
  1890. ;
  1891. TYP17:    MOV    A,M
  1892.     RAR
  1893.     RAR
  1894.     ANI    6
  1895.     PUSH    H
  1896.     CALL    PCC
  1897.     POP    H
  1898.     JMP    TYP16
  1899. ;
  1900. TYP18:    CALL    TABC
  1901.     MOV    A,M
  1902.     RAR
  1903.     RAR
  1904.     RAR
  1905.     ANI    7
  1906.     ORI    '0'
  1907.     CALL    TYPE
  1908.     JMP    CMREG
  1909. ;
  1910. TYP19:    CALL    TABC
  1911.     LDA    INDX
  1912.     CALL    TYPE
  1913.     JMP    CRLF
  1914. ;
  1915. TYP20:    SHLD    PGPTR
  1916.     CALL    TABC
  1917.     LDA    INDX
  1918.     CALL    TYPE
  1919.     CALL    COMMA
  1920.     CALL    INCPC
  1921.     CALL    INCPC
  1922.     JMP    PRT2X
  1923. ;
  1924. XADSP:    LDA    INDX
  1925.     ORA    A
  1926.     MVI    A,'M'
  1927.     JZ    TYPE
  1928.     INX    H
  1929.     MOV    A,M
  1930.     PUSH    H
  1931.     LDA    DISPL
  1932.     MOV    H,A
  1933.     ORA    A
  1934.     JP    POSIT
  1935.     MVI    A,'-'
  1936.     CALL    TYPE
  1937.     MOV    A,H
  1938.     CMA
  1939.     INR    A
  1940. POSIT:    CPI    64H
  1941.     JC    LT100
  1942.     SBI    64H
  1943.     MOV    H,A
  1944.     MVI    A,'1'
  1945.     CALL    TYPE
  1946.     MOV    A,H
  1947. LT100:    MVI    L,0
  1948. TENLP:    SUI    0AH
  1949.     JM    TENOK
  1950.     INR    L
  1951.     JMP    TENLP
  1952. ;
  1953. TENOK:    ADI    0AH
  1954.     MOV    H,A
  1955.     MVI    A,'0'
  1956.     ADD    L
  1957.     CALL    TYPE
  1958.     MOV    A,H
  1959.     ADI    '0'
  1960.     POP    H
  1961.     CALL    TYPE
  1962.     LXI    H,INDX-1
  1963.     MVI    B,3
  1964.     JMP    PSTRG
  1965. ;
  1966. COMMA:    MVI    A,','
  1967.     JMP    TYPE
  1968. ;
  1969. TABC:    MVI    A,9
  1970.     JMP    TYPE
  1971. ;
  1972. SEMIC:    MVI    A,';'
  1973.     JMP    TYPE
  1974. ;
  1975. PRDB:    CALL    L1A7E
  1976.     DB    '.BYTE',9,0
  1977.     LDA    INDX
  1978.     ORA    A
  1979.     JZ    DB1PR
  1980.     LHLD    PGPTR
  1981.     DCX    H
  1982.     MOV    A,M
  1983.     CALL    XO0
  1984.     MVI    A,'H'
  1985.     CALL    TYPE
  1986.     CALL    COMMA
  1987. DB1PR:    MVI    A,4
  1988.     STA    INTYP
  1989.     JMP    L1017
  1990. ;
  1991. GETCC:    LHLD    PGPTR
  1992.     MOV    A,M
  1993.     RAR
  1994.     RAR
  1995.     ANI    0EH
  1996. PCC:    LXI    H,CCTAB
  1997.     CALL    ADDF
  1998.     MOV    A,M
  1999.     CALL    TYPE
  2000.     INX    H
  2001.     MOV    A,M
  2002.     CPI    '.'
  2003.     CNZ    TYPE
  2004.     RET
  2005. ;
  2006. QCHAR:    PUSH    PSW
  2007.     MVI    A,27H
  2008.     CALL    TYPE
  2009.     POP    PSW
  2010.     CPI    27H
  2011.     JNZ    TYPE
  2012.     PUSH    PSW
  2013.     CALL    TYPE
  2014.     POP    PSW
  2015.     JMP    TYPE
  2016. ;
  2017. XR:    LHLD    PGPTR
  2018.     MOV    A,M
  2019.     RAR
  2020.     RAR
  2021.     RAR
  2022.     ANI    6
  2023.     CPI    6
  2024.     JNZ    L127A
  2025.     MOV    A,M
  2026.     ANI    0CFH
  2027.     CPI    0C1H
  2028.     JZ    L1264
  2029.     CPI    0C5H
  2030.     JZ    L1264
  2031.     MVI    A,'S'
  2032.     CALL    TYPE
  2033.     MVI    A,'P'
  2034.     JMP    TYPE
  2035. ;
  2036. L1264:    CALL    L1A7E
  2037.     MOV    D,B
  2038.     MOV    D,E
  2039.     MOV    D,A
  2040.     NOP
  2041.     RET
  2042. ;
  2043. REGM:    LHLD    PGPTR
  2044.     MOV    A,M
  2045.     RAR
  2046.     RAR
  2047.     RAR
  2048.     JMP    L127A
  2049. ;
  2050. REG:    LHLD    PGPTR
  2051.     MOV    A,M
  2052. L127A:    LXI    H,REGTBL
  2053.     ANI    7
  2054.     CALL    ADDF
  2055.     MOV    A,M
  2056.     CPI    'M'
  2057.     JZ    XADSP
  2058.     JMP    TYPE
  2059. ;
  2060. ADDF:    ADD    L
  2061.     MOV    L,A
  2062.     RNC
  2063.     INR    H
  2064.     RET
  2065. ;
  2066. XO0:    CPI    0A0H
  2067.     JC    XO
  2068.     PUSH    PSW
  2069.     MVI    A,'0'
  2070.     CALL    TYPE
  2071.     POP    PSW
  2072.     JMP    XO
  2073. ;
  2074. PSTRG:    MOV    A,M
  2075.     CALL    TYPE
  2076.     INX    H
  2077.     DCR    B
  2078.     JNZ    PSTRG
  2079.     RET
  2080. ;
  2081. CCTAB:    DB    'NZ'
  2082.     DB    'Z.'
  2083.     DB    'NC'
  2084.     DB    'C.'
  2085.     DB    'PO'
  2086.     DB    'PE'
  2087.     DB    'P.'
  2088.     DB    'M.'
  2089. ;
  2090. REGTBL:    DB    'BCDE'
  2091.     DB    'HLMA'
  2092. ;
  2093. OPCT:    DB    0FFH,0CBH,12,'.....'
  2094.     DB    0FFH,0EDH,13,'.....'
  2095.     DB    0FFH,0DDH,14,'.....'
  2096.     DB    0FFH,0FDH,15,'.....'
  2097.     DB    0FFH,0CEH,5,'ACI..'
  2098.     DB    0F8H,88H,1,'ADC..'
  2099.     DB    0F8H,80H,1,'ADD..'
  2100.     DB    0FFH,0C6H,5,'ADI..'
  2101.     DB    0F8H,0A0H,1,'ANA..'
  2102.     DB    0FFH,0E6H,5,'ANI..'
  2103.     DB    0C7H,0C4H,8,'C....'
  2104.     DB    0FFH,0CDH,7,'CALL.'
  2105.     DB    0FFH,2FH,0,'CMA..'
  2106.     DB    0FFH,3FH,0,'CMC..'
  2107.     DB    0F8H,0B8H,1,'CMP..'
  2108.     DB    0FFH,0FEH,5,'CPI..'
  2109.     DB    0FFH,27H,0,'DAA..'
  2110.     DB    0CFH,9,3,'DAD..'
  2111.     DB    0C7H,5,2,'DCR..'
  2112.     DB    0CFH,0BH,3,'DCX..'
  2113.     DB    0FFH,0F3H,0,'DI...'
  2114.     DB    0FFH,10H,16,'DJNZ.'
  2115.     DB    0FFH,0FBH,0,'EI...'
  2116.     DB    0FFH,8,40H,'EXAF.'
  2117.     DB    0FFH,0D9H,40H,'EXX..'
  2118.     DB    0FFH,76H,0,'HLT..'
  2119.     DB    0FFH,0DBH,5,'IN...'
  2120.     DB    0C7H,4,2,'INR..'
  2121.     DB    0CFH,3,3,'INX..'
  2122.     DB    0C7H,0C2H,8,'J....'
  2123.     DB    0FFH,0C3H,7,'JMP..'
  2124.     DB    0FFH,18H,16,'JMPR.'
  2125.     DB    0E7H,20H,17,'JR...'
  2126.     DB    0FFH,3AH,7,'LDA..'
  2127.     DB    0EFH,0AH,3,'LDAX.'
  2128.     DB    0FFH,2AH,7,'LHLD.'
  2129.     DB    0CFH,1,6,'LXI..'
  2130.     DB    0C0H,40H,11,'MOV..'
  2131.     DB    0C7H,6,4,'MVI..'
  2132.     DB    0FFH,0,0,'NOP..'
  2133.     DB    0F8H,0B0H,1,'ORA..'
  2134.     DB    0FFH,0F6H,5,'ORI..'
  2135.     DB    0FFH,0D3H,5,'OUT..'
  2136.     DB    0FFH,0E9H,0,'PCHL.'
  2137.     DB    0CFH,0C1H,3,'POP..'
  2138.     DB    0CFH,0C5H,3,'PUSH.'
  2139.     DB    0C7H,0C0H,9,'R....'
  2140.     DB    0FFH,17H,0,'RAL..'
  2141.     DB    0FFH,1FH,0,'RAR..'
  2142.     DB    0FFH,0C9H,0,'RET..'
  2143.     DB    0FFH,0FH,0,'RRC..'
  2144.     DB    0FFH,7,0,'RLC..'
  2145.     DB    0C7H,0C7H,10,'RST..'
  2146.     DB    0F8H,98H,1,'SBB..'
  2147.     DB    0FFH,0DEH,5,'SBI..'
  2148.     DB    0FFH,22H,7,'SHLD.'
  2149.     DB    0FFH,0F9H,0,'SPHL.'
  2150.     DB    0FFH,32H,7,'STA..'
  2151.     DB    0EFH,2,3,'STAX.'
  2152.     DB    0FFH,37H,0,'STC..'
  2153.     DB    0F8H,90H,1,'SUB..'
  2154.     DB    0FFH,0D6H,5,'SUI..'
  2155.     DB    0FFH,0EBH,0,'XCHG.'
  2156.     DB    0F8H,0A8H,1,'XRA..'
  2157.     DB    0FFH,0EEH,5,'XRI..'
  2158.     DB    0FFH,0E3H,0,'XTHL.'
  2159.     DB    0
  2160. ;
  2161. CBTBL:    DB    0C0H,40H,18,'BIT..'
  2162.     DB    0C0H,80H,18,'RES..'
  2163.     DB    0C0H,0C0H,18,'SET..'
  2164.     DB    0F8H,0,1,'RLCR.'
  2165.     DB    0F8H,8,1,'RRCR.'
  2166.     DB    0F8H,10H,1,'RALR.'
  2167.     DB    0F8H,18H,1,'RARR.'
  2168.     DB    0F8H,20H,1,'SLAR.'
  2169.     DB    0F8H,28H,1,'SRAR.'
  2170.     DB    0F8H,38H,1,'SRLR.'
  2171.     DB    0
  2172. ;
  2173. EDTBL:    DB    0FFH,43H,7,'SBCD.'
  2174.     DB    0FFH,53H,7,'SDED.'
  2175.     DB    0FFH,73H,7,'SSPD.'
  2176.     DB    0FFH,4BH,7,'LBCD.'
  2177.     DB    0FFH,5BH,7,'LDED.'
  2178.     DB    0FFH,4FH,0,'STAR.'
  2179.     DB    0FFH,5FH,0,'LDAR.'
  2180.     DB    0FFH,47H,0,'STAI.'
  2181.     DB    0FFH,57H,0,'LDAI.'
  2182.     DB    0FFH,7BH,7,'LSPD.'
  2183.     DB    0FFH,44H,0,'NEG..'
  2184.     DB    0FFH,45H,0,'RETN.'
  2185.     DB    0FFH,4DH,0,'RETI.'
  2186.     DB    0FFH,46H,0,'IM0..'
  2187.     DB    0FFH,56H,0,'IM1..'
  2188.     DB    0FFH,5EH,0,'IM2..'
  2189.     DB    0FFH,0A0H,0,'LDI..'
  2190.     DB    0FFH,0B0H,0,'LDIR.'
  2191.     DB    0FFH,0A8H,0,'LDD..'
  2192.     DB    0FFH,0B8H,0,'LDDR.'
  2193.     DB    0FFH,0A1H,0,'CCI..'
  2194.     DB    0FFH,0B1H,0,'CCIR.'
  2195.     DB    0FFH,0A9H,0,'CCD..'
  2196.     DB    0FFH,0B9H,0,'CCDR.'
  2197.     DB    0FFH,0A2H,0,'INI..'
  2198.     DB    0FFH,0B2H,0,'INIR.'
  2199.     DB    0FFH,0AAH,0,'IND..'
  2200.     DB    0FFH,0BAH,0,'INDR.'
  2201.     DB    0FFH,0A3H,0,'OUTI.'
  2202.     DB    0FFH,0B3H,0,'OUTIR'
  2203.     DB    0FFH,0ABH,0,'OUTD.'
  2204.     DB    0FFH,0BBH,0,'OUTDR'
  2205.     DB    0CFH,42H,3,'DSBC.'
  2206.     DB    0CFH,4AH,3,'DADC.'
  2207.     DB    0FFH,67H,0,'RRD..'
  2208.     DB    0FFH,6FH,0,'RLD..'
  2209.     DB    0C7H,40H,2,'INP..'
  2210.     DB    0C7H,41H,2,'OUTP.'
  2211.     DB    0CFH,42H,3,'DSBC.'
  2212.     DB    0CFH,4AH,3,'DADC.'
  2213.     DB    0
  2214. ;
  2215. DDTBL:    DB    0FFH,29H,19,'DAD',1,'.'
  2216.     DB    0CFH,9,3,'DAD',1,'.'
  2217.     DB    0FFH,0E1H,19,'POP..'
  2218.     DB    0FFH,0E5H,19,'PUSH.'
  2219.     DB    0FFH,22H,7,'SI',1,'D.'
  2220.     DB    0FFH,2AH,7,'LI',1,'D.'
  2221.     DB    0FFH,23H,19,'INX..'
  2222.     DB    0FFH,2BH,19,'DCX..'
  2223.     DB    0C7H,46H,21,'MOV..'
  2224.     DB    0F8H,70H,21,'MOV..'
  2225.     DB    0FFH,86H,22,'ADD..'
  2226.     DB    0FFH,8EH,22,'ADC..'
  2227.     DB    0FFH,96H,22,'SUB..'
  2228.     DB    0FFH,9EH,22,'SBB..'
  2229.     DB    0FFH,0A6H,22,'ANA..'
  2230.     DB    0FFH,0AEH,22,'XRA..'
  2231.     DB    0FFH,0B6H,22,'ORA..'
  2232.     DB    0FFH,0BEH,22,'CMP..'
  2233.     DB    0FFH,34H,23,'INR..'
  2234.     DB    0FFH,35H,23,'DCR..'
  2235.     DB    0FFH,36H,24,'MVI..'
  2236.     DB    0FFH,21H,20,'LXI..'
  2237.     DB    0FFH,0F9H,0,'SPI',1,'.'
  2238.     DB    0FFH,0E3H,0,'XTI',1,'.'
  2239.     DB    0FFH,0E9H,0,'PCI',1,'.'
  2240.     DB    0
  2241. ;
  2242. L173A:    LXI    H,CMDBUF
  2243.     MVI    M,'L'
  2244.     INX    H
  2245.     MOV    A,D
  2246.     CALL    L189F
  2247.     MOV    A,E
  2248.     CALL    L189F
  2249.     LXI    H,CMDBUF
  2250.     MVI    B,5
  2251. L174D:    CALL    L1798
  2252.     JC    L1757
  2253.     MOV    M,E
  2254.     INX    H
  2255.     MOV    M,D
  2256.     RET
  2257. ;
  2258. L1757:    PUSH    H
  2259.     PUSH    D
  2260.     PUSH    B
  2261.     LHLD    SYMTP
  2262.     MOV    D,H
  2263.     MOV    E,L
  2264.     MOV    A,B
  2265.     ADI    3
  2266.     ADD    L
  2267.     MOV    L,A
  2268.     MOV    A,H
  2269.     ACI    0
  2270.     MOV    H,A
  2271.     SHLD    SYMTP
  2272.     INX    H
  2273.     INX    H
  2274.     MVI    M,0
  2275.     DCX    H
  2276.     DCX    H
  2277.     MOV    B,H
  2278.     MOV    C,L
  2279.     LHLD    L1B4B
  2280. L1776:    MOV    A,E
  2281.     CMP    L
  2282.     JNZ    L1780
  2283.     MOV    A,D
  2284.     CMP    H
  2285.     JZ    L1787
  2286. L1780:    DCX    D
  2287.     DCX    B
  2288.     LDAX    D
  2289.     STAX    B
  2290.     JMP    L1776
  2291. ;
  2292. L1787:    POP    B
  2293.     POP    D
  2294.     MOV    M,E
  2295.     INX    H
  2296.     MOV    M,D
  2297.     INX    H
  2298.     MOV    M,B
  2299.     POP    D
  2300. L178F:    INX    H
  2301.     LDAX    D
  2302.     MOV    M,A
  2303.     INX    D
  2304.     DCR    B
  2305.     JNZ    L178F
  2306.     RET
  2307. ;
  2308. L1798:    PUSH    D
  2309.     PUSH    H
  2310.     LXI    H,SYMTBL
  2311. L179D:    POP    D
  2312.     PUSH    D
  2313.     INX    H
  2314.     INX    H
  2315.     PUSH    H
  2316.     MOV    A,M
  2317.     INX    H
  2318.     ORA    A
  2319.     JZ    L17E0
  2320.     CMP    B
  2321.     JC    L17CC
  2322.     JNZ    L17D6
  2323.     MOV    C,A
  2324.     CALL    CMPSTR
  2325.     JZ    L17C5
  2326.     JC    L17E0
  2327. L17B9:    POP    H
  2328.     MOV    A,M
  2329.     INX    H
  2330.     ADD    L
  2331.     MOV    L,A
  2332.     JNC    L179D
  2333.     INR    H
  2334.     JMP    L179D
  2335. ;
  2336. L17C5:    POP    H
  2337.     DCX    H
  2338.     DCX    H
  2339.     POP    D
  2340.     POP    D
  2341.     ORA    A
  2342.     RET
  2343. ;
  2344. L17CC:    MOV    C,A
  2345.     CALL    CMPSTR
  2346.     JNC    L17B9
  2347.     JMP    L17E0
  2348. ;
  2349. L17D6:    MOV    C,B
  2350.     CALL    CMPSTR
  2351.     JZ    L17E0
  2352.     JNC    L17B9
  2353. L17E0:    POP    H
  2354.     DCX    H
  2355.     DCX    H
  2356.     SHLD    L1B4B
  2357.     POP    H
  2358.     POP    D
  2359.     STC
  2360.     RET
  2361. ;
  2362. L17EA:    LXI    H,SYMTBL
  2363. L17ED:    MOV    A,M
  2364.     INX    H
  2365.     CMP    E
  2366.     JNZ    L17F8
  2367.     MOV    A,M
  2368.     CMP    D
  2369.     JZ    L1807
  2370. L17F8:    INX    H
  2371.     MOV    A,M
  2372.     ORA    A
  2373.     STC
  2374.     RZ
  2375.     INX    H
  2376.     ADD    L
  2377.     MOV    L,A
  2378.     JNC    L17ED
  2379.     INR    H
  2380.     JMP    L17ED
  2381. ;
  2382. L1807:    INX    H
  2383.     MOV    A,M
  2384.     INX    H
  2385.     MOV    B,A
  2386.     ORA    A
  2387.     RNZ
  2388.     STC
  2389.     RET
  2390. ;
  2391. CMENTR:    LXI    H,CMDBUF+3
  2392.     CALL    GTVAL
  2393.     MOV    A,M
  2394.     CPI    ' '
  2395.     JZ    L1820
  2396.     CPI    ','
  2397.     JNZ    CMERR
  2398. L1820:    INX    H
  2399.     MOV    A,M
  2400.     CPI    '.'
  2401.     JNZ    CMERR
  2402.     PUSH    D
  2403.     CALL    L1872
  2404.     POP    D
  2405.     CALL    L174D
  2406.     JMP    NXCMD
  2407. ;
  2408.     RET
  2409. ;
  2410. CMKILL:    LXI    H,CMDBUF+3
  2411.     MOV    A,M
  2412.     CPI    '.'
  2413.     JNZ    CMERR
  2414.     CALL    L1872
  2415.     CALL    L1798
  2416.     JC    CMERR
  2417.     MOV    B,H
  2418.     MOV    C,L
  2419.     INX    H
  2420.     INX    H
  2421.     MOV    A,M
  2422.     ADD    L
  2423.     MOV    L,A
  2424.     MOV    A,H
  2425.     ACI    0
  2426.     MOV    H,A
  2427.     INX    H
  2428.     XCHG
  2429.     LHLD    SYMTP
  2430. L1855:    MOV    A,E
  2431.     CMP    L
  2432.     JNZ    L185F
  2433.     MOV    A,D
  2434.     CMP    H
  2435.     JZ    L1866
  2436. L185F:    LDAX    D
  2437.     STAX    B
  2438.     INX    B
  2439.     INX    D
  2440.     JMP    L1855
  2441. ;
  2442. L1866:    MOV    H,B
  2443.     MOV    L,C
  2444.     SHLD    SYMTP
  2445.     INX    H
  2446.     INX    H
  2447.     MVI    M,0
  2448.     JMP    NXCMD
  2449. ;
  2450. L1872:    INX    H
  2451.     MVI    B,0
  2452.     PUSH    H
  2453. L1876:    MOV    A,M
  2454.     INX    H
  2455.     INR    B
  2456.     CPI    '+'
  2457.     JZ    L1876
  2458.     CPI    '-'
  2459.     JZ    L1876
  2460.     CPI    '0'
  2461.     JC    L1897
  2462.     CPI    ':'
  2463.     JC    L1876
  2464.     CPI    'A'
  2465.     JC    L1897
  2466.     CPI    5BH
  2467.     JC    L1876
  2468. L1897:    DCR    B
  2469.     JZ    CMERR
  2470.     DCX    H
  2471.     XCHG
  2472.     POP    H
  2473.     RET
  2474. ;
  2475. L189F:    PUSH    PSW
  2476.     CALL    HEXL
  2477.     MOV    M,A
  2478.     INX    H
  2479.     POP    PSW
  2480.     CALL    HEXR
  2481.     MOV    M,A
  2482.     INX    H
  2483.     RET
  2484. ;
  2485. HEXL:    RAR
  2486.     RAR
  2487.     RAR
  2488.     RAR
  2489. HEXR:    ANI    0FH
  2490.     CPI    0AH
  2491.     JC    HEXRN
  2492.     ADI    7
  2493. HEXRN:    ADI    '0'
  2494.     RET
  2495. ;
  2496. XO:    PUSH    PSW
  2497.     CALL    HEXL
  2498.     CALL    TYPE
  2499.     POP    PSW
  2500.     CALL    HEXR
  2501.     JMP    TYPE
  2502. ;
  2503. PRWORD:    MOV    A,H
  2504.     CALL    XO
  2505.     MOV    A,L
  2506.     CALL    XO
  2507. PRSPC:    MVI    A,' '
  2508.     JMP    TYPE
  2509. ;
  2510. GTVAL:    MOV    A,M
  2511.     CPI    '.'
  2512.     JZ    GTSYMB
  2513.     LXI    D,0
  2514. HEXBI:    MOV    A,M
  2515.     CPI    '0'
  2516.     RC
  2517.     CPI    ':'
  2518.     JC    CVNUM
  2519.     CPI    'A'
  2520.     RC
  2521.     CPI    'G'
  2522.     RNC
  2523.     SUI    7
  2524. CVNUM:    SUI    '0'
  2525.     XCHG
  2526.     DAD    H
  2527.     DAD    H
  2528.     DAD    H
  2529.     DAD    H
  2530.     ADD    L
  2531.     MOV    L,A
  2532.     XCHG
  2533.     INX    H
  2534.     JMP    HEXBI
  2535. ;
  2536. GTSYMB:    CALL    L1872
  2537.     PUSH    D
  2538.     CALL    L1798
  2539.     JC    CMERR
  2540.     MOV    E,M
  2541.     INX    H
  2542.     MOV    D,M
  2543.     POP    H
  2544.     MOV    A,M
  2545.     RET
  2546. ;
  2547. FOPEN:    PUSH    H
  2548.     LXI    H,START
  2549.     SHLD    OFIPTR
  2550.     XRA    A
  2551.     STA    FCB+32
  2552.     LXI    D,FCB
  2553.     MVI    C,0FH
  2554.     CALL    BDOS
  2555.     POP    H
  2556.     INR    A
  2557.     RNZ
  2558.     CALL    PRTSTR
  2559.     DB    '++FILE NOT FOUND',0DH,0AH
  2560.     DB    0
  2561.     JMP    NXCMD
  2562. ;
  2563. RDFCHR:    PUSH    H
  2564.     LHLD    OFIPTR
  2565.     MOV    A,H
  2566.     CPI    1
  2567.     JNZ    L195B
  2568.     PUSH    B
  2569.     PUSH    D
  2570.     LXI    D,FCB
  2571.     MVI    C,14H
  2572.     CALL    BDOS
  2573.     ORA    A
  2574.     POP    D
  2575.     POP    B
  2576.     LXI    H,TBUF
  2577.     JNZ    L1962
  2578. L195B:    MOV    A,M
  2579.     INX    H
  2580.     SHLD    OFIPTR
  2581.     POP    H
  2582.     RET
  2583. ;
  2584. L1962:    CPI    3
  2585.     JC    L1980
  2586.     CALL    PRTSTR
  2587.     DB    '++UNEXPECTED EOF',0DH,0AH
  2588.     DB    0
  2589.     JMP    NXCMD
  2590. ;
  2591. L1980:    MVI    A,1AH
  2592.     MOV    M,A
  2593.     JMP    L195B
  2594. ;
  2595. L1986:    PUSH    H
  2596.     LXI    D,FCB
  2597.     MVI    C,13H
  2598.     CALL    BDOS
  2599.     LXI    D,FCB
  2600.     MVI    C,16H
  2601.     CALL    BDOS
  2602.     INR    A
  2603.     JZ    CMERR
  2604.     XRA    A
  2605.     STA    FCB+32
  2606.     LXI    H,TBUF
  2607.     SHLD    OFIPTR
  2608.     POP    H
  2609.     RET
  2610. ;
  2611. L19A7:    LXI    D,FCB
  2612.     MVI    C,15H
  2613.     CALL    BDOS
  2614.     ORA    A
  2615.     JNZ    L19D3
  2616.     LXI    D,FCB
  2617.     MVI    C,10H
  2618.     CALL    BDOS
  2619.     INR    A
  2620.     RNZ
  2621.     CALL    PRTSTR
  2622.     DB    '++CLOSE ERROR',0DH,0AH
  2623.     NOP
  2624.     JMP    NXCMD
  2625. ;
  2626. L19D3:    CALL    PRTSTR
  2627.     DB    '++WRITE ERROR',0DH,0AH
  2628.     NOP
  2629. L19E6:    PUSH    H
  2630.     LHLD    OFIPTR
  2631.     MOV    M,A
  2632.     INR    L
  2633.     SHLD    OFIPTR
  2634.     POP    H
  2635.     RNZ
  2636.     PUSH    B
  2637.     PUSH    D
  2638.     PUSH    H
  2639.     LXI    D,FCB
  2640.     MVI    C,15H
  2641.     CALL    BDOS
  2642.     ORA    A
  2643.     JNZ    L19D3
  2644.     LXI    H,TBUF
  2645.     SHLD    OFIPTR
  2646.     POP    H
  2647.     POP    D
  2648.     POP    B
  2649.     RET
  2650. ;
  2651. CRLF:    MVI    A,0DH
  2652.     CALL    TYPE
  2653.     MVI    A,0AH
  2654.     JMP    TYPE
  2655. ;
  2656. PSTAR:    MVI    A,'*'
  2657. TYPE:    PUSH    B
  2658.     PUSH    D
  2659.     PUSH    H
  2660.     MOV    E,A
  2661.     PUSH    D
  2662.     MVI    C,2
  2663.     LDA    QUIFLG
  2664.     ORA    A
  2665.     CZ    BDOS
  2666.     POP    D
  2667.     LDA    WRTFLG
  2668.     LXI    H,WFIFLG
  2669.     ANA    M
  2670.     MOV    A,E
  2671.     CNZ    L19E6
  2672.     MOV    A,E
  2673.     CPI    0AH
  2674.     JNZ    L1A41
  2675.     LDA    L1B35
  2676.     ORA    A
  2677.     JZ    L1A41
  2678.     LXI    H,LISCNT+1
  2679.     DCR    M
  2680. L1A41:    POP    H
  2681.     POP    D
  2682.     POP    B
  2683.     RET
  2684. ;
  2685. GTCMD:    CALL    PSTAR
  2686.     LXI    D,CMDBUF
  2687.     MVI    A,'N'
  2688.     STAX    D
  2689.     MVI    C,0AH
  2690.     CALL    BDOS
  2691.     LXI    H,CMDBUF+1
  2692.     MOV    E,M
  2693.     MVI    D,0
  2694.     DAD    D
  2695.     INX    H
  2696.     MVI    M,0DH
  2697.     LXI    H,CMDBUF+1
  2698. LTUCNV:    INX    H
  2699.     MOV    A,M
  2700.     CPI    0DH
  2701.     JZ    CRLF
  2702.     CPI    61H
  2703.     JC    LTUCNV
  2704.     CPI    7BH
  2705.     JNC    LTUCNV
  2706.     ANI    5FH
  2707.     MOV    M,A
  2708.     JMP    LTUCNV
  2709. ;
  2710. PRTSTR:    XRA    A
  2711.     STA    WFIFLG
  2712.     STA    QUIFLG
  2713. L1A7E:    XTHL
  2714. L1A7F:    MOV    A,M
  2715.     CALL    TYPE
  2716.     INX    H
  2717.     MOV    A,M
  2718.     ORA    A
  2719.     JNZ    L1A7F
  2720.     INX    H
  2721.     XTHL
  2722.     RET
  2723. ;
  2724. INITBL:    XRA    A
  2725.     STA    SYMTBL+2
  2726.     LXI    H,SYMTBL
  2727.     SHLD    SYMTP
  2728.     MVI    A,0DH
  2729.     STA    CMDBUF+3
  2730.     LXI    H,0FFFFH
  2731.     SHLD    CTLTBL
  2732.     MVI    A,'I'
  2733.     STA    CTLTBL-1
  2734.     LHLD    DOCTBL
  2735.     MOV    A,H
  2736.     ORA    L
  2737.     RZ
  2738.     SHLD    DOCEND
  2739.     MVI    M,0FFH
  2740.     INX    H
  2741.     MVI    M,0FFH
  2742.     RET
  2743. ;
  2744. CMPSTR:    LDAX    D
  2745.     CMP    M
  2746.     RNZ
  2747.     INX    D
  2748.     INX    H
  2749.     DCR    C
  2750.     JNZ    CMPSTR
  2751.     RET
  2752. ;
  2753. L1ABF:    PUSH    B
  2754.     PUSH    D
  2755.     PUSH    H
  2756.     MVI    C,0BH
  2757.     CALL    BDOS
  2758.     ORA    A
  2759.     JZ    L1AFA
  2760.     MVI    C,1
  2761.     CALL    BDOS
  2762.     CPI    3
  2763.     JZ    ABORT
  2764.     CALL    CRLF
  2765.     JMP    NXCMD
  2766. ;
  2767. ABORT:    CALL    PRTSTR
  2768.     DB    0DH,0AH,'ABORT Y/N '
  2769.     NOP
  2770.     MVI    C,1
  2771.     CALL    BDOS
  2772.     ANI    5FH
  2773.     CPI    'Y'
  2774.     JZ    0
  2775.     JMP    NXCMD
  2776. ;
  2777. L1AFA:    POP    H
  2778.     POP    D
  2779.     POP    B
  2780.     RET
  2781. ;
  2782. L1AFE:    CPI    0DH
  2783.     RZ
  2784.     CPI    0AH
  2785.     RZ
  2786.     ORA    A
  2787.     RZ
  2788.     CPI    ' '
  2789.     RC
  2790.     CPI    7FH
  2791.     CMC
  2792.     RET
  2793. ;
  2794.     DB    '('
  2795. INDX:    DB    0,')',0
  2796. DISPL:    DB    0
  2797. TRMFLG:    DB    0
  2798. L1B1B:    DW    START
  2799. L1B1D:    DW    0180H
  2800. OFFSET:    DW    0
  2801. SYMTP:    DW    SYMTBL
  2802. PCNTR:    DW    START
  2803. L1B25:    DW    START
  2804. PGPTR:    DW    START
  2805. DOCTBL:    DW    0
  2806. DOCEND:    DW    0
  2807. L1B2D:    DW    0
  2808. L1B2F:    DW    0
  2809. DMPCNT:    DW    0FFH
  2810. LISCNT:    DW    0A16H
  2811. L1B35:    DB    1
  2812. ASMLIT:    DB    'ASM'
  2813. COMLIT:    DB    'COM'
  2814. CTLLIT:    DB    'CTL'
  2815. SYMLIT:    DB    'SYM'
  2816. DOCLIT:    DB    'DOC'
  2817. WFIFLG:    DB    0
  2818. WRTFLG:    DB    0
  2819. QUIFLG:    DB    0
  2820. L1B48:    DB    0
  2821. L1B49:    DB    0
  2822. L1B4A:    DB    0
  2823. L1B4B:    DW    0
  2824. OFIPTR:    DW    0
  2825. L1B4F:    DB    0
  2826. SYBFLG:    DB    0
  2827. INTYP:    DB    0,0,0
  2828. CMDBUF:    DS    002CH
  2829.     END
  2830.