home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol004 / du-8-12.asm < prev    next >
Assembly Source File  |  1985-02-09  |  16KB  |  1,095 lines

  1. ;
  2. ;        DISK UTILITY - DU.ASM
  3. ;          (revised 8/12/80)
  4. ;
  5. ;DU.ASM 8/6/78 BY WARD CHRISTENSEN
  6. ;11/12/78 ADD LOGIN COMMAND
  7. ;11/26/78 ADD DISK # TO LOGIN COMMAND
  8. ;02/25/79 PUT SECTOR READ INTO "S" COMMAND
  9. ;03/15/79 ADD CHANGES FOR CP/M ON MICROPOLIS
  10. ;      FIX WRAP-AROUND FROM TRACK 0 TO TRACK 76
  11. ;      ON MINUS COMMAND.
  12. ;      (BY KEITH PETERSEN, W8SDZ)
  13. ;03/18/79 ADD CHANGES TO CALCGRP ROUTINE TO ALLOW
  14. ;      FOR CONDITIONAL ASSEMBLY FOR CP/M ON
  15. ;      MICROPOLIS.  (KBP)
  16. ;09/04/79 ADD REGISTER SAVES TO DIRECT VECTOR
  17. ;      CALLS. REMOVE UNUSED MACRO. DELETED
  18. ;      SEVERAL UNUSED ROUTINES.  (KBP)
  19. ;11/27/79 ADD CHANGES FOR DIGITAL MICROSYSTEMS
  20. ;      DOUBLE DENSITY USING THE FDC3 CONTROLLER
  21. ;      BOARD, AND NORTHSTAR DOUBLE DENSITY (KBP)
  22. ;12/04/79 CORRECT ERROR IN GROUP NUMBER DISPLAY FOR
  23. ;      NORTHSTAR DOUBLE DENSITY. (KBP)
  24. ;
  25. ;02/16/80 CORRECT VERSION 2.0 INCOMPATIBILITY IN 'F' COMMAND
  26. ;      CHANGE DISPLAY TO SHOW BOTH RELATIVE AND PHYSICAL SECTOR
  27. ;      (BRUCE RATOFF, ACGNJ)
  28. ;
  29. ;07/01/80 ADD CHANGES FOR THINKER TOYS DJ2D CONTROLLER AND
  30. ;      1024 BYTE DOUBLE DENSITY SECTORS
  31. ;      (Jeff Hammersley)
  32. ;
  33. ;08/12/80 ADD CHANGES FOR MICROMATION SINGLE-SIDED DBL DENSITY
  34. ;      FORMAT - NOTE - FOR TRACKS 2-76 ONLY (TRACKS 0 & 1
  35. ;      ARE SINGLE DENSITY) (CHARLES STROM)
  36. ;
  37. ;
  38. STDCPM    EQU    0    ;TRUE IF STANDARD CP/M
  39. MICROP    EQU    0    ;TRUE IF MICROPOLIS CP/M
  40. DIGDBL    EQU    0    ;TRUE IF DIGITAL MICROSYSTEMS DBL DENS
  41. NSDBL    EQU    0    ;TRUE IF NORTHSTAR DBL DENSITY CP/M
  42. TTDBL1    EQU    0    ;TRUE IF THINKER TOYS DBL DENSITY
  43.             ; 1024 byte sectors
  44. MMDBL    EQU    1    ;TRUE IF MICROMATION DBL DENSITY
  45. ;
  46. CR    EQU    0DH
  47. LF    EQU    0AH
  48. ;
  49. ;Functions supported:
  50. ;
  51. ;    Tnn    Seek to track nn (no read)
  52. ;    Snn    Position to sector nn, and read
  53. ;    Gnn    Position to group nn and read.
  54. ;    Fname    print directory for file "name"
  55. ;        N-O-T-E this is not a direct disk
  56. ;        read, so the W command MAY NOT be
  57. ;        executed after 'F'. (must do G, +
  58. ;        or - command first)
  59. ;
  60. ;    L    Logs in the disk (used if a disk other
  61. ;        than the one DU resides on, is placed
  62. ;        in the system)
  63. ;
  64. ;    Ln    Logs in disk 'n', such as: LA
  65. ;
  66. ;    D    Dump sector, hex + ASCII
  67. ;    A    Dump sector, ASCII only
  68. ;    H    Dump sector, hex only
  69. ;
  70. ;note all dump commands (D, A, H) may be optionally
  71. ;    followed by a starting and ending address:
  72. ;    D0,7F  is the same as just D
  73. ;    D3,5
  74. ;    A20,3F
  75. ;
  76. ;    CHaddr,val,val,val... change hex in sector
  77. ;    CAaddr,char string... change ASCII in sector
  78. ;        (must W to have changes written to disk)
  79. ;Note that the C command echoes the overlaid data for
  80. ;    verification
  81. ;
  82. ;    +    advance 1 sector (if below track 2,
  83. ;        this advances to next numerical, if
  84. ;        2 or >, advances based on CP/M's normal
  85. ;        sector scrambling algorithm, i.e. so +
  86. ;        will get the next logical sector of the file
  87. ;    -    backs up 1 logical sector
  88. ;
  89. ;        note + and - may take an amount:
  90. ;        for example, +F steps in 15 sectors
  91. ;
  92. ;    ?    Says what sector, track, and group
  93. ;        are current
  94. ;    R    Reads the sector currently positioned to
  95. ;        into memory.  Note R (Read) is implicit in
  96. ;        the G, +, and - commands, but N-O-T in the
  97. ;        S and T commands (I did it because I was
  98. ;        tired of disk reading after T command before
  99. ;        I had a chance to issue the S command)
  100. ;    W    Write back the current sector (N-O-T-E may
  101. ;        not be used after an F command, as CP/M was
  102. ;        used to find the file in the directory
  103. ;    X    Exit back to CP/M (Must press return).  Ctl-c
  104. ;        was too easy to hit over modem lines, so I
  105. ;        decided on 2-byte (X, CR) to exit.
  106. ;
  107. ;
  108.     ORG    100H
  109. ;
  110.     LXI    SP,STACK
  111. ;SET UP LOCAL JMPS TO BIOS
  112.     LHLD    1
  113.     LXI    D,3
  114.     DAD    D
  115.     SHLD    VCONST+1
  116.     DAD    D
  117.     SHLD    VCONIN+1
  118.     DAD    D
  119.     SHLD    VCONOUT+1
  120.     DAD    D    ;LIST
  121.     DAD    D    ;PUNCH
  122.     DAD    D    ;RDR
  123.     DAD    D    ;HOME
  124.     DAD    D    ;SEL DISK
  125.     DAD    D
  126.     SHLD    VSETTRK+1
  127.     DAD    D
  128.     SHLD    VSETSEC+1
  129.     DAD    D    ;SETDMA
  130.     DAD    D
  131.     SHLD    VREAD+1
  132.     DAD    D
  133.     SHLD    VWRITE+1
  134.     CALL    ILPRT
  135.     DB    'DISK UTIL 7/01/80',CR,LF
  136.     IF    STDCPM
  137.     DB    'Standard CP/M Version'
  138.     ENDIF
  139.     IF    MICROP
  140.     DB    'Micropolis Version'
  141.     ENDIF
  142.     IF    DIGDBL
  143.     DB    'DD Digital Microsystems Version'
  144.     ENDIF
  145.     IF    NSDBL
  146.     DB    'DD Northstar Version'
  147.     ENDIF
  148.     IF    TTDBL1
  149.     DB    'Thinker Toys DBL Density (1024 byte sectors)'
  150.     ENDIF
  151.     IF     MMDBL
  152.     DB    'Micromation DBL Density (Tracks 2-76 ONLY!)'
  153.     ENDIF
  154.     DB    CR,LF,0
  155. PROMPT    LXI    SP,STACK
  156.     CALL    RDBUF
  157.     LXI    H,INBUF
  158.     MOV    A,M
  159.     INX    H
  160.     CPI    'T'
  161.     JZ    POS
  162.     CPI    'S'
  163.     JZ    POS
  164.     CPI    'G'
  165.     JZ    POS
  166.     CPI    'F'
  167.     JZ    POSFIL
  168.     CPI    'L'
  169.     JZ    LOGIN
  170.     CPI    'D'
  171.     JZ    DUMP
  172.     CPI    'A'
  173.     JZ    DUMP
  174.     CPI    'H'
  175.     JZ    DUMP
  176.     CPI    'C'
  177.     JZ    CHG
  178.     CPI    '+'
  179.     JZ    PLUS
  180.     CPI    '-'
  181.     JZ    MINUS
  182.     CPI    '?'
  183.     JZ    INQ
  184.     CPI    'R'
  185.     JZ    DOREAD
  186.     CPI    'W'
  187.     JZ    DOWRITE
  188.     CPI    'X'
  189.     JZ    0
  190. WHAT    CALL    ILPRT
  191.     DB    '?',0
  192.     JMP    PROMPT
  193. ;
  194. LOGIN    MVI    C,RESETDK
  195.     CALL    BDOS
  196.     LDA    INBUF+1    ;DISK REQ?
  197.     LXI    D,0
  198.     CPI    CR
  199.     JZ    LGNODK
  200.     SUI    'A'
  201.     MOV    E,A
  202. LGNODK    MVI    C,SELDK
  203.     CALL    BDOS
  204.     CALL    NOWRITE
  205.     JMP    PROMPT
  206. ;
  207. NOWRITE    XRA    A    ;GET 0
  208.     STA    WRFLG    ;CAN'T WRITE NOW
  209.     RET
  210. ;
  211. DUMP    LDA    WRFLG
  212.     ORA    A
  213.     JNZ    DUMPOK
  214.     CALL    ILPRT
  215.     DB    '++CAN''T DUMP, NO SECTOR READ.',CR,LF,0
  216. EXPL    CALL    ILPRT
  217.     DB    'USE G COMMAND FOLLOWING F,',CR,LF
  218.     DB    'OR R FOLLOWING S OR T',CR,LF,0
  219.     JMP    PROMPT
  220. ;
  221. DUMPOK    MOV    A,M
  222.     CPI    CR
  223.     JNZ    DUMPNDF
  224. ;USE DEFAULT
  225.     LXI    B,0
  226.     LXI    D,7FH
  227.     JMP    DUMP1
  228. ;
  229. DUMPNDF    CALL    HEXIN
  230.     MOV    B,D
  231.     MOV    C,E
  232.     CPI    CR
  233.     JZ    DUMP1
  234.     INX    H    ;SKIP ','
  235.     CALL    HEXIN
  236. ;
  237. ;BC = START, DE = END
  238. ;
  239. DUMP1    MOV    A,B
  240.     ORA    D
  241.     JNZ    WHAT
  242.     MOV    A,C
  243.     ORA    E
  244.     JM    WHAT    ;>7FH
  245.     MOV    H,B
  246.     MOV    A,C
  247.     ORI    80H
  248.     MOV    L,A
  249.     MOV    A,E
  250.     ORI    80H
  251.     MOV    E,A
  252. DUMPLP    MOV    A,L
  253.     ANI    7FH
  254.     CALL    HEX
  255.     CALL    SPACE
  256.     CALL    SPACE
  257.     LDA    INBUF
  258.     CPI    'A'
  259.     JZ    DUMPAS
  260.     PUSH    H    ;SAVE START
  261. DHEX    MOV    A,M
  262.     CALL    HEX
  263.     MOV    A,L
  264.     ANI    3
  265.     CPI    3
  266.     CZ    SPACE
  267.     MOV    A,L
  268.     ANI    7
  269.     CPI    7
  270.     CZ    SPACE
  271.     MOV    A,E
  272.     CMP    L
  273.     JZ    DPOP
  274.     INX    H
  275.     MOV    A,L
  276.     ANI    0FH
  277.     JNZ    DHEX
  278. DPOP    LDA    INBUF
  279.     CPI    'H'
  280.     JZ    DNOAS    ;HEX ONLY
  281.     POP    H    ;GET START ADDR
  282. DUMPAS    CALL    ASTER
  283. DCHR    MOV    A,M
  284.     CPI    ' '
  285.     JC    DPER
  286.     CPI    7FH
  287.     JC    DOK
  288. DPER    MVI    A,'.'
  289. DOK    CALL    TYPE
  290.     MOV    A,E
  291.     CMP    L
  292.     JZ    DEND
  293.     INX    H
  294.     MOV    A,L
  295.     ANI    0FH
  296.     JNZ    DCHR
  297. DEND    CALL    ASTER
  298.     CALL    CRLF
  299.     CALL    CONST
  300.     ORA    A
  301.     JNZ    PROMPT
  302.     MOV    A,E
  303.     CMP    L
  304.     JZ    PROMPT
  305.     JMP    DUMPLP
  306. ;
  307. DNOAS    POP    B
  308.     CALL    CRLF
  309.     MOV    A,E
  310.     CMP    L
  311.     JZ    PROMPT
  312.     JMP    DUMPLP
  313. ;
  314. ;POSITION
  315. ;
  316. POS    PUSH    PSW
  317.     CALL    NOWRITE
  318.     MOV    A,M
  319.     CPI    CR
  320.     JZ    WHAT
  321.     CALL    HEXIN
  322.     POP    PSW
  323.     CPI    'T'
  324.     JZ    POSTRK
  325.     CPI    'S'
  326.     JZ    POSSEC
  327.     CPI    'G'
  328.     JZ    POSGRP
  329.     JMP    WHAT
  330. ;
  331. POSTRK    MOV    A,E
  332.     CALL    SETTRK
  333.     JMP    CALCGRP
  334. ;
  335. POSSEC    MOV    A,E
  336.     ORA    A
  337.     JZ    WHAT
  338. ;
  339.     IF    STDCPM
  340.     CPI    27
  341.     ENDIF
  342. ;
  343.     IF    MICROP
  344.     CPI    33
  345.     ENDIF
  346. ;
  347.     IF    DIGDBL
  348.     CPI    59
  349.     ENDIF
  350. ;
  351.     IF    NSDBL
  352.     CPI    41
  353.     ENDIF
  354. ;
  355.     IF    TTDBL1
  356.     CPI    65
  357.     ENDIF
  358. ;
  359.     IF    MMDBL
  360.     CPI    53
  361.     ENDIF
  362. ;
  363.     JNC    WHAT
  364.     CALL    SETSEC
  365.     CALL    READ
  366. ;
  367. CALCGRP    LDA    CURTRK
  368.     SUI    2    ;GRP 0 IS TRK 2
  369.     MOV    L,A
  370.     MVI    H,0
  371.     MOV    D,H
  372.     MOV    E,L
  373.     DAD    H    ;X2
  374. ;
  375.     IF    STDCPM
  376.     DAD    D    ;X3
  377.     DAD    H    ;X6
  378.     DAD    H    ;X12
  379.     DAD    D    ;X13
  380.     DAD    H    ;X26
  381.     ENDIF
  382. ;
  383.     IF    MICROP
  384.     DAD    H    ;X4
  385.     DAD    H    ;X8
  386.     DAD    H    ;X16
  387.     DAD    H    ;X32
  388.     ENDIF
  389. ;
  390.     IF    DIGDBL
  391.     DAD    D    ;X3
  392.     DAD     H    ;X6
  393.     DAD    D    ;X7
  394.     DAD    H    ;X14
  395.     DAD    H    ;X28
  396.     DAD    D    ;X29
  397.     DAD    H    ;X58
  398.     ENDIF
  399. ;
  400.     IF    NSDBL
  401.     DAD    H    ;X4
  402.     DAD    H    ;X8
  403.     DAD    D    ;X9
  404.     DAD    D    ;X10
  405.     DAD    H    ;X20
  406.     DAD    H    ;X40
  407.     ENDIF
  408. ;
  409.     IF    TTDBL1
  410.     DAD    H    ;X4
  411.     DAD    H    ;X8
  412.     DAD    H    ;X16
  413.     DAD    H    ;X32
  414.     DAD    H    ;X64
  415.     ENDIF
  416. ;
  417.     IF    MMDBL
  418.     DAD    D    ;X3
  419.     DAD    H    ;X6
  420.     DAD    H    ;X12
  421.     DAD    D    ;X13
  422.     DAD    H    ;X26
  423.     DAD    H    ;X52
  424.     ENDIF
  425. ;
  426.     LDA    CURSEC
  427.     DCR    A
  428.     ADD    L
  429.     MOV    L,A
  430.     MOV    A,H
  431.     ACI    0
  432.     MOV    H,A
  433.     MOV    A,L
  434. ;
  435.     IF    STDCPM OR NSDBL
  436.     ANI    07H
  437.     ENDIF
  438. ;
  439.     IF    MICROP OR DIGDBL OR TTDBL1 OR MMDBL
  440.     ANI    0FH
  441.     ENDIF
  442. ;
  443.     STA    DISP
  444.     DAD    H
  445.     DAD    H
  446.     DAD    H
  447.     DAD    H
  448. ;
  449.     IF    STDCPM OR NSDBL
  450.     DAD    H
  451.     ENDIF
  452. ;
  453.     MOV    A,H
  454.     STA    GROUP
  455.     JMP    INQ
  456. ;
  457. POSGRP    MOV    A,E
  458.     STA    GROUP
  459.     XRA    A
  460.     STA    DISP
  461.     MOV    L,E    ;MULTIPLY
  462.     MVI    H,0    ;BY 8
  463.     DAD    H
  464.     DAD    H
  465.     DAD    H
  466. ;
  467.     IF    MICROP OR DIGDBL OR TTDBL1 OR MMDBL
  468.     DAD    H    ;MULTIPLY BY 16 INSTEAD OF 8
  469.     ENDIF
  470. ;
  471.     IF    STDCPM
  472. ;DIVIDE BY 26, QUOTIENT = TRK, REMAINDER = SECTOR
  473.     LXI    D,-26
  474.     ENDIF
  475. ;
  476.     IF    MICROP
  477. ;DIVIDE BY 32, QUOTIENT = TRK, REMAINDER = SECTOR
  478.     LXI    D,-32
  479.     ENDIF
  480. ;
  481.     IF    DIGDBL
  482. ;DIVIDE BY 58, QUOTIENT = TRK, REMAINDER = SECTOR
  483.     LXI    D,-58
  484.     ENDIF
  485. ;
  486.     IF    NSDBL
  487. ;DIVIDE BY 40, QUOTIENT = TRK, REMAINDER = SECTOR
  488.     LXI    D,-40
  489.     ENDIF
  490. ;
  491.     IF    TTDBL1
  492. ;DIVIDE BY 64, QUOTIENT = TRK, REMAINDER = SECTOR
  493.     LXI    D,-64
  494.     ENDIF
  495. ;
  496.     IF MMDBL
  497. ;DIVIDE BY 52, QUOTIENT = TRK, REMAINDER = SECTOR
  498.     LXI    D,-52
  499.     ENDIF
  500. ;
  501.     MVI    B,0    ;TRK
  502. DIVLP    INR    B
  503.     DAD    D
  504.     JC    DIVLP
  505.     DCR    B
  506. ;
  507.     IF    STDCPM
  508.     LXI    D,26
  509.     ENDIF
  510. ;
  511.     IF    MICROP
  512.     LXI    D,32
  513.     ENDIF
  514. ;
  515.     IF    DIGDBL
  516.     LXI    D,58
  517.     ENDIF
  518. ;
  519.     IF    NSDBL
  520.     LXI    D,40
  521.     ENDIF
  522. ;
  523.     IF    TTDBL1
  524.     LXI    D,64
  525.     ENDIF
  526. ;
  527.     IF    MMDBL
  528.     LXI    D,52
  529.     ENDIF
  530. ;
  531.     DAD    D
  532.     MOV    A,B
  533.     ADI    2    ;GROUP 0 IS TRK 2
  534.     CALL    SETTRK
  535.     MOV    A,L
  536.     INR    A
  537.     CALL    SETSEC
  538.     CALL    READ
  539.     JMP    INQ
  540. ;
  541. POSFIL    CALL    NOWRITE
  542.     LXI    D,FCB
  543.     XRA    A
  544.     STAX    D
  545.     INX    D
  546.     MVI    B,8
  547.     CALL    MVNAME
  548.     MVI    B,3
  549.     CALL    MVNAME
  550.     LXI    D,FCB
  551.     MVI    C,SEARCHF    ;USED TO BE OPEN - DIDN'T WORK IN 2.0
  552.     CALL    BDOS
  553.     INR    A
  554.     JNZ    FLOK
  555.     CALL    ILPRT
  556.     DB    '++FILE NOT FOUND',0
  557.     JMP    PROMPT
  558. ;
  559. FLOK    DCR    A
  560.     ANI    3
  561.     MOV    L,A
  562.     MVI    H,0
  563.     DAD    H
  564.     DAD    H
  565.     DAD    H
  566.     DAD    H
  567.     DAD    H
  568.     LXI    D,80H
  569.     DAD    D
  570.     LXI    D,32
  571.     XCHG
  572.     DAD    D
  573.     XCHG
  574.     MVI    A,'I'
  575.     STA    INBUF+1
  576.     JMP    DUMPLP
  577. ;
  578. MVNAME    MOV    A,M
  579.     CPI    '.'
  580.     JZ    MVIPAD
  581.     CPI    CR
  582.     JZ    PAD
  583.     STAX    D
  584.     INX    H
  585.     INX    D
  586.     DCR    B
  587.     JNZ    MVNAME
  588.     MOV    A,M
  589.     CPI    CR
  590.     RZ
  591.     INX    H
  592.     CPI    '.'
  593.     RZ
  594.     JMP    WHAT
  595. ;
  596. MVIPAD    INX    H
  597. PAD    MVI    A,' '
  598.     STAX    D
  599.     INX    D
  600.     DCR    B
  601.     JNZ    PAD
  602.     RET
  603. ;
  604. PLUS    LXI    D,1
  605.     MOV    A,M
  606.     CPI    CR
  607.     JZ    PLUSGO
  608.     CALL    HEXIN
  609. PLUSGO    LDA    CURSEC
  610.     INR    A
  611. ;
  612.     IF    STDCPM
  613.     CPI    27
  614.     ENDIF
  615. ;
  616.     IF    MICROP
  617.     CPI    33
  618.     ENDIF
  619. ;
  620.     IF    DIGDBL
  621.     CPI    59
  622.     ENDIF
  623. ;
  624.     IF    NSDBL
  625.     CPI    41
  626.     ENDIF
  627. ;
  628.     IF    TTDBL1
  629.     CPI    65
  630.     ENDIF
  631. ;
  632.     IF    MMDBL
  633.     CPI    53
  634.     ENDIF
  635. ;
  636.     JNZ    PLUSOK
  637.     LDA    CURTRK
  638.     INR    A
  639.     STA    CURTRK
  640.     MVI    A,1
  641. PLUSOK    STA    CURSEC
  642.     DCR    E
  643.     JNZ    PLUSGO
  644. PLUSMI    LDA    CURSEC
  645.     CALL    SETSEC
  646.     LDA    CURTRK
  647.     CALL    SETTRK
  648.     CALL    READ
  649.     JMP    CALCGRP
  650. ;
  651. MINUS    LXI    D,1
  652.     MOV    A,M
  653.     CPI    CR
  654.     JZ    MINGO
  655.     CALL    HEXIN
  656. MINGO    LDA    CURSEC
  657.     DCR    A
  658.     JNZ    MINOK
  659.     LDA    CURTRK
  660.     DCR    A
  661.     STA    CURTRK
  662. ;
  663.     IF    STDCPM
  664.     MVI    A,26
  665.     ENDIF
  666. ;
  667.     IF    MICROP
  668.     MVI    A,32
  669.     ENDIF
  670. ;
  671.     IF    DIGDBL
  672.     MVI    A,58
  673.     ENDIF
  674. ;
  675.     IF    NSDBL
  676.     MVI    A,40
  677.     ENDIF
  678. ;
  679.     IF    TTDBL1
  680.     MVI    A,64
  681.     ENDIF
  682. ;
  683.     IF    MMDBL
  684.     MVI    A,52
  685.     ENDIF
  686. ;
  687. MINOK    STA    CURSEC
  688.     DCR    E
  689.     JNZ    MINGO
  690.     JMP    PLUSMI
  691. ;
  692. INQ    LDA    CURTRK
  693.     CPI    2
  694.     JC    NOGRP
  695.     CALL    ILPRT
  696.     DB    'G=',0
  697.     LDA    GROUP
  698.     CALL    HEX
  699.     MVI    A,':'
  700.     CALL    TYPE
  701.     LDA    DISP
  702. ;
  703.     IF    STDCPM OR NSDBL
  704.     ORI    '0'
  705.     CALL    TYPE
  706.     ENDIF
  707. ;
  708.     IF    MICROP OR DIGDBL OR TTDBL1 OR MMDBL
  709.     CALL    HEX
  710.     ENDIF
  711. ;
  712.     MVI    A,','
  713.     CALL    TYPE
  714. NOGRP    CALL    ILPRT
  715.     DB    ' T=',0
  716.     LDA    CURTRK
  717.     CALL    HEX
  718.     CALL    ILPRT
  719.     DB    ', RS=',0    ;DISPLAY RELATIVE SECTOR #
  720.     LDA    CURSEC
  721.     CALL    HEX
  722.     CALL    ILPRT        ;DISPLAY PHYSICAL (MAPPED) SECTOR #
  723.     DB    ', PS=',0
  724.     LDA    MAPSEC
  725.     CALL    HEX
  726.     JMP    PROMPT
  727. ;
  728. CHG    MOV    A,M    ;GET TYPE (HEX, ASCII)
  729.     PUSH    PSW
  730.     INX    H
  731.     CALL    HEXIN
  732.     INX    H
  733.     CPI    ','
  734.     JNZ    WHAT
  735.     MOV    A,D
  736.     ORA    A
  737.     JNZ    WHAT
  738.     MOV    A,E
  739.     ORA    A
  740.     JM    WHAT
  741.     ORI    80H
  742.     MOV    E,A    ;POINT TO BUFFER
  743.     POP    PSW
  744.     CPI    'H'
  745.     JZ    CHGHEX
  746.     CPI    'A'
  747.     JNZ    WHAT
  748. ;CHANGE ASCII
  749. CHGALP    MOV    A,M
  750.     CPI    CR
  751.     JZ    PROMPT
  752.     LDAX    D
  753.     CPI    ' '
  754.     JC    CHGAHX
  755.     CPI    7FH
  756.     JNC    CHGAHX
  757.     JMP    CHGA2
  758. CHGAHX    MVI    A,'('
  759.     CALL    TYPE
  760.     LDAX    D
  761.     CALL    HEX
  762.     MVI    A,')'
  763. CHGA2    CALL    TYPE
  764.     MOV    A,M
  765.     STAX    D
  766.     INX    H
  767.     INR    E
  768.     JNZ    CHGALP
  769.     MOV    A,M
  770.     CPI    CR
  771.     JZ    PROMPT
  772.     JMP    WHAT
  773. ;
  774. ;CHANGE HEX
  775. CHGHEX    MOV    A,M
  776.     CPI    CR
  777.     JZ    PROMPT
  778.     PUSH    D
  779.     CALL    HEXIN
  780.     MOV    A,E
  781.     POP    D
  782.     PUSH    PSW
  783.     LDAX    D
  784.     CALL    HEX
  785.     POP    PSW
  786.     STAX    D
  787.     MOV    A,M
  788.     CPI    CR
  789.     JZ    PROMPT
  790.     CPI    ','
  791.     INX    H
  792.     INR    E
  793.     JNZ    CHGHEX
  794.     MOV    A,M
  795.     CPI    CR
  796.     JZ    PROMPT
  797.     JMP    WHAT
  798. ;
  799. DOREAD    CALL    READ
  800.     JMP    PROMPT
  801. ;
  802. DOWRITE    CALL    WRITE
  803.     JMP    PROMPT
  804. ;
  805. HEX    PUSH    PSW
  806.     RAR
  807.     RAR
  808.     RAR
  809.     RAR
  810.     CALL    NIBBL
  811.     POP    PSW
  812. NIBBL    ANI    0FH
  813.     CPI    10
  814.     JC    HEXNU
  815.     ADI    7
  816. HEXNU    ADI    '0'
  817.     JMP    TYPE
  818. ;
  819. SPACE    MVI    A,' '
  820.     JMP    TYPE
  821. ;
  822. ASTER    MVI    A,'*'
  823.     JMP    TYPE
  824. ;
  825. ILPRT    XTHL
  826. ILPLP    MOV    A,M
  827.     CALL    TYPE
  828.     INX    H
  829.     MOV    A,M
  830.     ORA    A
  831.     JNZ    ILPLP
  832.     INX    H
  833.     XTHL
  834.     RET
  835. ;
  836. HEXIN    LXI    D,0
  837. HINLP    MOV    A,M
  838.     CPI    CR
  839.     RZ
  840.     CPI    ','
  841.     RZ
  842.     CPI    '0'
  843.     JC    WHAT
  844.     CPI    '9'+1
  845.     JC    HINNUM
  846.     CPI    'A'
  847.     JC    WHAT
  848.     CPI    'F'+1
  849.     JNC    WHAT
  850.     SUI    7
  851. HINNUM    SUI    '0'
  852.     XCHG
  853.     DAD    H
  854.     DAD    H
  855.     DAD    H
  856.     DAD    H
  857.     ADD    L
  858.     MOV    L,A
  859.     XCHG
  860.     INX    H
  861.     JMP    HINLP
  862. ;
  863. RDBUF    CALL    ILPRT
  864.     DB    CR,LF,':',0
  865.     LXI    H,INBUF
  866.     MVI    B,0
  867. RDBLP    CALL    CONIN
  868.     CPI    'U'-40H
  869.     JZ    RDCTLU
  870.     CPI    CR
  871.     JZ    RDCR
  872.     CPI    8
  873.     JZ    RDBS
  874.     CPI    7FH
  875.     JZ    RDBS
  876.     CPI    'R'-40H
  877.     JZ    RDCTLR
  878.     MOV    M,A
  879.     INX    H
  880.     INR    B
  881.     CALL    TYPE
  882.     JMP    RDBLP
  883. ;
  884. RDCR    MOV    M,A
  885.     CALL    TYPE
  886.     MVI    A,LF
  887.     CALL    TYPE
  888.     RET
  889. ;
  890. RDBS    XRA    A
  891.     ORA    B
  892.     JZ    RDCTLU
  893.     DCX    H
  894.     DCR    B
  895.     MOV    A,M
  896.     CALL    TYPE
  897.     JMP    RDBLP
  898. ;
  899. RDCTLR    MVI    M,CR
  900.     CALL    CRLF
  901.     LXI    H,INBUF
  902.     MVI    B,0
  903. RDCRL    MOV    A,M
  904.     CPI    CR
  905.     JZ    RDBLP
  906.     CALL    TYPE
  907.     INR    B
  908.     INX    H
  909.     JMP    RDCRL
  910. ;
  911. RDCTLU    MVI    A,'^'
  912.     CALL    TYPE
  913.     MVI    A,'U'
  914.     CALL    TYPE
  915.     JMP    RDBUF
  916. ;
  917. CRLF    MVI    A,CR
  918.     CALL    TYPE
  919.     MVI    A,LF
  920.     JMP    TYPE
  921. ;
  922. CONST:    PUSH    B
  923.     PUSH    D
  924.     PUSH    H
  925. VCONST    CALL    $-$    ;MODIFIED BY INIT
  926.     POP    H
  927.     POP    D
  928.     POP    B
  929.     RET
  930. ;
  931. CONIN:    PUSH    B
  932.     PUSH    D
  933.     PUSH    H
  934. VCONIN    CALL    $-$    ;MODIFIED BY INIT
  935.     POP    H
  936.     POP    D
  937.     POP    B
  938.     RET
  939. ;
  940. TYPE:    PUSH    B
  941.     PUSH    D
  942.     PUSH    H
  943.     MOV    C,A    ;FOR CONOUT
  944. VCONOUT    CALL    $-$    ;MODIFIED BY INIT
  945.     POP    H
  946.     POP    D
  947.     POP    B
  948.     RET
  949. ;
  950. SETTRK    EQU    $
  951.     IF    STDCPM OR MICROP OR DIGDBL OR TTDBL1 OR MMDBL
  952.     CPI    77    ;TRAP OUT MORE THAN 77
  953.     ENDIF
  954. ;
  955.     IF    NSDBL
  956.     CPI    35    ;TRAP OUT MORE THAN 34
  957.     ENDIF
  958. ;
  959.     JC    SETTRK2
  960. ;
  961.     IF    STDCPM OR MICROP OR DIGDBL OR TTDBL1 OR MMDBL
  962.     MVI    A,76    ;77TH TRACK IS 76
  963.     ENDIF
  964. ;
  965.     IF    NSDBL
  966.     MVI    A,34    ;35TH TRACK IS 34
  967.     ENDIF
  968. ;
  969. SETTRK2    STA    CURTRK
  970.     PUSH    B
  971.     PUSH    D
  972.     PUSH    H
  973.     MOV    C,A
  974. VSETTRK    CALL    $-$    ;MODIFIED BY INIT
  975.     POP    H
  976.     POP    D
  977.     POP    B
  978.     RET
  979. ;
  980. SETSEC    PUSH    B
  981.     PUSH    D
  982.     PUSH    H
  983.     STA    CURSEC
  984.     MOV    C,A
  985.     LDA    CURTRK
  986.     CPI    2
  987.     JC    XSETSEC    ;DON'T SCRAMBLE TRK'S 0-1
  988.     LXI    H,SECTBL-1
  989.     MOV    A,C
  990.     ADD    L
  991.     MOV    L,A
  992.     MOV    A,H
  993.     ACI    0
  994.     MOV    H,A
  995.     MOV    C,M
  996. XSETSEC    MOV    A,C    ;REMEMBER MAPPED SECTOR # FOR INQ
  997.     STA    MAPSEC
  998. VSETSEC    CALL    $-$    ;MODIFIED BY INIT
  999.     POP    H
  1000.     POP    D
  1001.     POP    B
  1002.     RET
  1003. ;
  1004. READ:    PUSH    B
  1005.     PUSH    D
  1006.     PUSH    H
  1007.     MVI    A,1
  1008.     STA    WRFLG
  1009. VREAD    CALL    $-$    ;MODIFIED BY INIT
  1010.     POP    H
  1011.     POP    D
  1012.     POP    B
  1013.     RET
  1014. ;
  1015. WRITE:    LDA    WRFLG
  1016.     ORA    A
  1017.     JNZ    WRITE2
  1018.     CALL    ILPRT
  1019.     DB    '++CANNOT WRITE UNLESS READ ISSUED'
  1020.     DB    CR,LF,0
  1021.     JMP    EXPL
  1022. ;
  1023. WRITE2    PUSH    B
  1024.     PUSH    D
  1025.     PUSH    H
  1026. VWRITE    CALL    $-$    ;MODIFIED BY INIT
  1027.     POP    H
  1028.     POP    D
  1029.     POP    B
  1030.     RET
  1031.     IF    STDCPM
  1032. SECTBL    DB    1,7,13,19,25,5,11,17,23,3,09,15,21
  1033.     DB    2,8,14,20,26,6,12,18,24,4,10,16,22
  1034.     ENDIF
  1035.     IF    MICROP
  1036. SECTBL    DB    1,2,11,12,21,22,31,32,9,10,19,20,29,30,7,8
  1037.     DB    17,18,27,28,5,6,15,16,25,26,3,4,13,14,23,24
  1038.     ENDIF
  1039.     IF    DIGDBL
  1040. SECTBL    DB    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
  1041.     DB    19,20,21,22,23,24,25,26,27,28,29,30,31,32,33
  1042.     DB    34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
  1043.     DB    49,50,51,52,53,54,55,56,57,58
  1044.     ENDIF
  1045. ;
  1046.     IF    NSDBL
  1047. SECTBL    DB    1,2,3,4,21,22,23,24,5,6,7,8,25,26,27,28
  1048.     DB    9,10,11,12,29,30,31,32,13,14,15,16
  1049.     DB    33,34,35,36,17,18,19,20,37,38,39,40
  1050.     ENDIF
  1051. ;
  1052.     IF    TTDBL1
  1053. SECTBL    DB    1,2,3,4,5,6,7,8
  1054.     DB    25,26,27,28,29,30,31,32
  1055.     DB    49,50,51,52,53,54,55,56
  1056.     DB    9,10,11,12,13,14,15,16
  1057.     DB    33,34,35,36,37,38,39,40
  1058.     DB    57,58,59,60,61,62,63,64
  1059.     DB    17,18,19,20,21,22,23,24
  1060.     DB    41,42,43,44,45,46,47,48
  1061.     ENDIF
  1062. ;
  1063.     IF    MMDBL
  1064. SECTBL    DB    1,14,27,40,10,23,36,49,6,19,32,45,2,15,28,41
  1065.     DB    11,24,37,50,7,20,33,46,3,16,29,42,12,25,38,51
  1066.     DB    8,21,34,47,4,17,30,43,13,26,39,52,9,22,35,48
  1067.     DB    5,18,31,44
  1068.     ENDIF
  1069. ;
  1070. GROUP    DB    0
  1071. DISP    DB    0
  1072. CURTRK    DB    0
  1073. CURSEC    DB    1
  1074. MAPSEC    DB    1
  1075. WRFLG    DB    0    ;MAY NOT WRITE UNTIL '+', '-',
  1076. ;             OR 'G' COMMAND
  1077.     DS    60    ;ROOM FOR STACK
  1078. STACK:    EQU    $
  1079. INBUF    DS    128
  1080. ;
  1081. FCB    EQU    5CH
  1082. BDOS    EQU    5
  1083. RESETDK    EQU    13
  1084. SELDK    EQU    14
  1085. SEARCHF    EQU    17
  1086.     END    100H
  1087.  
  1088. YG !7w═$2w>)═à(═7Y*}wσ!cw
  1089. ═->2ew2dw:w■ß╩╧=σ═/%═h%W !Ww
  1090. ═$═ç?ß┌Ö=═æ(├╒=╘½:lw╖╩Φ=:cw╖⌡╠±;±─≈;*ew"gw═╟>═æ5!
  1091. {═h;═->╥>