home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / z80macro.lbr / DRIVE.ZZZ / DRIVE.AZM
Encoding:
Text File  |  1993-10-25  |  2.8 KB  |  177 lines

  1. ;    DRIVE.AZM    displays disk parameters
  2. ;    ref: "Mastering CP/M" by Alan R. Miller, p. 283
  3. ;    Rich Brewster, R.D. 1, Brackney, PA 18812
  4. ;
  5. *LIST OFF
  6. *INCLUDE Z80MACRO.LIB
  7. *INCLUDE MRFLAGS.H
  8. *MACLIST OFF
  9. *LIST ON
  10. ;
  11.     ORG    TPA
  12. ;
  13. START:
  14.     ENTER
  15.     VERSN    '06/24 22:49.09.DRIVE'
  16.     CPMVER
  17.     CP    20H
  18.     JP    C,ERRVER    ;wrong CP/M version
  19.     LD    A,(FCB1)
  20.     OR    A        ;drive spec?
  21.     CALL    NZ,SETDSK    ;yes
  22.     CALL    GETDP        ;disk parameters
  23.     CALL    XAMINE
  24.     JP    DONE
  25. ;
  26. ; Block move disk parameters to end of program.
  27. ;
  28. GETDP:
  29.     LD    C,31        ;Func 31: get parameters address
  30.     CALL    BDOS
  31.     LD    DE,DPARM
  32.     LD    BC,15
  33.     LDIR            ;move the parameter block
  34. ;
  35. ; Correct values for printing.
  36. ;
  37.     LD    HL,(DSM)    ;maximum number of blocks
  38.     INC    HL
  39.     LD    (DSM),HL
  40. ;
  41.     LD    HL,(AL0)    ;reverse the bytes in block allocation
  42.     LD    A,L
  43.     LD    L,H
  44.     LD    H,A
  45.     LD    (AL0),HL
  46. ;
  47.     XOR    A        ;zero A
  48. XAM3:
  49.     ADD    HL,HL        ;shift left
  50.     JR    NC,XAM4
  51.     INC    A
  52.     JR    XAM3
  53. XAM4:
  54.     LD    E,A        ;number of dir blocks
  55.     LD    D,0
  56.     LD    HL,(DSM)
  57.     OR    A        ;clear carry
  58.     SBC    HL,DE        ;deduct the directory blocks
  59.     LD    (NETBLK),HL
  60.     LD    A,E
  61.     OR    '0'        ;ASCII bias
  62.     LD    (ALLOCA),A    ;save
  63.     RET
  64. ;
  65. XAMINE:
  66.     CRLF
  67.     PRINT    'Sectors per track: '
  68.     LD    HL,(SPT)
  69.     HLDEC
  70.     PRINT    ' ('
  71.     OUTHL
  72.     PRINT    ' Hex)'
  73. ;
  74.     CRLF
  75.     PRINT    'Sectors per block: '
  76.     LD    A,(BLM)
  77.     INC    A
  78.     LD    L,A
  79.     LD    H,0
  80.     HLDEC
  81.     PRINT    ' ('
  82.     OUTHEX    L
  83.     PRINT    ' Hex)'
  84.     CRLF
  85.     PRINT    'Block size: '
  86.     DIVIDE    8
  87.     LD    B,L
  88.     HLDEC
  89.     PRINT    'K Bytes'
  90.     LD    HL,(NETBLK)
  91.     LD    A,B
  92.     MULT    0
  93.     CRLF
  94.     PRINT    'Disk size: '
  95.     HLDEC
  96.     PRINT    'K Bytes'
  97. ;
  98.     CRLF
  99.     PRINT    'Number of blocks: '
  100.     LD    HL,(DSM)
  101.     HLDEC
  102.     PRINT    ' ('
  103.     OUTHL
  104.     PRINT    ' Hex)'
  105. ;
  106.     CRLF
  107.     PRINT    'Directory entries: '
  108.     LD    HL,(DRM)
  109.     INC    HL
  110.     HLDEC
  111.     PRINT    ' ('
  112.     OUTHL
  113.     PRINT    ' Hex)'
  114. ;
  115.     CRLF
  116.     PRINT    'Extents per entry: '
  117.     LD    A,(EXM)
  118.     INC    A
  119.     LD    L,A
  120.     LD    H,0
  121.     HLDEC
  122. ;
  123.     CRLF
  124.     PRINT    'Directory blocks: '
  125.     LD    A,(ALLOCA)
  126.     PCHAR
  127.     PRINT    ' ('
  128.     LD    A,(AL1)
  129.     OUTBIN
  130.     LD    A,(AL0)
  131.     OR    A
  132.     JR    Z,XAM2
  133.     OUTBIN
  134. XAM2:
  135.     LD    A,')'
  136.     PCHAR
  137.     CRLF
  138.     PRINT    'Track offset: '
  139.     LD    HL,(OFF)
  140.     HLDEC
  141.     LD    A,H
  142.     OR    A
  143.     JR    Z,XAM5
  144.     PRINT    ' ('
  145.     OUTHL
  146.     PRINT    ' Hex'
  147. XAM5:
  148.     CRLF
  149.     RET
  150. SETDSK:
  151.     DEC    A
  152.     LD    E,A
  153.     LD    C,14        ;function 14: select disk
  154.     JP    BDOS
  155. ERRVER:
  156.     PRINT    'DRIVE requires CP/M version 2.0 or greater.'
  157. DONE:
  158.     EXIT    1        ;return to CCP
  159. ;
  160. DPARM:                ;copy of disk parameters here
  161. ;
  162. SPT:    DW    0        ;sectors per track
  163. BSH:    DB    0        ;block shift
  164. BLM:    DB    0        ;block mask
  165. EXM:    DB    0        ;extent mask
  166. DSM:    DW    0        ;maximum number of blocks
  167. DRM:    DW    0        ;maximum number of directory entries
  168. AL0:    DB    0        ;directory block allocation
  169. AL1:    DB    0        ;directory block allocation
  170. CKS:    DW    0        ;check size
  171. OFF:    DW    0        ;track offset
  172. ;
  173. NETBLK:    DW    0        ;net number of data blocks
  174. ALLOCA:    DB    0        ;directory blocks
  175. ;
  176.     END    START
  177.