Was there ever a utility that would let you create disks of varying sizes?
There are several utilities that allow you to access and create Floppy's, and
Images of floppy's which are external to your CP/M system. The three I use are
22DISK by SYDEX, cpmtools, and libdsk (cpmtools built with libdsk). I'm sure there are others, but for my use these Software packages do the job.
So, my question is can anyone help me or give me some clues on how I can go about making this change?
Download the "CPM_2.2_Alteration_Guide_1979.pdf" which will describe the DPB
and also lead you through the process of altering your system.
If you want to know what your system's DPB Information is, you can boot it and
use DDT to display the DPB's HEX Bytes. This information should also be in your
System's source code files.
STAT A: DSK: - Gives some detailed disk information for A:.
STAT B: DSK: - Gives some detailed disk information for B:.
If you have a functional CP/M system, you can use DDT to find the Disk Parameter Block Address, the Allocation Address, along with the information stored there for the logged floppy drive.
1. Log the floppy drive you wish to locate the DPB data for. I will use A: for this example
2. Run DDT and enter the code below:
A: <Carriage RETURN>
DDT
-f0100,0200,00 #fill memory with zero's
-A0100 #assemble program at 0100
0100 mvi c,0f #0f in C for Open file
0102 lxi d,005c #FCB in reg DE
0105 call 5 #call BDOS
0108 rst 7 #back to DDT
0109 mvi c,1b #1B in C for Get Allocation Address
010B call 5 #call BDOS
010E rst 7 #back to DDT
010F mvi c,1F #get disk parameter address
0111 call 5 #HL will contain the address
0114 rst 7 #back to DDT
0115 nop #
0016 . #type PERIOD to EXIT Assembler
-d0100 #display memory at 0100
0100 0e0f115c00cd0500FF0E1BCD0500FF0E1FCD0500FF
-g0100 #execute program
*108 #program exits here after file search
-g0109 #execute programs
*010E #program exits here with Allocation Address
-g010F #execute programs
*0114 #program exits here with Disk Parameter Address
-xH #display DPB that is in reg HL
#<CR> will exit register modify
#CNTL C will exit DDT and save 1 test101.ddt will save the file
#save n
filename.com saves 1 256 byte block of data.
The contents of register HL is the address of Drive A: DPB. If you display that address (mine was
F5E3) you will see F5E3: 2400040F0154007F00C00020000200.
The Disk Parameter Block (DPB) for each drive is:
+-----+------+-------+-------+-------+-------+------+------+------+-----+
|SPT.|BSH..|BLM..|EXM..|DSM.. |DRM.|AL0..|AL1..|CKS..|OFF.|
+-----+------+-------+-------+-------+-------+------+------+------+-----+
16B 8B 8B 8B 16B 16B 8B 8B 16B 16B
RPT = 0024 = The number of 128 byte records per track.
BSH = 04 = The block shift count.
BLM = 0F = The block mask.
EXM = 01 = The extent mask.
DSM = 0054 = Disk storage maximum (the largest block number).
DRM = 007F = Directory maximum (the largest directory entry).
DAB = C000= Directory Allocation Block AL0: = C0 & AL1: = 00
CKS = 0020 = Directory check size.
OFF = 0002 = Track offset (number of reserved tracks).
SPT: Number of sectors per track. May differ from RPT if physical sectors are other than
128 bytes in size.
SSZ: Sector size code:
0 = 128 bytes per sector
1 = 256 bytes per sector
2 = 512 bytes per sector
3 = 1024 bytes per sector
Larry