home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol087 / displayp.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  15.3 KB  |  1,164 lines

  1. ;    Disassembly of DISPLAY.COM
  2. ;
  3. ;    Version list - most recent version first
  4. ;
  5. ;26/Jul/82 Included conditional assembly for Keith Petersens patch that
  6. ;    will not accept wild-cards, distribution-tagged files, SYS files,
  7. ;    and files with '#' as the last character of the file type.
  8. ;    Compatible with CP/M 1.4 or 2.x. Added on line command help
  9. ;    display if "?" entered in response to command prompt. Bill Bolton
  10. ;
  11. WBOOT    EQU    00000H
  12. BDOS    EQU    00005H
  13. FCB    EQU    05CH        ;CP/M file control block
  14. OPEN    EQU    15
  15. ;
  16. ALF    EQU    0AH
  17. ACR    EQU    0DH
  18. EOF    EQU    01AH
  19. ;
  20. VERS    EQU    11
  21. ;
  22. FALSE    EQU    0
  23. TRUE    EQU    NOT FALSE
  24. ;
  25. RCPM    EQU    TRUE        ;True for RCPM restricted version
  26. ;
  27.     ORG    100H
  28. ;
  29.     JMP    START
  30. ;
  31.     DB    'Display Ver. '
  32.     DB    VERS/10 + '0','.',VERS MOD 10 + '0'
  33.     DB    ', 24/Jul/1982$'
  34. ;
  35. ;Check for ambiguous file names
  36. ;
  37. START:
  38.  
  39.     if    rcpm
  40.     LXI    H,FCB        ;POINT TO FCB
  41.     MVI    B,11        ;NO. OF CHARS TO CHECK
  42. ;
  43. LOOP:
  44.     INX    H        ;POINT TO NEXT CHAR
  45.     MOV    A,M        ;GET CHAR
  46.     CPI    '?'        ;WAS IT A '?'
  47.     JZ    WERROR        ;YES, EXIT WITH ERROR MSG
  48.     DCR    B        ;ONE LESS TO CHECK
  49.     JNZ    LOOP        ;NOT DONE, GO GET MORE
  50. ;
  51. ;Check for private file type
  52. ;
  53.     CPI    '#'        ;WAS LAST CHARACTER A '#' ?
  54.     JZ    OPENOT        ;YES, PRINT ERROR AND EXIT
  55. ;
  56. ;Check for .COM file, which can't be printed
  57. ;
  58.     CPI    'M'        ;WAS LAST CHAR AN 'M'?
  59.     JNZ    OBJCHK        ;IF NOT, CHK FOR '.OBJ' TYPE
  60.     DCX    H
  61.     MOV    A,M        ;CHK NEXT
  62.     CPI    'O'        ;AN 'O'?
  63.     JNZ    OPENFIL        ;IF NOT, GO OPEN FILE
  64.     DCX    H
  65.     MOV    A,M        ;WAS 'O', CHK NEXT CHAR
  66.     CPI    'C'        ; 'C' AS IN '.COM'?
  67.     JNZ    OPENFIL        ;IF NOT, GO OPEN FILE
  68.     CALL    ERXIT        ;EXIT W/MESSAGE
  69.     DB    '++CAN''T DISPLAY .COM FILES$'
  70. ;
  71. ;Check for .OBJ file, which can't be printed
  72. ;
  73. OBJCHK:
  74.     CPI    'J'        ;WAS LAST CHAR AN 'J' THEN?
  75.     JNZ    ALLCHK        ;IF NOT, CHECK FOR '.ALL' TYPE
  76.     DCX    H
  77.     MOV    A,M        ;MIGHT BE '.OBJ', CHK NEXT CHR
  78.     CPI    'B'        ;IS IT A 'B'?
  79.     JNZ    OPENFIL        ;IF NOT, GO OPEN FILE
  80.     DCX    H
  81.     MOV    A,M        ;WAS, CHK FIRST CHAR
  82.     CPI    'O'        ; 'O' AS IN '.OBJ'?
  83.     JNZ    OPENFIL        ;IF NOT, GO OPEN FILE
  84.     CALL    ERXIT        ;EXIT W/MESSAGE
  85.     DB    '++CAN''T DISPLAY .OBJ FILES$'
  86. ;
  87. ;Check for .ALL file, which can always be displayed
  88. ;
  89. ALLCHK:
  90.     CPI    'L'        ;WAS LAST CHAR AN 'L'?
  91.     JNZ    OPENFIL        ;IF NOT, TRY AN OPEN
  92.     DCX    H
  93.     MOV    A,M        ;CHK NEXT
  94.     CPI    'L'        ;AN 'L'?
  95.     JNZ    OPENFIL        ;IF NOT, GO OPEN FILE
  96.     DCX    H
  97.     MOV    A,M        ;WAS 'L', CHK NEXT CHAR
  98.     CPI    'A'        ; 'A' AS IN '.ALL'?
  99.     JNZ    OPENFIL        ;IF NOT, GO OPEN FILE
  100.     STA    ALLFLAG
  101. ;
  102. ;Open the file to get attributes into FCB
  103. ;
  104. OPENFIL:
  105.     LXI    D,FCB        ;POINT TO FILE
  106.     MVI    C,OPEN        ;GET FUNCTION
  107.     CALL    BDOS        ;OPEN IT
  108.     INR    A        ;OPEN OK?
  109.     JZ    ENTRY        ;..NO, LET DISPLAY GIVE ERROR MSG
  110. ;
  111. ;Check for SYS file
  112. ;
  113.     LDA    FCB+10        ;GET SYS ATTRIBUTE
  114.     ANI    80H        ;ISOLATE ATTR BIT
  115.     JNZ    OPENOT        ;IT'S SYS, EXIT
  116. ;
  117. ;Check for distribution-protected (tagged) file
  118. ;
  119.     LDA    FCB+2        ;FIRST CHAR OF FILE NAME
  120.     ANI    80H        ;CHECK BIT 7
  121.     JZ    ENTRY        ;IT WAS OFF, EXIT TO DISPLAY
  122.     LDA    ALLFLAG
  123.     ORA    A        ;IS AN '.ALL' FILE
  124.     JNZ    ENTRY        ;DISPLAY '.ALL' FILES EVEN IF TAGGED
  125. ;
  126. OPENOT:
  127.     CALL    ERXIT    ;EXIT W/MESSAGE
  128.     DB    '++FILE IS NOT FOR DISTRIBUTION, SORRY$'
  129. ;
  130. WERROR:
  131.     CALL    ERXIT
  132.     DB    '++CAN''T USE WILD CARDS$'
  133. ;
  134. ;
  135. ;Exit with error message
  136. ;
  137. ERXIT:
  138.     POP    D    ;GET MSG ADRS
  139.     MVI    C,9 
  140.     JMP    BDOS    ;PRINT IT THEN RETURN TO CCP
  141. ;
  142.     endif    ;rcpm
  143. ;
  144. ENTRY:
  145.     LXI    SP,BUF$START    ;Set up a stack (pointing to top)
  146.     MVI    L,021H
  147.     LXI    D,DFCB
  148.     LXI    B,FCB
  149. FCBLOOP:
  150.     LDAX    B
  151.     STAX    D
  152.     INX    B
  153.     INX    D
  154.     DCR    L
  155.     JNZ    FCBLOOP
  156. A0134:
  157.     CALL    INIT        ;Set up data areas
  158.     LXI    B,DFCB
  159.     CALL    OPEN$FILE
  160.     LDA    BDOS$VAL
  161.     CPI    0FFH        ;Succesful open?
  162.     JNZ    A014E        ;Yes
  163.     LXI    B,NOT$FOUND$MSG    ;No
  164.     CALL    DISP$STRING    ;Tell the user
  165.     CALL    TO$WBOOT    ;*** PERMANENT EXIT ***
  166. ;
  167. A014E:
  168.     LHLD    D077A
  169.     MOV    B,H
  170.     MOV    C,L
  171.     CALL    A0387
  172.     CALL    A0567
  173. A0159:
  174.     CALL    A06C3
  175.     LDA    D0774
  176.     CPI    ACR
  177.     JNZ    A016D
  178.     CALL    A0567
  179.     JMP    A0159
  180. ;
  181. ; >> NO EXECUTION PATH TO HERE <<
  182.     JMP    A0185
  183. ;
  184. A016D:
  185.     MVI    C,'B'
  186.     CALL    A06EF
  187.     RAR
  188.     JNC    A0179
  189.     JMP    A0134
  190. ;
  191. A0179:
  192.     MVI    C,'E'
  193.     CALL    A06EF
  194.     RAR
  195.     JNC    QUERY
  196.     CALL    TO$WBOOT    ;*** PERMANENT EXIT ***
  197. ;
  198. QUERY:
  199.     MVI    C,'?'
  200.     CALL    A06EF
  201.     RAR
  202.     JNC    A0185
  203.     LXI    B,HELP$MSG
  204.     CALL    DISP$STRING
  205.     JMP    A0159
  206. ;    
  207. A0185:
  208.     LXI    H,D0777
  209.     MVI    M,0
  210.     LXI    H,1
  211.     SHLD    D0784
  212.     LDA    D0774
  213.     CPI    '-'
  214.     JNZ    A01A0
  215.     LXI    H,D0777
  216.     MVI    M,1
  217.     CALL    A069F
  218. A01A0:
  219.     LDA    D0774
  220.     SUI    '0'
  221.     STA    D0778
  222.     MOV    C,A
  223.     MVI    A,9
  224.     CMP    C
  225.     JC    A01E7
  226.     LHLD    D0778
  227.     MVI    H,0
  228.     SHLD    D0784
  229.     CALL    A069F
  230. A01BA:
  231.     LDA    D0774
  232.     SUI    '0'
  233.     STA    D0778
  234.     MOV    C,A
  235.     MVI    A,9
  236.     CMP    C
  237.     JC    A01E7
  238.     LHLD    D0784
  239.     DAD    H
  240.     DAD    H
  241.     DAD    H
  242.     PUSH    H
  243.     LHLD    D0784
  244.     DAD    H
  245.     POP    B
  246.     DAD    B
  247.     PUSH    H
  248.     LHLD    D0778
  249.     MVI    H,0
  250.     POP    B
  251.     DAD    B
  252.     SHLD    D0784
  253.     CALL    A069F
  254.     JMP    A01BA
  255. ;
  256. A01E7:
  257.     LDA    D0774
  258.     CPI    'L'
  259.     JNZ    A01FD
  260.     LHLD    D0777
  261.     MOV    C,L
  262.     LHLD    D0784
  263.     XCHG
  264.     CALL    A0450
  265.     JMP    A024D
  266. ;
  267. A01FD:
  268.     LDA    D0774
  269.     CPI    'P'
  270.     JNZ    A0237
  271.     MVI    A,0
  272.     LXI    D,D0784
  273.     CALL    A0750
  274.     ORA    L
  275.     JZ    A022B
  276.     LXI    D,017H
  277.     LHLD    D0784
  278.     CALL    A072F
  279.     SHLD    D0784
  280.     LHLD    D0777
  281.     MOV    C,L
  282.     LHLD    D0784
  283.     XCHG
  284.     CALL    A0450
  285.     JMP    A0234
  286. ;
  287. A022B:
  288.     LHLD    D077A
  289.     SHLD    D077E
  290.     SHLD    D0786
  291. A0234:
  292.     JMP    A024D
  293. ;
  294. A0237:
  295.     LDA    D0774
  296.     CPI    'D'
  297.     JNZ    A024A
  298.     LHLD    D0784
  299.     MOV    B,H
  300.     MOV    C,L
  301.     CALL    A0595
  302.     JMP    A024D
  303. ;
  304. A024A:
  305.     JMP    A0253
  306. ;
  307. A024D:
  308.     CALL    A0567
  309.     JMP    A0159
  310. ;
  311. A0253:
  312.     LXI    B,ILLEGAL$MSG
  313.     CALL    DISP$STRING
  314.     JMP    A0159
  315. ;
  316. ; >> NO EXECUTION PATH TO HERE <<
  317.     EI
  318.     HLT
  319.     LXI    D,0
  320.     MVI    C,1        ;Console input
  321.     CALL    TO$BDOS
  322.     RET
  323. ;
  324. PUT$CHAR:
  325.     LXI    H,D075C
  326.     MOV    M,C
  327.     LHLD    D075C
  328.     MVI    H,0
  329.     XCHG            ;E <---- C
  330.     MVI    C,2        ;Console output
  331.     CALL    TO$BDOS
  332.     RET
  333. ;
  334. ; >> NO EXECUTION PATH TO HERE <<
  335.     LXI    H,D075D
  336.     MOV    M,C
  337.     LHLD    D075D
  338.     MVI    H,0
  339.     XCHG
  340.     MVI    C,5        ;List output
  341.     CALL    TO$BDOS
  342.     RET
  343. ;
  344. A0287:
  345.     LXI    H,T075F
  346.     MOV    M,B
  347.     DCX    H
  348.     MOV    M,C
  349.     LHLD    D075E
  350.     XCHG
  351.     MVI    C,10        ;Read console buffer
  352.     CALL    TO$BDOS
  353.     RET
  354. ;
  355. OPEN$FILE:
  356.     LXI    H,T0761
  357.     MOV    M,B
  358.     DCX    H
  359.     MOV    M,C
  360.     LHLD    D0760
  361.     XCHG            ;DE <---- BC
  362.     MVI    C,15        ;Open file
  363.     CALL    TO$BDOS
  364.     STA    BDOS$VAL    ;Keep the result
  365.     RET
  366. ;
  367. ; >> NO EXECUTION PATH TO HERE <<
  368.     LXI    H,T0763
  369.     MOV    M,B
  370.     DCX    H
  371.     MOV    M,C
  372.     LHLD    D0762
  373.     XCHG
  374.     MVI    C,16        ;Close file
  375.     CALL    TO$BDOS
  376.     STA    BDOS$VAL
  377.     RET
  378. ;
  379. ; >> NO EXECUTION PATH TO HERE <<
  380.     LXI    H,T0765
  381.     MOV    M,B
  382.     DCX    H
  383.     MOV    M,C
  384.     LHLD    D0764
  385.     XCHG
  386.     MVI    C,17        ;Search first
  387.     CALL    TO$BDOS
  388.     SUI    0FFH
  389.     ADI    0FFH
  390.     SBB    A
  391.     RET
  392. ;
  393. ; >> NO EXECUTION PATH TO HERE <<
  394.     LXI    H,T0767
  395.     MOV    M,B
  396.     DCX    H
  397.     MOV    M,C
  398.     LHLD    D0766
  399.     XCHG
  400.     MVI    C,19        ;Delete file
  401.     CALL    TO$BDOS
  402.     RET
  403. ;
  404. A02E2:
  405.     LXI    H,T0769
  406.     MOV    M,B
  407.     DCX    H
  408.     MOV    M,C
  409.     LHLD    D0768
  410.     XCHG
  411.     MVI    C,20        ;Read sequential
  412.     CALL    TO$BDOS
  413.     STA    BDOS$VAL
  414.     RET
  415. ;
  416. ; >> NO EXECUTION PATH TO HERE <<
  417.     LXI    H,T076B
  418.     MOV    M,B
  419.     DCX    H
  420.     MOV    M,C
  421.     LHLD    D076A
  422.     XCHG
  423.     MVI    C,21        ;Write sequential
  424.     CALL    TO$BDOS
  425.     STA    BDOS$VAL
  426.     RET
  427. ;
  428. ; >> NO EXECUTION PATH TO HERE <<
  429.     LXI    H,T076D
  430.     MOV    M,B
  431.     DCX    H
  432.     MOV    M,C
  433.     LHLD    D076C
  434.     XCHG
  435.     MVI    C,22        ;Make file
  436.     CALL    TO$BDOS
  437.     RET
  438. ;
  439. ; >> NO EXECUTION PATH TO HERE <<
  440.     LXI    D,0
  441.     MVI    C,23        ;Rename file
  442.     CALL    TO$BDOS
  443.     RET
  444. ;
  445. ; >> NO EXECUTION PATH TO HERE <<
  446.     LXI    H,D076E
  447.     MOV    M,C
  448.     LHLD    D076E
  449.     MVI    H,0
  450.     XCHG
  451.     MVI    C,14        ;Select disk
  452.     CALL    TO$BDOS
  453.     RET
  454. ;
  455. A0331:
  456.     LXI    H,T0770
  457.     MOV    M,B
  458.     DCX    H
  459.     MOV    M,C
  460.     LHLD    D076F
  461.     XCHG
  462.     MVI    C,26        ;Set DMA
  463.     CALL    TO$BDOS
  464.     RET
  465. ;
  466. NEW$LINE:
  467.     MVI    C,ALF
  468.     CALL    PUT$CHAR
  469.     MVI    C,ACR
  470.     CALL    PUT$CHAR
  471.     RET
  472. ;
  473. DISP$STRING:
  474.     LXI    H,T0772
  475.     MOV    M,B
  476.     DCX    H
  477.     MOV    M,C
  478.     LHLD    D0771
  479.     XCHG            ;DE <---- BC
  480.     MVI    C,9        ;Print string
  481.     CALL    TO$BDOS
  482.     CALL    NEW$LINE
  483.     RET
  484. ;
  485. INIT:
  486.     LXI    H,D0773
  487.     MVI    M,0
  488.     LXI    H,BUF$START
  489.     SHLD    D077A
  490.     SHLD    D077E
  491.     SHLD    D0780
  492.     LHLD    D077A
  493.     SHLD    D0786
  494.     LXI    H,T0794
  495.     MVI    M,0
  496.     LXI    H,T07A8
  497.     MVI    M,0
  498.     LHLD    BDOS+1
  499.     SHLD    D077C
  500.     RET
  501. ;
  502. A0387:
  503.     LXI    H,Y082B
  504.     MOV    M,B
  505.     DCX    H
  506.     MOV    M,C
  507.     LDA    D0773
  508.     RAR
  509.     JC    A044F
  510.     LHLD    Y082A
  511.     SHLD    Y082C
  512.     LXI    D,D077C
  513.     CALL    A0753
  514.     XCHG
  515.     LXI    H,00080H
  516.     CALL    A0710
  517.     XCHG
  518.     SHLD    Y082E
  519.     LXI    H,BDOS$VAL
  520.     MVI    M,000H
  521. A03B0:
  522.     MVI    A,0
  523.     LXI    D,Y082E
  524.     CALL    A0750
  525.     ORA    L
  526.     ADI    0FFH
  527.     SBB    A
  528.     PUSH    PSW
  529.     LDA    BDOS$VAL
  530.     SUI    000H
  531.     SUI    001H
  532.     SBB    A
  533.     POP    B
  534.     MOV    C,B
  535.     ANA    C
  536.     RAR
  537.     JNC    A03EE
  538.     LHLD    Y082C
  539.     MOV    B,H
  540.     MOV    C,L
  541.     CALL    A0331
  542.     LXI    B,DFCB
  543.     CALL    A02E2
  544.     LXI    D,00080H
  545.     LHLD    Y082C
  546.     DAD    D
  547.     SHLD    Y082C
  548.     LHLD    Y082E
  549.     DCX    H
  550.     SHLD    Y082E
  551.     JMP    A03B0
  552. ;
  553. A03EE:
  554.     LDA    BDOS$VAL
  555.     CPI    0
  556.     JZ    A03FB
  557.     LXI    H,D0773
  558.     MVI    M,0FFH
  559. A03FB:
  560.     LHLD    Y082C
  561.     SHLD    D0780
  562.     LXI    B,00080H
  563.     CALL    A0331
  564.     LDA    D0773
  565.     RAR
  566.     JNC    A042F
  567.     LXI    B,100H
  568.     LXI    D,Y082C
  569.     CALL    A0748
  570.     XCHG
  571.     DCX    H
  572.     MOV    M,E
  573.     INX    H
  574.     MOV    M,D
  575. A041C:
  576.     LHLD    Y082C
  577.     MOV    A,M
  578.     CPI    EOF
  579.     JZ    A042F
  580.     LHLD    Y082C
  581.     INX    H
  582.     SHLD    Y082C
  583.     JMP    A041C
  584. ;
  585. A042F:
  586.     LHLD    Y082C
  587.     DCX    H
  588.     SHLD    Y082C
  589. A0436:
  590.     LHLD    Y082C
  591.     MOV    A,M
  592.     CPI    00AH
  593.     JZ    A0449
  594.     LHLD    Y082C
  595.     DCX    H
  596.     SHLD    Y082C
  597.     JMP    A0436
  598. ;
  599. A0449:
  600.     LHLD    Y082C
  601.     SHLD    D0782
  602. A044F:
  603.     RET
  604. ;
  605. A0450:
  606.     LXI    H,Y0832
  607.     MOV    M,D
  608.     DCX    H
  609.     MOV    M,E
  610.     DCX    H
  611.     MOV    M,C
  612.     LDA    Y0830
  613.     CPI    0
  614.     JNZ    A049B
  615. A0460:
  616.     MVI    A,0
  617.     LXI    D,Y0831
  618.     CALL    A0750
  619.     ORA    L
  620.     ADI    0FFH
  621.     SBB    A
  622.     LXI    B,D0782
  623.     LXI    D,D077E
  624.     PUSH    PSW
  625.     CALL    A0743
  626.     SBB    A
  627.     POP    B
  628.     MOV    C,B
  629.     ANA    C
  630.     RAR
  631.     JNC    A0498
  632.     LHLD    D077E
  633.     MOV    A,M
  634.     CPI    ALF
  635.     JNZ    A048E
  636.     LHLD    Y0831
  637.     DCX    H
  638.     SHLD    Y0831
  639. A048E:
  640.     LHLD    D077E
  641.     INX    H
  642.     SHLD    D077E
  643.     JMP    A0460
  644. ;
  645. A0498:
  646.     JMP    A04ED
  647. ;
  648. A049B:
  649.     LHLD    Y0831
  650.     INX    H
  651.     SHLD    Y0831
  652. A04A2:
  653.     MVI    A,0
  654.     LXI    D,Y0831
  655.     CALL    A0750
  656.     ORA    L
  657.     ADI    0FFH
  658.     SBB    A
  659.     LXI    D,D077A
  660.     LXI    B,D077E
  661.     PUSH    PSW
  662.     CALL    A0743
  663.     SBB    A
  664.     POP    B
  665.     MOV    C,B
  666.     ANA    C
  667.     RAR
  668.     JNC    A04DA
  669.     LHLD    D077E
  670.     MOV    A,M
  671.     CPI    ALF
  672.     JNZ    A04D0
  673.     LHLD    Y0831
  674.     DCX    H
  675.     SHLD    Y0831
  676. A04D0:
  677.     LHLD    D077E
  678.     DCX    H
  679.     SHLD    D077E
  680.     JMP    A04A2
  681. ;
  682. A04DA:
  683.     LXI    D,D077A
  684.     LXI    B,D077E
  685.     CALL    A0743
  686.     JNC    A04ED
  687.     LHLD    D077E
  688.     INX    H
  689.     SHLD    D077E
  690. A04ED:
  691.     LHLD    D077E
  692.     SHLD    D0786
  693.     RET
  694. ;
  695. A04F4:
  696.     LXI    H,Y0834
  697.     MVI    M,0
  698.     LXI    B,D0782
  699.     LXI    D,D077E
  700.     CALL    A0743
  701.     JNC    A0566
  702. A0505:
  703.     LHLD    D077E
  704.     MOV    A,M
  705.     STA    Y0833
  706.     CPI    ALF
  707.     JZ    A055A
  708.     LDA    Y0833
  709.     CPI    009H
  710.     JZ    A0527
  711.     LHLD    Y0833
  712.     MOV    C,L
  713.     CALL    PUT$CHAR
  714.     LXI    H,Y0834
  715.     INR    M
  716.     JMP    A0550
  717. ;
  718. A0527:
  719.     LDA    Y0834
  720.     ANI    007H
  721.     MOV    C,A
  722.     MVI    A,7
  723.     SUB    C
  724.     STA    Y0836
  725.     LXI    H,Y0835
  726.     MVI    M,0
  727. A0538:
  728.     LDA    Y0836
  729.     LXI    H,Y0835
  730.     CMP    M
  731.     JC    A0550
  732.     MVI    C,' '
  733.     CALL    PUT$CHAR
  734.     LXI    H,Y0834
  735.     INR    M
  736.     INX    H
  737.     INR    M
  738.     JNZ    A0538
  739. A0550:
  740.     LHLD    D077E
  741.     INX    H
  742.     SHLD    D077E
  743.     JMP    A0505
  744. ;
  745. A055A:
  746.     LHLD    D077E
  747.     INX    H
  748.     SHLD    D077E
  749.     MVI    C,ALF
  750.     CALL    PUT$CHAR
  751. A0566:
  752.     RET
  753. ;
  754. A0567:
  755.     LHLD    D0786
  756.     SHLD    Y0838
  757.     SHLD    D077E
  758.     LXI    H,Y0837
  759.     MVI    M,1
  760. A0575:
  761.     MVI    A,017H
  762.     LXI    H,Y0837
  763.     CMP    M
  764.     JC    A0588
  765.     CALL    A04F4
  766.     LXI    H,Y0837
  767.     INR    M
  768.     JNZ    A0575
  769. A0588:
  770.     LHLD    D077E
  771.     SHLD    D0786
  772.     LHLD    Y0838
  773.     SHLD    D077E
  774.     RET
  775. ;
  776. A0595:
  777.     LXI    H,Y083B
  778.     MOV    M,B
  779.     DCX    H
  780.     MOV    M,C
  781.     MVI    A,0
  782.     LXI    D,Y083A
  783.     CALL    A0750
  784.     ORA    L
  785.     JNZ    A05BC
  786.     LXI    B,D077E
  787.     LXI    D,D0780
  788.     CALL    A0743
  789.     SHLD    Y0840
  790.     LHLD    D077E
  791.     SHLD    Y083E
  792.     JMP    A062B
  793. ;
  794. A05BC:
  795.     LHLD    D077A
  796.     SHLD    Y083C
  797. A05C2:
  798.     MVI    A,0
  799.     LXI    D,Y083A
  800.     CALL    A0750
  801.     ORA    L
  802.     JZ    A0619
  803.     LXI    H,00017H
  804.     SHLD    Y0842
  805. A05D4:
  806.     MVI    A,0
  807.     LXI    D,Y0842
  808.     CALL    A0750
  809.     ORA    L
  810.     JZ    A060F
  811.     LHLD    Y083C
  812.     MOV    A,M
  813.     CPI    ALF
  814.     JNZ    A05F0
  815.     LHLD    Y0842
  816.     DCX    H
  817.     SHLD    Y0842
  818. A05F0:
  819.     LHLD    Y083C
  820.     INX    H
  821.     SHLD    Y083C
  822.     LXI    D,D0782
  823.     CALL    A0753
  824.     JNC    A060C
  825.     LXI    H,0
  826.     SHLD    Y0842
  827.     LXI    H,1
  828.     SHLD    Y083A
  829. A060C:
  830.     JMP    A05D4
  831. ;
  832. A060F:
  833.     LHLD    Y083A
  834.     DCX    H
  835.     SHLD    Y083A
  836.     JMP    A05C2
  837. ;
  838. A0619:
  839.     LXI    B,Y083C
  840.     LXI    D,D0780
  841.     CALL    A0743
  842.     SHLD    Y0840
  843.     LHLD    Y083C
  844.     SHLD    Y083E
  845. A062B:
  846.     LHLD    Y0840
  847.     PUSH    H
  848.     LHLD    Y083E
  849.     MOV    B,H
  850.     MOV    C,L
  851.     LHLD    D077A
  852.     XCHG
  853.     POP    H
  854. A0639:
  855.     LDAX    B
  856.     STAX    D
  857.     INX    B
  858.     INX    D
  859.     DCX    H
  860.     MOV    A,H
  861.     ORA    L
  862.     JNZ    A0639
  863.     LXI    B,D077A
  864.     LXI    D,Y083E
  865.     CALL    A0743
  866.     XCHG
  867.     INX    H
  868.     MOV    M,E
  869.     INX    H
  870.     MOV    M,D
  871.     LXI    D,Y083E
  872.     LXI    B,D077E
  873.     CALL    A0743
  874.     JNC    A066E
  875.     LXI    B,Y0840
  876.     LXI    D,D077E
  877.     CALL    A0743
  878.     XCHG
  879.     DCX    H
  880.     MOV    M,E
  881.     INX    H
  882.     MOV    M,D
  883.     JMP    A0674
  884. ;
  885. A066E:
  886.     LHLD    D077A
  887.     SHLD    D077E
  888. A0674:
  889.     LHLD    D077E
  890.     SHLD    D0786
  891.     LXI    B,Y0840
  892.     LXI    D,D0780
  893.     CALL    A0743
  894.     XCHG
  895.     DCX    H
  896.     MOV    M,E
  897.     INX    H
  898.     MOV    M,D
  899.     LXI    B,Y0840
  900.     LXI    D,D0782
  901.     CALL    A0743
  902.     XCHG
  903.     DCX    H
  904.     MOV    M,E
  905.     INX    H
  906.     MOV    M,D
  907.     LHLD    D0780
  908.     MOV    B,H
  909.     MOV    C,L
  910.     CALL    A0387
  911.     RET
  912. ;
  913. A069F:
  914.     LHLD    D0775
  915.     MVI    H,0
  916.     LXI    B,T07A9
  917.     DAD    B
  918.     MOV    A,M
  919.     STA    D0774
  920.     MOV    C,A
  921.     MVI    A,'Z'
  922.     CMP    C
  923.     JNC    A06BB
  924.     LDA    D0774
  925.     ANI    0DFH
  926.     STA    D0774
  927. A06BB:
  928.     LDA    D0775
  929.     INR    A
  930.     STA    D0775
  931.     RET
  932. ;
  933. A06C3:
  934.     MVI    C,'*'
  935.     CALL    PUT$CHAR
  936.     LXI    B,T07A9
  937.     CALL    A0287
  938.     MVI    C,ALF
  939.     CALL    PUT$CHAR
  940.     LDA    D07AA
  941.     STA    D0776
  942.     CPI    0
  943.     JNZ    A06E6
  944.     LXI    H,D0774
  945.     MVI    M,ACR
  946.     JMP    A06EE
  947. ;
  948. A06E6:
  949.     LXI    H,D0775
  950.     MVI    M,2
  951.     CALL    A069F
  952. A06EE:
  953.     RET
  954. ;
  955. A06EF:
  956.     LXI    H,Y0844
  957.     MOV    M,C
  958.     LXI    H,Y0844
  959.     LDA    D0774
  960.     SUB    M
  961.     SUI    1
  962.     SBB    A
  963.     PUSH    PSW
  964.     LDA    D0776
  965.     SUI    1
  966.     SUI    1
  967.     SBB    A
  968.     POP    B
  969.     MOV    C,B
  970.     ANA    C
  971.     RET
  972. ;
  973. TO$BDOS:
  974.     JMP    BDOS
  975. ;
  976. TO$WBOOT:
  977.     JMP    WBOOT
  978. ;
  979. A0710:
  980.     MOV    B,H
  981.     MOV    C,L
  982.     LXI    H,0
  983.     MVI    A,010H
  984. A0717:
  985.     PUSH    PSW
  986.     DAD    H
  987.     XCHG
  988.     SUB    A
  989.     DAD    H
  990.     XCHG
  991.     ADC    L
  992.     SUB    C
  993.     MOV    L,A
  994.     MOV    A,H
  995.     SBB    B
  996.     MOV    H,A
  997.     INX    D
  998.     JNC    A0729
  999.     DAD    B
  1000.     DCX    D
  1001. A0729:
  1002.     POP    PSW
  1003.     DCR    A
  1004.     JNZ    A0717
  1005.     RET
  1006. ;
  1007. A072F:
  1008.     MOV    B,H
  1009.     MOV    C,L
  1010.     LXI    H,0
  1011.     MVI    A,010H
  1012. A0736:
  1013.     DAD    H
  1014.     XCHG
  1015.     DAD    H
  1016.     XCHG
  1017.     JNC    A073E
  1018.     DAD    B
  1019. A073E:
  1020.     DCR    A
  1021.     JNZ    A0736
  1022.     RET
  1023. ;
  1024. A0743:
  1025.     MOV    L,C
  1026.     MOV    H,B
  1027.     MOV    C,M
  1028.     INX    H
  1029.     MOV    B,M
  1030. A0748:
  1031.     LDAX    D
  1032.     SUB    C
  1033.     MOV    L,A
  1034.     INX    D
  1035.     LDAX    D
  1036.     SBB    B
  1037.     MOV    H,A
  1038.     RET
  1039. ;
  1040. A0750:
  1041.     MOV    L,A
  1042.     MVI    H,0
  1043. A0753:
  1044.     LDAX    D
  1045.     SUB    L
  1046.     MOV    L,A
  1047.     INX    D
  1048.     LDAX    D
  1049.     SBB    H
  1050.     MOV    H,A
  1051.     RET
  1052. ;
  1053. ;
  1054. ALLFLAG    DB    0        ;'.ALL' file type flag
  1055. BDOS$VAL:
  1056.     DB    06EH
  1057. D075C:    DB    006H
  1058. D075D:    DB    001H
  1059. D075E:    DB    040H
  1060. T075F:    DB    008H
  1061. D0760:    DB    011H
  1062. T0761:    DB    07EH
  1063. D0762:    DB    007H
  1064. T0763:    DB    0CDH
  1065. D0764:    DB    043H
  1066. T0765:    DB    007H
  1067. D0766:    DB    0EBH
  1068. T0767:    DB    02BH
  1069. D0768:    DB    073H
  1070. T0769:    DB    023H
  1071. D076A:    DB    072H
  1072. T076B:    DB    0C3H
  1073. D076C:    DB    074H
  1074. T076D:    DB    006H
  1075. D076E:    DB    02AH
  1076. D076F:    DB    07AH
  1077. T0770:    DB    007H
  1078. D0771:    DB    022H
  1079. T0772:    DB    07EH
  1080. D0773:    DB    007H
  1081. D0774:    DB    02AH
  1082. D0775:    DB    07EH
  1083. D0776:    DB    007H
  1084. D0777:    DB    022H
  1085. D0778:    DW    0
  1086. D077A:    DW    0
  1087. D077C:    DW    0
  1088. D077E:    DW    0
  1089. D0780:    DW    0
  1090. D0782:    DW    0
  1091. D0784:    DW    0
  1092. D0786:    DW    0
  1093. DFCB:    DB    0,0,0,0,0,0,0,0,0,0    ;Internal FCB
  1094.     DB    0,0
  1095. T0794:    DB    0,0,0,0,0,0,0,0,0,0
  1096.     DB    0,0,0,0,0,0,0,0,0,0
  1097. T07A8:    DB    07EH
  1098. T07A9:    DB    080H
  1099. D07AA:    DB    000H
  1100. ;
  1101.     DB    0,0,0,0,0,0,0,0,0,0
  1102.     DB    0,0,0,0,0,0,0,0,0,0
  1103.     DB    0,0,0,0,0,0,0,0,0,0
  1104.     DB    0,0,0,0,0,0,0,0,0,0
  1105.     DB    0,0,0,0,0,0,0,0,0,0
  1106.     DB    0,0,0,0,0,0,0,0,0,0
  1107.     DB    0,0,0,0,0,0,0,0,0,0
  1108.     DB    0,0,0,0,0,0,0,0,0,0
  1109.     DB    0,0,0,0,0
  1110. ;
  1111. NOT$FOUND$MSG:
  1112.     DB    ' FILE NOT FOUND$'
  1113. ;
  1114. ILLEGAL$MSG:
  1115.     DB    ' ILLEGAL COMMAND$'
  1116. ;
  1117. HELP$MSG:
  1118.     DB    'DISPLAY Version '
  1119.     DB    VERS/10 + '0','.',VERS MOD 10 + '0'
  1120.     DB    ' HELP SUMMARY',ACR,ALF,ACR,ALF
  1121.     DB    'Command:  Operation performed:',ACR,ALF
  1122.     DB    '=======   ===================',ACR,ALF
  1123.     DB    'B         Move pointer to beginning of file and display page.',ACR,ALF,ACR,ALF
  1124.     DB    '-nP       Move pointer minus n pages and display page.',ACR,ALF
  1125.     DB    'nP        Move pointer plus n pages and display page.',ACR,ALF
  1126.     DB    '0P        Move pointer to beginning of buffer and display page',ACR,ALF,ACR,ALF
  1127.     DB    '-nL       Move pointer minus n lines and display page.',ACR,ALF
  1128.     DB    'nL        Move pointer plus n lines and display page.',ACR,ALF
  1129.     DB    'nD        Discard n pages, refill buffer and display the',ACR,ALF
  1130.     DB    '          current page.',ACR,ALF
  1131.     DB    '0D        Discard all data up to the current pointer, refill',ACR,ALF
  1132.     DB    '          buffer and display the first page.',ACR,ALF,ACR,ALF
  1133.     DB    'E         Exit DISPLAY and return to CP/M.',ACR,ALF
  1134.     DB    '^C        Control-C, exit DISPLAY and return to CP/M.',ACR,ALF,ACR,ALF
  1135.     DB    '<cr>      Move pointer to next page and display',ACR,ALF
  1136.     DB    '$'
  1137. ;
  1138. Y082A    DB    0
  1139. Y082B    DB    0
  1140. Y082C    DW    0
  1141. Y082E    DW    0
  1142. Y0830    DB    0
  1143. Y0831    DB    0
  1144. Y0832    DB    0
  1145. Y0833    DB    0
  1146. Y0834    DB    0
  1147. Y0835    DB    0
  1148. Y0836    DB    0
  1149. Y0837    DB    0
  1150. Y0838    DW    0
  1151. Y083A    DB    0
  1152. Y083B    DB    0
  1153. Y083C    DW    0
  1154. Y083E    DW    0
  1155. Y0840    DW    0
  1156. Y0842    DW    0
  1157. Y0844    DW    0
  1158. ;
  1159.     DS    32
  1160. ;
  1161. BUF$START EQU    $
  1162. ;    
  1163.     END
  1164.