home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol087 / typ-plus.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  12.8 KB  |  896 lines

  1. ;********************************************************
  2. ;*                            *
  3. ;*    Disassembly of T.COM from CBBS disks        *
  4. ;*                            *
  5. ;********************************************************
  6. ;
  7. ;    Originally written by
  8. ;    Ward Christensen
  9. ;    and supplied with the CBBS package
  10. ;
  11. ;    Disassembly
  12. ;    By Bill Bolton
  13. ;       "Software Tools" RCPM
  14. ;       SYSOP
  15. ;
  16. ;VERSION LIST - most recent version first
  17. ;
  18. ;11/Aug/82 Fixed Control S "pause" to release on any char
  19. ;       following, including another Control S. Bill Bolton
  20. ;
  21. ;02/Aug/82 Entering TYPE *.* would eventually yield a list of
  22. ;       all the files on the disk, including tagged and SYS
  23. ;       files. File type testing was rearranged to prevent
  24. ;       this and COM and OBJ messages were deleted. Fixed bug
  25. ;       due to error in disassembly concerning buffer size.
  26. ;       Changed console input check to direct console I/O
  27. ;       (BDOS 6) and added CP/M version trap. Added messages
  28. ;       explaning how to look at some files that can't be 
  29. ;       "type"d. Bill Bolton
  30. ;
  31. ;15/Jul/82 Diassembled and file type testing routines from
  32. ;       MLIST50 merged in. Bill Bolton
  33. ;
  34. ;
  35. BDOS    EQU    00005H        ;CP/M BDOS entry point
  36. FCB    EQU    0005CH        ;CP/M file control block
  37. SECTOR    EQU    80H        ;Length of a CP/M sector
  38. BUF$SIZE EQU    30H        ;Size of buffer in pages
  39. ;
  40. CNTRLC    EQU    3
  41. TAB    EQU    9
  42. ALF    EQU    0AH
  43. ACR    EQU    0DH
  44. CNTRLS    EQU    13H
  45. CNTRLX    EQU    18H
  46. CNTRLZ    EQU    1AH
  47. ;
  48. CONOUT    EQU    2
  49. DIRECT    EQU    6
  50. STRING    EQU    9
  51. VERSION EQU    12
  52. OPEN    EQU    15
  53. SEARCH$1ST EQU    17
  54. SEARCH$NXT EQU    18
  55. READ    EQU    20
  56. SET$DMA    EQU    26
  57. ;
  58.     ORG    100H
  59. ;
  60. START:
  61.     CALL    BEGIN
  62. ;
  63.     DB    'TYPE Ver 5.3 - Multiple file lister',ACR,ALF,'$'
  64. ;
  65. BEGIN:
  66.     POP    D
  67.     LXI    H,0
  68.     DAD    SP
  69.     SHLD    OLD$STACK    ;Save entry stack
  70.     LXI    SP,STACK$TOP    ;Set up local stack
  71.     MVI    C,STRING
  72.     CALL    BDOS
  73.     MVI    C,VERSION
  74.     CALL    BDOS
  75.     CPI    20H
  76.     JNC    VERSION$OK
  77.     CALL    PRN$EXIT
  78. ;
  79.     DB    'Sorry, you need CP/M Version 2.0 or later to run TYP'
  80.     DB    ACR,ALF,ACR,ALF,'$'
  81. ;    
  82. VERSION$OK:
  83.     LDA    FCB+1
  84.     CPI    ' '        ;File name specified?
  85.     JNZ    HEADER        ;Yes
  86.     CALL    PRN$EXIT    ;No, show usage
  87. ;
  88.     DB    'TYPE command usage:',ACR,ALF,ACR,ALF
  89.     DB    '    TYPE name',ACR,ALF
  90.     DB    '    TYPE name nn',ACR,ALF
  91.     DB    '    TYPE name #',ACR,ALF
  92.     DB    '    TYPE name label',ACR,ALF,ACR,ALF
  93.     DB    'Where:',ACR,ALF,ACR,ALF
  94.     DB    '    name    Any file name.  * and ? allowed',ACR,ALF
  95.     DB    '    nn    A starting line # (1 = first)',ACR,ALF
  96.     DB    '    #    Means to count # of lines',ACR,ALF
  97.     DB    '    label    Skip to label before printing',ACR,ALF
  98.     DB    '        Must match exactly and completely',ACR,ALF
  99.     DB    '        To match leading chars, end the string with *:'
  100.     DB    ACR,ALF
  101.     DB    '            TYPE b:foo.asm tr*',ACR,ALF,'$'
  102. ;
  103. HEADER:
  104.     CALL    PRN$MSG
  105. ;
  106.     DB    ACR,ALF
  107.     DB    'CTL-S pauses, CTL-X skips to next file, CTL-C aborts'
  108.     DB    ACR,ALF,ACR,ALF,0
  109. ;
  110.     LDA    FCB+17
  111.     CPI    ' '    ;More command line?
  112.     JZ    NEXT    ;No
  113.     CPI    '0'    ;Yes,line number?
  114.     JC    A02AE    ;No
  115.     CPI    ':'
  116.     JC    A02BD    ;Yes
  117. A02AE:
  118.     LXI    H,FCB+17    ;Point to secondary FCB
  119.     LXI    D,D0707        ;Internal buffer
  120.     LXI    B,11        ;Length to move
  121.     CALL    MOVER        ;Do it
  122.     JMP    NEXT
  123. ;
  124. A02BD:
  125.     LXI    D,FCB+17
  126.     LXI    H,0
  127. A02C3:
  128.     LDAX    D
  129.     INX    D
  130.     CPI    ' '
  131.     JZ    A0302
  132.     CPI    '0'
  133.     JC    A02E5
  134.     CPI    ':'
  135.     JNC    A02E5
  136.     SUI    '0'
  137.     MOV    B,H
  138.     MOV    C,L
  139.     DAD    H
  140.     DAD    H
  141.     DAD    B
  142.     DAD    H
  143.     ADD    L
  144.     MOV    L,A
  145.     JNC    A02C3
  146.     INR    H
  147.     JMP    A02C3
  148. ;
  149. A02E5:
  150.     CALL    PRN$EXIT
  151. ;
  152.     DB    '++INVALID STARTING LINE #$'
  153. ;
  154. A0302:
  155.     MOV    A,H
  156.     ORA    L
  157.     JZ    A0308
  158.     DCX    H
  159. A0308:
  160.     SHLD    D0705
  161. NEXT:
  162.     LXI    SP,STACK$TOP    ;Reset stack
  163.     CALL    A062D
  164.     JC    EXIT
  165.     CALL    A031C
  166. ;
  167.     DB    '     '
  168. ;
  169. A031C:
  170.     POP    H
  171.     LXI    B,5        ;Length to move
  172.     LXI    D,T043D
  173.     CALL    MOVER
  174.     CALL    A032F
  175. ;
  176.     DB    '      '
  177. ;
  178. A032F:
  179.     POP    H
  180.     LXI    B,6        ;Length to move
  181.     LXI    D,T044B
  182.     CALL    MOVER
  183.     LXI    H,0
  184.     SHLD    D0700
  185.     MVI    C,OPEN        ;Open file
  186.     LXI    D,FCB
  187.     CALL    BDOS
  188.     INR    A        ;Good open?
  189.     JZ    EXIT        ;No
  190. ;
  191. ;Check for file protected by CP/M 2.x f2' attribute
  192. ;
  193. CKFIL:    LDA    FCB+10        ;POINT TO SYS FILE ATTR
  194.     ANI    80H        ;IS IT SYS?
  195.     JNZ    NEXT        ;SYS file, can't print it
  196. ;
  197. ;Check for .COM file, which can't be printed
  198. ;
  199.     LDA    FCB+11
  200.     CPI    'M'        ;WAS LAST CHAR AN 'M'?
  201.     JNZ    OBJCHK        ;IF NOT, CHK FOR '.OBJ' TYPE
  202.     LDA    FCB+10
  203.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  204.     CPI    'O'        ;AN 'O'?
  205.     JNZ    OBJCHK        ;IF NOT IT'S OK TO PRINT
  206.     LDA    FCB+9
  207.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  208.     CPI    'C'        ;'C' AS IN '.COM'?
  209.     JNZ    OBJCHK        ;IF NOT, IT'S OK TO PRINT
  210.     JMP    NEXT        ;MORE TO PRINT?
  211. ;
  212. ;Check for .OBJ file, which can't be printed
  213. ;
  214. OBJCHK:
  215.     CPI    'J'        ;WAS LAST CHAR AN 'J' ?
  216.     JNZ    SHOW$NAME    ;IF NOT, OK TO LIST
  217.     LDA    FCB+10        ;MIGHT BE '.OBJ', CHK NEXT CHR
  218.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  219.     CPI    'B'        ;IS IT A 'B'?
  220.     JNZ    SHOW$NAME    ;IF NOT, LIST
  221.     LDA    FCB+9        ;WAS, CHK FIRST CHAR
  222.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  223.     CPI    'O'        ;'O' AS IN '.OBJ'?
  224.     JNZ    SHOW$NAME    ;IF NOT, PRINT THE FILE, IF SO
  225.     JMP    NEXT        ;MORE TO PRINT?
  226. ;
  227. SHOW$NAME:
  228.     LXI    H,FCB+1        ;Point to primary file name
  229.     LXI    D,PRIMARY
  230.     LXI    B,8        ;Length
  231.     CALL    MOVER
  232.     LXI    H,FCB+9        ;Point to secondary file name
  233.     LXI    D,SECNDRY
  234.     LXI    B,3        ;Length
  235.     CALL    MOVER
  236.     CALL    PRN$MSG
  237. ;
  238.     DB    ACR,ALF,ACR,ALF
  239.     DB    '===> LISTING FILE: '
  240. PRIMARY:
  241.     DB    'XXXXXXXX.'
  242. SECNDRY:
  243.     DB    'XXX',ACR,ALF,ACR,ALF
  244.     DB    0
  245. ;
  246.     LDA    FCB+2        ;POINT TO TAG FILE ATTR
  247.     ANI    80H        ;IS IT TAGGED?
  248.     JZ    SQCHK        ;NO, CHECK IF SQUEEZED
  249.     CALL    PRN$MSG        ;PRINT:
  250. ;
  251.     DB    '++FILE NOT FOR DISTRIBUTION, SORRY++',ACR,ALF,0
  252. ;
  253.     LDA    FCB+11
  254.     CPI    'L'        ;WAS LAST CHAR AN 'L' ?
  255.     JNZ    HLPCHK        ;IF NOT, OK TO LIST
  256.     LDA    FCB+10        ;MIGHT BE '.ALL', CHK NEXT CHR
  257.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  258.     CPI    'L'        ;IS IT A 'L'?
  259.     JNZ    HLPCHK        ;IF NOT, LIST
  260.     LDA    FCB+9        ;WAS, CHK FIRST CHAR
  261.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  262.     CPI    'A'        ;'A' AS IN '.ALL'?
  263.     JNZ    HLPCHK        ;NO, NEXT CHECK
  264.     CALL    PRN$MSG
  265. ;
  266.     DB    ACR,ALF
  267.     DB    '++Use DISPLAY to look at this Catalogue++'
  268.     DB    ACR,ALF,0
  269.     JMP    NEXT        ;MORE TO PRINT?
  270. ;
  271. HLPCHK:
  272.     LDA    FCB+11        ;POINT TO LAST CHAR OF FTYPE
  273.     CPI    'P'
  274.     JNZ    NXTCHK        ;IF NOT, OK TO LIST
  275.     LDA    FCB+10        ;MIGHT BE '.HLP', CHK NEXT CHR
  276.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  277.     CPI    'L'        ;IS IT A 'L'?
  278.     JNZ    NXTCHK        ;IF NOT, LIST
  279.     LDA    FCB+9        ;WAS, CHK FIRST CHAR
  280.     ANI    7FH        ;STRIP CP/M 2.x ATTR
  281.     CPI    'H'        ;'H' AS IN '.HLP'?
  282.     JNZ    NXTCHK        ;NO, NEXT CHECK
  283.     CALL    PRN$MSG
  284. ;
  285.     DB    ACR,ALF
  286.     DB    '++Use HELP to look this "HLP" file++'
  287.     DB    ACR,ALF,0
  288.     JMP    NEXT        ;MORE TO PRINT?
  289. ;
  290. NXTCHK:
  291.     JMP    NEXT
  292. ;
  293. ;Check for possible 'squeezed' file, which will not print
  294. ;
  295. SQCHK:
  296.     LDA    FCB+10        ;GET SECOND CHAR OF FILETYPE
  297.     ANI    7FH        ;STRIP ATTRIBUTE
  298.     CPI    'Q'        ;THIS MAY BE SQUEEZED FILE
  299.     JNZ    A038A        ;NOT SQUEEZED
  300.     CALL    PRN$MSG        ;PRINT:
  301. ;
  302.     DB    'NOTE: If this file doesn''t '
  303.     DB    'print correctly, try TYPE in XYAM.',ACR,ALF
  304.     DB    'Most files with "Q" as 2nd char. '
  305.     DB    'of filetype are squeezed.',ACR,ALF,ACR,ALF,0
  306. ;
  307. A038A:
  308.     LXI    H,BUF$END
  309.     MVI    B,1
  310. A038F:
  311.     PUSH    B
  312.     PUSH    D
  313.     PUSH    H
  314.     LXI    H,T06FE
  315.     CALL    A057C
  316.     POP    H
  317.     POP    D
  318.     POP    B
  319.     CPI    CNTRLZ        ;End of file?
  320.     JZ    A03ED
  321.     ANI    07FH        ;Strip of MSB (WordStar?)
  322.     CPI    ACR
  323.     JZ    A03C0
  324.     CPI    TAB
  325.     JNZ    A03BA
  326. TABER:
  327.     MVI    M,' '
  328.     INX    H
  329.     INR    B
  330.     MOV    A,B
  331.     DCR    A
  332.     ANI    007H        ;Reached next TAB stop?
  333.     JNZ    TABER        ;No
  334.     JMP    A038F        ;Yes
  335. ;
  336. A03BA:
  337.     MOV    M,A
  338.     INX    H
  339.     INR    B
  340.     JMP    A038F
  341. ;
  342. A03C0:
  343.     MVI    M,' '
  344.     INX    H
  345.     MOV    M,A
  346.     PUSH    B
  347.     PUSH    D
  348.     PUSH    H
  349.     LXI    H,T06FE
  350.     CALL    A057C
  351.     POP    H
  352.     POP    D
  353.     POP    B
  354.     CALL    CONSOLE$CHK
  355.     JC    NEXT
  356.     LDA    D0707
  357.     CPI    '#'
  358.     JZ    A038A
  359.     LHLD    D0705
  360.     MOV    A,H
  361.     ORA    L
  362.     JZ    A045E
  363.     DCX    H
  364.     SHLD    D0705
  365.     JMP    A038A
  366. ;
  367. A03ED:
  368.     LHLD    D0705
  369.     MOV    A,H
  370.     ORA    L
  371.     JZ    A0415
  372.     CALL    PRN$EXIT
  373. ;
  374.     DB    '++STARTING LINE # TOO HIGH++$'
  375. ;
  376. A0415:
  377.     LDA    D0707
  378.     CPI    ' '
  379.     JZ    NEXT
  380.     CPI    '#'
  381.     JZ    A043A
  382.     CALL    PRN$EXIT
  383. ;
  384.     DB    '++STRING NOT FOUND++$'
  385. ;
  386. A043A:
  387.     CALL    PRN$MSG
  388. ;
  389. T043D:
  390.     DB    '     '
  391. T0442:
  392.     DB    '  LINES, '
  393. T044B:
  394.     DB    '      '
  395. T0451:
  396.     DB    '  BYTES',ACR,ALF,0
  397. ;
  398.     JMP    NEXT
  399. ;
  400. A045E:
  401.     LDA    D0707
  402.     CPI    ' '
  403.     JZ    A048F
  404.     LXI    H,D0707
  405.     LXI    D,BUF$END
  406. A046C:
  407.     LDAX    D
  408.     CPI    ' '
  409.     JZ    A0489
  410.     CPI    ':'
  411.     JZ    A0489
  412.     CMP    M
  413.     JNZ    A0480
  414.     INX    D
  415.     INX    H
  416.     JMP    A046C
  417. ;
  418. A0480:
  419.     MOV    A,M
  420.     CPI    '?'
  421.     JZ    A048F
  422.     JMP    A038A
  423. ;
  424. A0489:
  425.     MOV    A,M
  426.     CPI    ' '
  427.     JNZ    A038A
  428. A048F:
  429.     MVI    A,' '
  430.     STA    D0707
  431.     MVI    C,0
  432.     LXI    H,BUF$END
  433. A0499:
  434.     MOV    A,M
  435.     CPI    ' '
  436.     JNZ    A04A9
  437.     CPI    ACR
  438.     JZ    A04A9
  439.     INX    H
  440.     INR    C
  441.     JMP    A0499
  442. ;
  443. A04A9:
  444.     LXI    H,BUF$END
  445.     MVI    B,1
  446. A04AE:
  447.     PUSH    B
  448.     PUSH    H
  449. A04B0:
  450.     MOV    A,M
  451.     INX    H
  452.     INR    B
  453.     CPI    ACR
  454.     JZ    A04E6
  455.     CPI    ' '
  456.     JNZ    A04B0
  457.     MOV    A,B
  458.     POP    H
  459.     POP    B
  460.     CPI    'P'
  461.     JC    A04EA
  462.     JZ    A04EA
  463.     CALL    PRN$MSG
  464.     DCR    C
  465.     LDAX    B
  466.     NOP
  467.     PUSH    B
  468. A04CF:
  469.     XRA    A
  470.     ORA    C
  471.     JZ    A04E7
  472.     PUSH    B
  473.     PUSH    D
  474.     PUSH    H
  475.     MVI    C,DIRECT    ;Console out
  476.     LXI    D,' '
  477.     CALL    BDOS
  478.     POP    H
  479.     POP    D
  480.     POP    B
  481.     DCR    C
  482.     JMP    A04CF
  483. ;
  484. A04E6:
  485.     POP    H
  486. A04E7:
  487.     POP    B
  488.     MVI    B,1
  489. A04EA:
  490.     MOV    E,M
  491.     INR    B
  492.     MOV    A,M
  493.     CPI    ' '
  494.     JNZ    A04F8
  495.     MOV    A,B
  496.     CPI    'P'
  497.     JZ    A0503
  498. A04F8:
  499.     PUSH    B
  500.     PUSH    D
  501.     PUSH    H
  502.     MVI    C,DIRECT    ;Console out
  503.     CALL    BDOS
  504.     POP    H
  505.     POP    D
  506.     POP    B
  507. A0503:
  508.     CALL    CONSOLE$CHK
  509.     JC    NEXT
  510.     MOV    A,M
  511.     INX    H
  512.     CPI    ACR
  513.     JZ    SEND$LF
  514.     CPI    ' '
  515.     JNZ    A04EA
  516.     JMP    A04AE
  517. ;
  518. DIR$CON:
  519.     PUSH    B
  520.     PUSH    D
  521.     PUSH    H
  522.     LXI    D,0FFH
  523.     MVI    C,DIRECT    ;Direct Console input
  524.     CALL    BDOS
  525.     POP    H
  526.     POP    D
  527.     POP    B
  528.     ORA    A
  529.     RET
  530. ;
  531. CONSOLE$CHK:
  532.     CALL    DIR$CON
  533.     RZ
  534. CONTROL$CHK:
  535.     CPI    CNTRLC        ;Abort ?
  536.     JZ    ABORT        ;Yes
  537.     CPI    CNTRLX        ;Skip to next file?
  538.     JZ    SKIP        ;Yes
  539.     CPI    CNTRLS        ;Pause for a while?
  540.     JNZ    NO$ACTION    ;No
  541. PAUSE$LOOP:
  542.     CALL    DIR$CON        ;Another key pressed
  543.     JZ    PAUSE$LOOP    ;No
  544.     CPI    CNTRLS        ;Yes, go again?
  545.     JZ    NO$ACTION    ;Yes
  546.     JMP    CONTROL$CHK    ;No, check it
  547. ;
  548. NO$ACTION:
  549.     ORA    A        ;Reset flags
  550.     RET
  551. ;
  552. SKIP:
  553.     CALL    PRN$MSG
  554. ;
  555.     DB    ACR,ALF,ACR,ALF,'++SKIPPING TO NEXT FILE++',0
  556. ;
  557.     STC
  558.     RET
  559. ;
  560. SEND$LF:
  561.     PUSH    B
  562.     PUSH    D
  563.     PUSH    H
  564.     MVI    C,DIRECT    ;Console out
  565.     LXI    D,ALF
  566.     CALL    BDOS
  567.     POP    H
  568.     POP    D
  569.     POP    B
  570.     JMP    A038A
  571. ;
  572. PRN$MSG:
  573.     XTHL
  574. MSG$LOOP:
  575.     MOV    E,M
  576.     PUSH    B
  577.     PUSH    D
  578.     PUSH    H
  579.     MVI    C,DIRECT        ;Console out
  580.     CALL    BDOS
  581.     POP    H
  582.     POP    D
  583.     POP    B
  584.     INX    H
  585.     MOV    A,M
  586.     ORA    A
  587.     JNZ    MSG$LOOP
  588.     XTHL
  589.     RET
  590. ;
  591. MOVER:
  592.     MOV    A,M        ;Get a byte from source
  593.     STAX    D        ;Put into destination
  594.     INX    H        ;Adjust pointers
  595.     INX    D
  596.     DCX    B        ;Adjust counter
  597.     MOV    A,B
  598.     ORA    C        ;Done?
  599.     JNZ    MOVER        ;No
  600.     RET
  601. ;
  602. A057C:
  603.     MOV    E,M
  604.     INX    H
  605.     MOV    D,M
  606.     INX    H
  607.     MOV    C,M
  608.     INX    H
  609.     MOV    B,M
  610.     MOV    A,B
  611.     ORA    C
  612.     JNZ    A05D1
  613.     INX    H
  614.     MOV    A,M
  615.     ADD    A
  616.     MOV    B,A
  617.     INX    H
  618.     PUSH    H
  619.     MOV    A,M
  620.     INX    H
  621.     MOV    H,M
  622.     MOV    L,A
  623. A0592:
  624.     CALL    CONSOLE$CHK
  625.     JC    NEXT
  626.     MVI    A,CNTRLZ
  627.     STAX    D
  628.     PUSH    D
  629.     PUSH    H
  630.     PUSH    B
  631.     PUSH    D
  632.     PUSH    H
  633.     MVI    C,SET$DMA    ;Set DMA address
  634.     CALL    BDOS
  635.     POP    H
  636.     POP    D
  637.     POP    B
  638.     POP    D
  639.     PUSH    B
  640.     PUSH    D
  641.     PUSH    H
  642.     MVI    C,READ        ;Read sequential
  643.     CALL    BDOS
  644.     POP    H
  645.     POP    D
  646.     POP    B
  647.     ORA    A
  648.     POP    H
  649.     JNZ    A05C6
  650.     MOV    A,L
  651.     ADI    080H
  652.     MOV    L,A
  653.     MOV    A,H
  654.     ACI    0
  655.     MOV    H,A
  656.     XCHG
  657.     DCR    B
  658.     JNZ    A0592
  659. A05C6:
  660.     POP    H
  661.     DCX    H
  662.     MOV    A,M
  663.     DCX    H
  664.     MOV    M,A
  665.     DCX    H
  666.     DCX    H
  667.     DCX    H
  668.     JMP    A057C
  669. ;
  670. A05D1:
  671.     INX    H
  672.     MOV    A,M
  673.     XCHG
  674.     ADD    H
  675.     MOV    H,A
  676.     MOV    A,L
  677.     SUB    C
  678.     MOV    L,A
  679.     MOV    A,H
  680.     SBB    B
  681.     MOV    H,A
  682.     MOV    A,M
  683.     XCHG
  684.     CALL    A05EF
  685.     CPI    ALF
  686.     CZ    A05FA
  687.     CPI    CNTRLZ
  688.     RZ
  689.     DCX    B
  690.     DCX    H
  691.     MOV    M,B
  692.     DCX    H
  693.     MOV    M,C
  694.     RET
  695. ;
  696. A05EF:
  697.     PUSH    H
  698.     LXI    H,T0451
  699. A05F3:
  700.     PUSH    PSW
  701.     CALL    A0601
  702.     POP    PSW
  703.     POP    H
  704.     RET
  705. ;
  706. A05FA:
  707.     PUSH    H
  708.     LXI    H,T0442
  709.     JMP    A05F3
  710. ;
  711. A0601:
  712.     MOV    A,M
  713.     ORI    '0'
  714.     INR    A
  715.     MOV    M,A
  716.     CPI    ':'
  717.     RNZ
  718.     MVI    M,'0'
  719.     DCX    H
  720.     JMP    A0601
  721. ;
  722. ; >> NO EXECUTION PATH TO HERE <<
  723.     PUSH    PSW
  724.     RAR
  725.     RAR
  726.     RAR
  727.     RAR
  728.     CALL    A0618
  729.     POP    PSW
  730. A0618:
  731.     ANI    00FH
  732.     ADI    090H
  733.     DAA
  734.     ACI    040H
  735.     DAA
  736.     MOV    E,A
  737.     PUSH    B
  738.     PUSH    D
  739.     PUSH    H
  740.     MVI    C,DIRECT
  741.     CALL    BDOS
  742.     POP    H
  743.     POP    D
  744.     POP    B
  745.     RET
  746. ;
  747. A062D:
  748.     PUSH    B
  749.     PUSH    D
  750.     PUSH    H
  751.     MVI    C,SET$DMA        ;Set DMA address
  752.     LXI    D,00080H
  753.     CALL    BDOS
  754.     POP    H
  755.     POP    D
  756.     POP    B
  757.     XRA    A
  758.     STA    FCB+12
  759.     STA    FCB+32
  760.     LDA    D06DA
  761.     ORA    A
  762.     JNZ    A067D
  763.     MVI    A,1
  764.     STA    D06DA
  765.     LXI    H,FCB
  766.     LXI    D,T06DB
  767.     LXI    B,12
  768.     CALL    MOVER
  769.     LDA    FCB
  770.     STA    CDISK
  771.     LXI    H,T06DB
  772.     LXI    D,FCB
  773.     LXI    B,12
  774.     CALL    MOVER
  775.     PUSH    B
  776.     PUSH    D
  777.     PUSH    H
  778.     MVI    C,SEARCH$1st    ;Search for first
  779.     LXI    D,FCB
  780.     CALL    BDOS
  781.     POP    H
  782.     POP    D
  783.     POP    B
  784.     JMP    A06B1
  785. ;
  786. A067D:
  787.     LXI    H,CDISK
  788.     LXI    D,FCB
  789.     LXI    B,12
  790.     CALL    MOVER
  791.     PUSH    B
  792.     PUSH    D
  793.     PUSH    H
  794.     MVI    C,SEARCH$1st        ;Search for first
  795.     LXI    D,FCB
  796.     CALL    BDOS
  797.     POP    H
  798.     POP    D
  799.     POP    B
  800.     LXI    H,T06DB
  801.     LXI    D,FCB
  802.     LXI    B,12
  803.     CALL    MOVER
  804.     PUSH    B
  805.     PUSH    D
  806.     PUSH    H
  807.     MVI    C,SEARCH$NXT    ;Search for next
  808.     LXI    D,FCB
  809.     CALL    BDOS
  810.     POP    H
  811.     POP    D
  812.     POP    B
  813. A06B1:
  814.     INR    A
  815.     STC
  816.     RZ
  817.     DCR    A
  818.     ANI    3
  819.     ADD    A
  820.     ADD    A
  821.     ADD    A
  822.     ADD    A
  823.     ADD    A
  824.     ADI    081H
  825.     MOV    L,A
  826.     MVI    H,0
  827.     PUSH    H
  828.     LXI    D,T06E8
  829.     LXI    B,11
  830.     CALL    MOVER
  831.     POP    H
  832.     LXI    D,FCB+1
  833.     LXI    B,11
  834.     CALL    MOVER
  835.     XRA    A
  836.     STA    FCB+12
  837.     RET
  838. ;
  839. D06DA:
  840.     DB    0
  841. T06DB:
  842.     DB    0,0,0,0,0,0,0,0,0,0
  843.     DB    0,0
  844. CDISK:
  845.     DB    0
  846. T06E8:
  847.     DB    0,0,0,0,0,0,0,0,0,0
  848.     DB    0
  849. ;
  850. ABORT:
  851.     CALL    PRN$EXIT
  852. ;
  853.     DB    ACR,ALF,ACR,ALF,'++ABORTED++',ACR,ALF,'$'
  854. ;
  855. PRN$EXIT:
  856.     POP    D
  857.     MVI    C,STRING    ;Print string
  858.     CALL    BDOS
  859. EXIT:
  860.     LHLD    OLD$STACK
  861.     SPHL
  862.     RET
  863. ;
  864. T06FE:
  865.     DW    BUFFER
  866. D0700:
  867.     DB    0,0
  868.     DB    BUF$SIZE
  869.     DW    FCB
  870. D0705:
  871.     DW    0
  872. D0707:
  873.     DB    020H
  874. ;
  875.     DB    0,0,0,0,0,0,0,0,0,0
  876.     DB    0,0,0,0,0,0,0,0,0,0
  877.     DB    0,0,0,0,0,0,0,0,0,0
  878.     DB    0,0,0,0,0,0,0,0,0,0
  879.     DB    0,0,0,0,0,0,0,0,0,0
  880.     DB    0,0,0,0,0,0,0,0,0,0
  881.     DB    0,0,0,0,0,0,0,0,0,0
  882.     DB    0,0,0,0,0,0,0,0,0,0
  883.     DB    0,0,0,0,0,0,0,0,0,0
  884.     DB    0,0,0,0,0,0,0,0,0,0
  885.     DB    0,0,0,0,0,0,0,0,0,0
  886. STACK$TOP:
  887. ;
  888. OLD$STACK:
  889.     DW    0
  890. ;
  891. BUFFER    EQU    $
  892. BUF$END    EQU    $ + ((2 * BUF$SIZE) * SECTOR) ;Length of buffer
  893. ;
  894.     END
  895.  
  896.