home *** CD-ROM | disk | FTP | other *** search
- ; DRIVE.AZM displays disk parameters
- ; ref: "Mastering CP/M" by Alan R. Miller, p. 283
- ; Rich Brewster, R.D. 1, Brackney, PA 18812
- ;
- *LIST OFF
- *INCLUDE Z80MACRO.LIB
- *INCLUDE MRFLAGS.H
- *MACLIST OFF
- *LIST ON
- ;
- ORG TPA
- ;
- START:
- ENTER
- VERSN '06/24 22:49.09.DRIVE'
- CPMVER
- CP 20H
- JP C,ERRVER ;wrong CP/M version
- LD A,(FCB1)
- OR A ;drive spec?
- CALL NZ,SETDSK ;yes
- CALL GETDP ;disk parameters
- CALL XAMINE
- JP DONE
- ;
- ; Block move disk parameters to end of program.
- ;
- GETDP:
- LD C,31 ;Func 31: get parameters address
- CALL BDOS
- LD DE,DPARM
- LD BC,15
- LDIR ;move the parameter block
- ;
- ; Correct values for printing.
- ;
- LD HL,(DSM) ;maximum number of blocks
- INC HL
- LD (DSM),HL
- ;
- LD HL,(AL0) ;reverse the bytes in block allocation
- LD A,L
- LD L,H
- LD H,A
- LD (AL0),HL
- ;
- XOR A ;zero A
- XAM3:
- ADD HL,HL ;shift left
- JR NC,XAM4
- INC A
- JR XAM3
- XAM4:
- LD E,A ;number of dir blocks
- LD D,0
- LD HL,(DSM)
- OR A ;clear carry
- SBC HL,DE ;deduct the directory blocks
- LD (NETBLK),HL
- LD A,E
- OR '0' ;ASCII bias
- LD (ALLOCA),A ;save
- RET
- ;
- XAMINE:
- CRLF
- PRINT 'Sectors per track: '
- LD HL,(SPT)
- HLDEC
- PRINT ' ('
- OUTHL
- PRINT ' Hex)'
- ;
- CRLF
- PRINT 'Sectors per block: '
- LD A,(BLM)
- INC A
- LD L,A
- LD H,0
- HLDEC
- PRINT ' ('
- OUTHEX L
- PRINT ' Hex)'
- CRLF
- PRINT 'Block size: '
- DIVIDE 8
- LD B,L
- HLDEC
- PRINT 'K Bytes'
- LD HL,(NETBLK)
- LD A,B
- MULT 0
- CRLF
- PRINT 'Disk size: '
- HLDEC
- PRINT 'K Bytes'
- ;
- CRLF
- PRINT 'Number of blocks: '
- LD HL,(DSM)
- HLDEC
- PRINT ' ('
- OUTHL
- PRINT ' Hex)'
- ;
- CRLF
- PRINT 'Directory entries: '
- LD HL,(DRM)
- INC HL
- HLDEC
- PRINT ' ('
- OUTHL
- PRINT ' Hex)'
- ;
- CRLF
- PRINT 'Extents per entry: '
- LD A,(EXM)
- INC A
- LD L,A
- LD H,0
- HLDEC
- ;
- CRLF
- PRINT 'Directory blocks: '
- LD A,(ALLOCA)
- PCHAR
- PRINT ' ('
- LD A,(AL1)
- OUTBIN
- LD A,(AL0)
- OR A
- JR Z,XAM2
- OUTBIN
- XAM2:
- LD A,')'
- PCHAR
- CRLF
- PRINT 'Track offset: '
- LD HL,(OFF)
- HLDEC
- LD A,H
- OR A
- JR Z,XAM5
- PRINT ' ('
- OUTHL
- PRINT ' Hex'
- XAM5:
- CRLF
- RET
- SETDSK:
- DEC A
- LD E,A
- LD C,14 ;function 14: select disk
- JP BDOS
- ERRVER:
- PRINT 'DRIVE requires CP/M version 2.0 or greater.'
- DONE:
- EXIT 1 ;return to CCP
- ;
- DPARM: ;copy of disk parameters here
- ;
- SPT: DW 0 ;sectors per track
- BSH: DB 0 ;block shift
- BLM: DB 0 ;block mask
- EXM: DB 0 ;extent mask
- DSM: DW 0 ;maximum number of blocks
- DRM: DW 0 ;maximum number of directory entries
- AL0: DB 0 ;directory block allocation
- AL1: DB 0 ;directory block allocation
- CKS: DW 0 ;check size
- OFF: DW 0 ;track offset
- ;
- NETBLK: DW 0 ;net number of data blocks
- ALLOCA: DB 0 ;directory blocks
- ;
- END START
-