home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol009 / du-10-26.asm < prev    next >
Assembly Source File  |  1984-04-29  |  18KB  |  1,238 lines

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