Page Menu:



How to Quickly Initialize a Model I-III Hard Drive

Ken Brookner had prepared a guide called “What You Really Need To Know Quick To Init a Model I/III Hard Drive. You can download that guide here.



Determining Hard Drive Geometry from CONFIG/SYS

Tim Mann, author of XTRS and the OG Catweasel Utilties was kind enough to document how to go about determining the drive geometry of a hard drive based on the CONFIG/SYS file found on LS-DOS v6.

First, export the CONFIG/SYS file to your computer. You can do this with XTRS’s “EXPORT” utility or with Matthew Reed’s TRSTOOLS. If you are doing this inside an emulator, LS-DOS will likely not boot without the hard drive attached, so you need to press the virtual CLEAR key at just the right time during the LS-DOS boot process.

You then need to find the DCT in the CONFIG/SYS file. It gets loaded at 4300H instead of 0470H where the DCT$ is supposed to be, probably so as not to overwrite the DCT that’s actually in use based on boot disk.

Next you need to parse the CONFIG/SYS. Tim used the “cmddump” utility that comes with xtrs to parse it. It’s in /CMD (load module) format. Tim ran cmddump config.sys once with no flags, to see what the highest memory address used was — it was 0x434f. In Windows you can use George Phillips’ utility trld with a command line of trld -d config.sys.

Tim then used “cmddump config.sys config.mem 0 0x4350” to get a raw memory image of the part of memory that config/sys loads into (actually he used 0x434F, but that was a mistake since it cut off the last byte). For those using Windows, that will give you the hex dump. For those on Linux you need to use Linux’s “hd” to get a hex dump of that memory to work from.

Using a disk I gave Tim as an example, he found the DCT to read as follows (color added):

00004300   c3 f4 0f 0c 90 00 98 bf   bf 4c c3 f4 0f 0c 38 00   |.........L....8.|
00004310   98 7f 7f 4c c3 f4 0f 0c   38 99 99 7f 7f 4d c3 f4   |...L....8....M..|
00004320   0f 0c 10 99 98 bf bf 4c   c3 3d 0e 54 61 04 27 11   |.......L.=.Ta.'.|
00004330   45 14 c3 3d 0e 44 42 00   27 11 45 14 c3 3d 0e 44   |E..=.DB.'.E..=.D|
00004340   64 14 27 11 45 14 c3 3d   0e 44 68 28 4f 11 45      |d.'.E..=.Dh(O.E|

Decoding the first set (meaning Drive 0) by hand:

C3 : DCT+0: C3=Drive enabled / C9 = Drive disabled.

F4 0F : DCT+1,2: This is the address of the hard disk driver.

0C: DCT+3: 0C is 00001100 in decimal so:

Bits 0-1: 00 = Drive 0

Bit 2: 1 = Not removable

Bit 3: 1 = Hard Drive

Bit 4: 0 = Side Select 0

Bit 5: 0 = 5.25″ Drive

Bit 6: 0 = Single Density

Bit 7: 0 = Not Write Protected.

90: DCT+4: 90 is 10010000 in binary so:

Bits 0-3: 0000 = Starting Head # 0

Bit 4: 1 = “Controller does not return index pulses in its status register”

Bit 5: 0 = DBLBIT = 0, so one logical cylinder = one physical cylinder

Bit 6: 0 = “Controller is NOT capable of double density operation”

Bit 7: 1 = “No @CKDRV will be performed by @OPEN when accessing that drive”.

00: DCT+5: DCT+5 is not regularly used for Hard Drives.

98: DCT+6: 98H is 152 in decimal. Since Since DBLBIT=0, this means that the highest numbered logical cylinder on the drive is 152 in decimal (for total of 153 tracks).

BF: DCT+7. BFH is 10111111 in binary.

Bits 4-0: Highest numbered sector on a track numbered relative from zero. Bits 4-0 are 11111 (Decimal: 31) for 32 sectors per track.

Bits 7-5: Number of heads assigned to the logical partition. Bits 7-5 are 101 (Decimal: 5), so there are 6 heads for this logical partition.

BF: DCT+8. BFH is 10111111 in binary.

Bits 4-0: Sectors per granule. Bits 4-0 are 11111 (Decimal: 31) for 32 sectors per granule.

Bits 7-5: Granules per track. Bits 7-5 are 101 (Decimal: 5), so since DBLBIT=0, there are 6 granules per track.

4C: DCT+9. 4CH is 76 in decimal. Since DBLBIT=0, this means that the directory is on logical cylinder 76.

Decoding the entire DCT then gives us:

Drive :0
Hard drive, not removable, DBLBIT = 0, starting head number 0, drive unit address 0, starting logical cylinder 0, 153 logical cylinders, 6 heads, 32 sectors per track, 6 granules per physical cylinder, 32 sectors per granule, directory on logical cylinder 76.
Drive :1
Hard drive, not removable, DBLBIT = 1, starting head number 0, drive unit address 1, starting logical cylinder 0, 153 logical cylinders, 4 heads, 32 sectors per track, 4 granules per physical cylinder, 32 sectors per granule, directory on logical cylinder 76.
Drive :2
Hard drive, not removable, DBLBIT = 1, starting head number 0, drive unit address 1, starting logical cylinder 153, 154 logical cylinders, 4 heads, 32 sectors per track, 4 granules per physical cylinder, 32 sectors per granule, directory on logical cylinder 77.
Drive :3
Hard drive, not removable, DBLBIT = 0, starting head number 0, drive unit address 0, starting logical cylinder 153, 153 logical cylinders, 6 heads, 32 sectors per track, 6 granules per physical cylinder, 32 sectors per granule, directory on logical cylinder 76.
Drive :4
Floppy, 5″, physical address 1
Drive :5
Floppy, 5″, physical address 2
Drive :6
Floppy, 5″, physical address 4
Drive :7
Floppy, 5″, physical address 8
Note: DBLBIT = 1 means there are two physical cylinders per logical cylinder; DBLBIT = 0 means one physical per logical.


The below is more detailed information about the Drive Control Table record assigned to a hard drive partition taken from RSHARD – Hard Disk Driver Package and “The Programmer’s Guide to TRSDOS Version 6”.

DCT+3
This field contains a series of sub-field parameters associated with the disk drive specifications. The field is encoded as follows:
Bits 1-0
This subfield is used for different purposes depending on whether the drive associated with the DCT is a floppy drive or a hard drive.
  • Floppy: The field contains the step rate specification code (0-3) for the floppy disk controller. With a Western Digital 179X FDC or equivalent, the codes correspond to a step rate of 6, 12, 20, and 30ms at an FDC clock speed of 1 MHz and 3, 6, 10, and 15ms at an FDC clock speed of 2 MHz.
  • Hard Drive: This field is usually associated with the drive select code of the hard disk drive (binary value 0-3).
Bit 2
This subfield is used for different purposes depending on whether the drive associated with the DCT is a floppy drive or a hard drive.
  • Floppy: This bit is set by the system to indicate the minimum time delay required after selecting a floppy disk drive whose motors are not currently running. It must be used by floppy disk drivers to adjust their time delay between selection of the floppy drive and the first poll of the status register. A “1” value indicates the minimum delay to be 0.5 seconds while a “0” value indicates the delay to be 1.0 seconds. The time delay can be introduced via a request of the @PAUSE SuperVisor Call with an appropriate count..
  • Hard Drive: This bit is RESET if the drive is a REMOVABLE cartridge.
Bit 3
Is the logical drive a hard drive? If this bit is set to a “1”, it indicates that the DCT position is associated with a hard drive (Winchester). A “0” in this bit position indicates a floppy disk drive is associated with the DCT position. The bit is used by the system in informative messages by such things as DEVICE displays, DIRectory displays, and FREE displays. In addition, the system’s @CKDRV routine uses this bit to inhibit its automatic logging of a hard drive while it restricts its checking to write protect status only.
Bit 4
This bit is used to store the side selection number for a current access of a diskette. It is a storage area usable by the disk driver to place the side number calculated from the relative sector passed in the disk primitive request. The system passes a relative sector number based upon the number of sectors per cylinder. On a two-headed floppy disk drive, by dividing the relative sector number by the number of sectors per track, the result will be indicative of the side selection number, 0 or 1. The routine performing the calculation can then place the result in this bit of the DCT for the use of the drive selection routine. The bit value will match the side indicator bit in the sector header as written by the FDC. Hard disk drivers will use storage space internal to the driver to hold such a result.
Bit 5
If this bit is set to a “1”, the drive associated with the DCT position is an 8″ drive. This bit will be a “0” if the drive associated with the DCT position is a 5-1/4″ drive. This bit is initially set by whatever installs the disk driver (see the FLOPPY/DCT utility). In the installation of a hard disk driver, this bit should be set according to the size of the hard drive – 5″ or 8″. In the case of floppy drives, the system formatter will use this bit to adjust its formatting data to 5″ or 8″. It is also used to adjust informative messages as mentioned under bit-6.
Bit 6
This subfield is used for different purposes depending on whether the drive associated with the DCT is a floppy drive or a hard drive.
  • Floppy: If set to a “1”, it indicates that the floppy diskette currently being accessed is formatted in double density. If set to a “0” it indicates that the diskette is single density. The disk driver is responsible for maintaining this bit by recognizing the density of the disk it is accessing. The bit is used both by the driver in the drive selection process and by the system in informative messages by such things as DEVICE displays, DIRectory displays, and FREE displays.
  • Hard Drive: This bit is not referenced by the system.
Bit 7
Set to 1 will indicate the disk device is “software” write protected. It is the responsibility of the disk driver to check this bit on any disk primitive that references a WRITE operation (i.e. write sector, write system sector, format track, or format device) and return a “Write protected disk” error code (error 15) if set.
DCT+4
This byte contains additional drive specifications and parameters. The field is encoded as follows:
Bits 3-0
This subfield is used for different purposes depending on whether the drive associated with the DCT is a floppy drive or a hard drive.
  • Floppy: The field contains the physical drive address (1, 2, 4, or 8) corresponding to the drive select line (DS0, DS1, DS2, or DS3). Thus, only one of the four bits will ever be set.
  • Hard Drive: Hard drive installations that partition a drive by head, may use this field to indicate the relative starting head number of the logical drive partition. This provides support for a drive of up to 16 heads although 4 heads is typical. Bit 3 contains the drive address. Bits 2-0 contains the starting head number, counting from zero. Bits 1-0 contains the number of the starting cylinder for the logical partition, noting that if DBLBIT is set, this number represents half the actual value.
Bit 4
Short Version: This bit is set to indicate that the controller does not supply an index pulse indication to the disk driver on each rotation of the drive surface. Longer Version: This bit is used to indicate the controller associated with the DCT position is an “alien” controller. The term, “alien”, refers to a controller that does not return index pulses in its status register. The system uses index pulse transitions in a finite time period (usually 0.5 seconds) to detect the presence of a rotating diskette. If a disk drive does not contain a diskette, or does but the drive door is open, the status obtained on continuous selection of the drive will not indicate the presence of any index pulse transitions. By examining the state of the index pulse over a period of time corresponding to 2.5 possible rotations of a disk, the lack of an OFF-ON-OFF transition state will indicate that the drive is not available. If a controller does not return the state of an index pulse in the controller status byte, then the system will never be able to detect the availability of the drive if it maintains the state transition examination in the logging process. This bit should be set when such controllers are used to inhibit the @CKDRV routine from performing such an examination and proceed to the configuration logging.
Bit 5
This bit is used for different purposes depending on whether the drive associated with the DCT is a floppy drive or a hard drive.
  • Floppy: A “1” indicates that the diskette currently mounted in the drive is a two sided diskette while a “0” indicates that the diskette is a single-sided diskette. This bit is updated whenever the disk is logged by the system or whenever a program invokes the @CKDRV SuperVisor Call. Note that if a dual sided diskette is placed into a two-headed disk drive that previously accessed a single-sided diskette, the system will not recognize the second side of the new diskette until the logging process.
  • Hard Drive: Also known as the “DBLBIT” bit, this bit may be used to indicate that a logical cylinder represents two physical cylinders thereby providing support for twice as many cylinders as limited by the Granule Allocation Table (the GAT limits the number of logical cylinders to 203 – thus by using this bit, hard drives to 406 cylinders can be supported as a single logical drive). This bit will be SET if you requested more than 203 cylinders for a single logical drive.
Bit 6
This bit is used as a flag to the formatter. If set to a “1”, it indicates that the controller is capable of double density operation. In this case, the formatter defaults to double density formatting unless the user overrides the default. If set to a “0”, the formatter will default to single density formatting. For controllers capable of double density operation, this bit is usually set.
Bit 7
Effective with 6.2, this bit is used to inhibit @CKDRV . If set to a “1”, no @CKDRV will be performed by @OPEN when accessing that drive.
DCT+5
Also known as “CURCYL”, this field is used for different purposes depending on whether the drive associated with the DCT is a floppy drive or a hard drive. For floppies, the field is used by the disk driver to store the current cylinder position of the disk drive assigned to the DCT position. Since a Floppy Disk controller is used to access up to four different drives, when it accesses a drive, its track register must be loaded with correct information as to the current track position of the head. The current cylinder position is maintained by the disk driver in this storage field. The driver can then be use this field to reload the FDC track register prior to a seek operation and update the field to the cylinder requested in the seek. Hard disk controllers generally contain their own internal track register that is not accessible to a software driver. This means that hard disk drivers do not need to maintain the current cylinder position in this field. The field is thus available for the storage of other data items as required by the hard disk driver. Other data items may include the total quantity of heads on the physical drive (as needed by XEBEC controllers), the complex drive select code (as used by Lobo Drives UniVersal Controller), or data associated with drive partitioning by cylinder rather than by head.
  • Floppy: The field is used by the disk driver to store the current cylinder position of the disk drive assigned to the DCT position. Since a Floppy Disk controller is used to access up to four different drives, when it accesses a drive, its track register must be loaded with correct information as to the current track position of the head. The current cylinder position is maintained by the disk driver in this storage field. The driver can then be use this field to reload the FDC track register prior to a seek operation and update the field to the cylinder requested in the seek.
  • Hard Drive: Hard disk controllers generally contain their own internal track register that is not accessible to a software driver. This means that hard disk drivers do not need to maintain the current cylinder position in this field. The field is thus available for the storage of other data items as required by the hard disk driver. Other data items may include the total quantity of heads on the physical drive (as needed by XEBEC controllers), the complex drive select code (as used by Lobo Drives UniVersal Controller), or data associated with drive partitioning by cylinder rather than by head.
DCT+6
Also known as “MAXCYL,” this field contains the highest numbered logical cylinder on the drive referenced from a starting cylinder numbered “0”. Thus, a 35-cylinder drive would be entered as X’22’, a 40-cylinder drive as X’27’, and an 80-cylinder drive as X’4F’. A typical 153-cylinder ST506 compatible winchester drive would have an entry of X’98’. If a hard drive has more than 203 cylinders but less than 407 cylinders and is to be maintained as a single drive (or one partitioned by heads), then the system must access it as if each two physical cylinders were a single cylinder with twice as much capacity (although the system will still limit the logical cylinder to not exceed 256 sectors). In that case, the MAXCYL entry will be half of the actual quantity and bit-5 of the FLAG-2 field will be set. For example, an SA-1000 drive (8″ winchester) has 256 cylinders, four surfaces, and 32 sectors per track. If this drive is treated as a single volume (no partitioning), the MAXCYL entry is X’7F’ indicating the highest numbered cylinder is 127 (128 cylinders). The DBLBIT bit is set indicating a logical cylinder is composed of two physical cylinders. Another description is that this field contains the highest numbered logical cylinder on the partition. This number is relative – it references the actual number of cylinders assigned to the partition and is counted from zero. If the DBLBIT is set, the number of physical cylinders assigned is twice this number.
DCT+7
This is the first of a two-byte field containing information concerning the physical space parameters of the disk drive and how space is allocated per cylinder.
Bits 4-0
This subfield contains the highest numbered sector on a track numbered relative from zero. A ten-sector-per-track drive would show an X’09’ entry. A 32-sector-per-track hard drive would show an X’1F’.
Bits 7-5
This subfield contains the number of heads (surfaces) assigned to the logical partition of a hard disk drive. In the case of floppy disk drives, this entry should be a B’000′. For example, a four-head hard drive with a two-head partition would have a B’001′ in this subfield. The entry is zero relative, thus a one-head partition is B’000′, a two-head partition would be B’001′, and an eight-head partition would be B’111′.
DCT+8
This is the second of a two-byte field containing information concerning the physical space parameters of the disk drive and how space is allocated per cylinder.
Bits 4-0
This field contains the number of sectors per granule that is used in the configuration of the disk. In the case of floppy disk drives, this figure is standardized for 5-1/4″ and 8″ media. Hard disk drive granule sizes are assigned by the implementor of the hard disk drive system. The initialization program will always attempt to minimize this value. For example, 32 sectors per cylinder (SPC) drives use 4-sector granules (1K), 64 SPC drives use 2K granules, 96 SPC use 3K, 128 SPC use 4K, 256 SPC use 8K granules.
Bits 7-5
This subfield contains the number of granules per track allocated to the disk drive according to the number of sectors per granule. Since the field is 3-bits in length, the entry is offset from zero. Thus, one granule per track is entered as B’000′, two as B’001′, etc. In the case of floppy disk drives, this figure is standardized for 5-1/4″ and 8″ media. If the DCT is associated with a hard drive, then the figure entered here refers to the number of granules in a physical cylinder according to the number of surfaces. If the DBLBIT bit is set, this entry then represents half of the granules on a logical cylinder. The total granules per logical cylinder is computed by the doubling the value contained in this field if bit-5 of DCT FLAG-2 is set. Let’s illustrate this again using the SA-1000 drive. If we configure the drive as a single volume with 16 sectors per granule, a physical track has two granules per track. Since the drive has four surfaces, a physical cylinder has eight granules. However, since the DBLBIT bit must be set to indicate double the 128 cylinders shown in the MAXCYL field, the system would have to double the granules per cylinder computing 16 GPC. This is clearly in violation of the system’s upper limit of eight granules per cylinder maximum. Therefore, our example SA-1000 drive would be configured with 32 sectors per granule, one granule per track, four granules per physical cylinder. The DBLBIT bit would provide eight logical granules per logical cylinder. Therefore, this subfield would have an entry to indicate four granules. The initialization program will attempt to allocate all eight granules per logical drive. It does this by dividing the total number of sectors per logical cylinder by eight with the resulting value used as the number of sectors per granule.
DCT+9
Also known as “DIRCYL,” this field contains the logical cylinder number where the directory is located. If the DBLBIT is set, then this number is actually half the physical number. For any directory access, the system will use the contents of this field as a pointer to the cylinder containing the disk’s directory. The system attempts to maintain the integrity of this field by using the status returned when the driver reads a system sector in contrast to a non-system sector. If the system expects to be reading a directory sector but does not get the error code 6 (“Attempted to read system data sector”), it will read the BOOT sector and obtain the directory cylinder storage byte located therein for a second attempt to read the directory sector. After an unsuccessful second attempt (including whatever retries are performed per attempt by the driver), the system posts a read or write error depending on the original request. This error will eventually be classified as a GAT , HIT or DIRECTORY error if the attempt was an I/O request for the GAT, HIT or a directory entry sector respectively. Realizing that most hard disk controllers do NOT support a data address mark convention, the hard disk driver must simulate the READ SYSTEM SECTOR error code when an @RDSEC or @VRSEC request is made to the directory cylinder. Since the only indication of where the directory is located is contained in this field, it is paramount to the functioning of the hard disk environment that this field be correctly maintained. The system’s LOG command will always reload this field with the BOOT sector’s directory cylinder pointer. Thus, it may be necessary to highlight the function of LOG in any written information pertinent to the hard disk system user.
----------------------------------------------------------------------
| C3/C9 | VECTOR  | FLAG | FLAG | CUR | MAX | H  M  S  | G  S  | DIR |
|       | ADDRESS |   1  |  2   | CYL | CYL | D  A  E  | P  P  | CYL |
|       |         |      |      |     |     | S  X  C  | T  G  |     |
----------------------------------------------------------------------

Notice that most of the size or max numbers are “highest value”, so for example 5 in the “heads” field means there are 6 heads numbered 0-5.

Other information I have no idea what to do with …

ARCHIVE FILE SET HEADER RECORD
Each file segment of an archived file has a header record written as the first sector of the file segment. The information contained in the header is used to support fail-safe reconstruction of the original file. This section covers the information contained in the fields of the header record. Each like-named file in the file set will have a header record where the first forty bytes are identical. The numbers contained within angle brackets are sector offset values in hexadecimal.
DIRECTORY [00 – 15]
This 22 byte field contains the first twenty two bytes of the original file’s primary directory entry record. Any technical manual on the operation of the DOS will detail these bytes.
DATE [16 – 1D]
This field contains the date that the file set was created. The date is in standard ASCII string notation: MM/DD/YY.
TIME [1E – 25]
This field contains the time that the file set was created. The time is in standard ASCII string notation: HH:MM:SS.
RANDOM [26 – 27]
This field contains a 15 bit random number.
DISKNUM [28 – 29]
This field contains the 16-bit number of the d isk set for a given file segment. Each file that is archived begins its header with a disk number of zero. The value is stored in standard low-high order.
RECBGN [2A – 2B]
This field stores the relative sector number (relative to zero) of the first record contained in this file segment.
RECEND [2C – 2D]
This field stores the relative sector number (relative to zero) of the last record contained in this file segment.
SPARE [2E – 3F]
This 18-byte region is currently unused. It is always filled with zeroes.
LOCKED [40 – 7F]
This field is composed of 2-byte subfields. Each subfield contains a file segment record number that was detected as bad on the destination disk during the archival process and was thus locked from use. A value of zero indicates no record lock (the zeroth record is the header). These numbers are used during restoral to indicate if any source sectors should be skipped.
BADREC [80-FF]
This field is composed of 2-byte subfields. Each subfield contains a record number of the SOURCE file that was detected as unreadable during the archive process and that was written to this file segment as all spaces. This number may be useful to you if you neglected to write it down during the archival process.



Using a Single Hard Drive with 2 Operating Systems

PowerSOFT Products
11500 Stemmons Expressway, Suite 125
Dallas TX 75229
(214) 484-2976

The Model 4/4P computer has the capability of running in two modes: Model III mode and Model 4 mode. This allows a Model 4/4P owner to use two (or more) different operating operating systems on the computer. Two operating systems, one for each mode of operation, are available from Radio Shack for use on the Model 4/4P with a Radio Shack 5-megabyte hard drive: TRSDOS 6 for Model 4 mode, and LDOS 5.1 for Model III mode. The question has arisen among users of the 5-megabyte hard drive of whether there is any way to use both operating systems on the same hard drive without having to reformat and recreate the system partition every time. There is some justification for wanting to do this. The two operating systems involved, LDOS 5.1 for the Model III mode and TRSDOS 6.1 for the Model 4 mode, are very similar. Moreover, since the software base for TRSDOS 6 is not yet as large as that for LDOS, it can be to a user’s advantage to switch to LDOS to run applications which are not available for TRSDOS 6. Finally, a hard drive system provides extensive storage capacity as well as increased operating speed over floppy disks. It seems a waste to have to switch to floppies just to run a particular application.

We at PowerSOFT have been able to place both the LDOS and TRSDOS 6 operating systems on a single hard drive so that they can be used by a Model 4 running in either mode. The selection of which system to utilize is done by simply booting up the appropriate floppy system disk and letting the configuration file transfer control to the hard disk. The files on the hard disk are accessible to both operating systems. This was made possible by the media compatibility which exists between LDOS and TRSDOS 6. This means that they can read each other’s directories and disk formats without requiring special software.

The key to placing both operating systems on a single hard drive lies in the flexibility of the two operating systems. Both LDOS and TRSDOS 6 allow you to split up a hard drive into one or more logical drives; and the logical drive numbers need not be the same as the physical positions of the hard disk partitions. This is what makes it all work. The hard disk partition which is assigned as Drive 0 for LDOS need not be the same as the partition which is assigned as Drive 0 for TRSDOS 6! This means that TWO independent logical drive zeros (system drives) can exist on a single hard drive, one for each operating system. And of course, each operating system sees only its own drive 0, the other one appearing to it as something else.

Once this concept is understood, the application of it is quite simple.

Consider the setup of a 5-megabyte hard drive system. Each hard drive contains two disks or platters, each with two surfaces (four surfaces in all). Each surface has its own read/write head. Both LDOS and TRSDOS 6 allow us to split the hard drive along the surfaces (sometimes referred to as the “head offset method,” head referring to the individual read/write head of each surface). This means that we can split a hard drive into a maximum of four logical drives, assigning one surface (“head”) to each. This is what happens when we execute the Model 4 hard disk initialization program. The hard disk is split into four logical drives, the first surface being drive :0, the second drive :1, the third drive :2, and the fourth drive :3.

There is nothing in either operating system which says that Surface Number One must be logical drive 0 always. So what we can now do is run a modifiedinitialization file under LDOS that reverses the order of logical drives :0 and :3.That is, surface four becomes drive :0, and surface number one becomes drive :3. Thuswe can have two different drive zeros on the hard drive. But the drive :0 which isthe system drive when TRSDOS 6 is running is drive :3 when LDOS running and viceversa. Voila, we have two operating systems sharing the same hard drive! And sinceonly one operating system can be running at any one time, there is no conflictbetween them. Consider the diagram below.

    TRSDOS 6 sees ==>    :0    :1     2      :3
    PHYSICAL SURFACE      1     2     3       4
    LDOS 5.1 sees ==>    :3    :1     :2     :0

Of course, it falls on the user of such a shared system to make sure thatprograms which run only under one operating system or the other are clearly andobviously marked. One way to accomplish this is to place model- specific programfiles on each operating system’s respective drive 0, and have data files (which canusually be read by both systems) resident on the other two logical drives. Or filescan be renamed so that those intended for LDOS (Model III mode) only end with “M3″while those intended for TRSDOS 6 (Model 4 mode) only end with “M4.” There are many possible schemes to choose from and you should select one which suits your particularsituation best.

We present below a three-step procedure to implement the method just described, for those Model 4 hard drive owners who wish to use both LDOS and TRSDOS. Please makesure that you backup EVERY file on your hard drive before you implement this procedu re, as the hard drive will be reformatted.

To use this procedure, you must have both the TRSDOS 6 hard drive initialization disk as well as the LDOS hard drive initialization disk available.

STEP ONE. Boot up your TRSDOS 6 Hard Drive Initialization Disk. This will automa tically execute the initialization program. Follow the steps described in your Hard Disk Startup Manual. Tell the program that you to create a hard drive system with eq ual partition sizes, the hard disk to be the system device, and the hard disk to be s earched FIRST when looking for a file. This will result in the hard drive logical dr ive numbers as 0, 1, 2, and 3. Proceed to format the hard drive, move files over to it, and create your BOOT diskette. These procedures are all described in the Hard Di sk Startup Manual.

STEP TWO. Make a BACKUP of your LDOS Hard Drive Initialization disk. Boot up thi s disk but do NOT execute the initialization procedure yet. We must modify the Model III Hard Disk Initialization files, using the PATCH command of LDOS. First type: BU ILD INITHD3/FIX. Then type in the patch lines below EXACTLY.

    .Patch to INITHD3/JCL to reverse head order and skip
    .FORMAT
    D09,B8="1"
    D09,EB="4"
    D0E,6F="."
    D0E,9C="."
    D0E,C9="."
    .End of Patch.

Now press BREAK. The patch file will be written to disk. Now type: PATCH INITHD3/JCL USING INITHD3/FIX and press ENTER. The patch will be applied to the INITHD3/JCL file. There is one more patch which needs to be applied. Since it is very short, you will not build a separate patch file for it, but simply type it in on the command line. Type:

PATCH HD1/CFG.CCC (D02,F7=13:D03,15=10)

And press ENTER. The patch will be applied to HD1/CFG.

You have just patched the LDOS Hard Disk Initialization files to (a) reverse the order of logical drives :0 and :3 on the hard disk, and (b) skip the formatting process (since we’ve already formatted the hard drive under TRSDOS 6).

STEP THREE. Execute the patched LDOS (Model III) Hard Disk Initialization with the command,

DO INITHD3 (NEW,PW=PASSWORD,HARD1,FLOPPY2,ABS)ENTER.

Refer to the Model III Hard Disk Startup Manual, page 31 and following, for more details.

You now have a hard drive shared between LDOS and TRSDOS 6. Selection is automatic depending on which boot disk is in the floppy drive when the reset button is pressed. When you are running TRSDOS 6, you will note that your logical drive :3 has the LDOS system files on it. When running LDOS in Model III mode, logical drive :3 will have the TRSDOS 6 system files on it. Logical drives :1 and :2 will be the same regardless of which operating system is currently running. This way, any programs which reference files on these two logical drives will not need to be changed.

Using this method, you will be able to use a Model 4 or 4P system with a hard disk to its maximum capability, rather than having to use one operating system on a hard disk and the other on floppies (or on another hard disk). The same method works on larger-capacity hard drives as well, if you have them hooked up to a Model 4 or 4P computer. Unfortunately this method is not usable with CP/M Plus, since CP/M Plus does not have the capability of splitting a hard drive into several logical drives; it sees a hard drive as a single volume only.

The same technique is used to create different system partitions that will be used by two or more computers in a multiplexed situation. In this type of environment, several computers share the same hard drive, and the hard drive is split up so that each computer has its own system partition. These system partitions may be set up so that they are invisible to the other computers, in order to prevent accidental alteration of the system files. In order to maximize the use of available storage space, a hard disk driver program which permits a type of partitioning known as cylinder offset is preferable. Using such a driver, the size of the system partitions can be limited to the minimum necessary to hold the operating system modules and a few often-used (and machine-specific) utilities, leaving the rest as sharable storage between the various computers.

If you have a hard drive which uses a Western Digital controller board, contact PowerSOFT at the address above for more information on hard disk drivers and other hard drive utility software.



Initializing Hard Drives under Model IV DOS’s – F. McCloy

Following are instructions for initializing Radio Shack 12 and 35 Meg hard drives under TRSDOS 6.02.00 and LDOS 5.1.4 using TRS-80 models 4 and 4p. These drives are not directly supported by Radio Shack for use with computers listed, and therefore, the “automatic formatting” utilities provided by RS will not give you satisfactory results.

PLEASE NOTE: The 35 Meg disk has 512 actual tracks, but you can use only 404 of them due to the limitation of the TRSHD6/DCT device driver. This limits useable space to about 80% of the drive’s capacity. Partitioning the drive for both TRSDOS and LDOS will not solve the problem. (All of the space on the 12 Meg drive will be available to you.)

Use the following procedure to initialize the 12 or 35 meg drive with TRSDOS 6.02.00. (A similar procedure can be used for LDOS using its utilities.):

Command:

SYSTEM (DRIVE=6,DRIVER="TRSHD6")

Question:
Answer
12MB
Answer
35MB
Number of heads:
1
1
Tracks per surface:
6
7
Step Rate:
230
404
# Heads/Partition
1
1
Starting Head:
1
1

TRSFORM6 :6

Disk pack name:
HARDA
HARDA
Password:
PASSWORD
PASSWORD
Manual Lockout:
N
N

SYSTEM (DRIVE=1,DISABLE,DRIVER="TRSHD6")

Drive Select Address:
1
1
# Heads/partition
1
2
Starting head:
2
2

TRSFORM6 :1

Disk pack name:
HARDB
HARDB
Password:
PASSWORD
PASSWORD
Manual Lockout:
N
N

SYSTEM (DRIVE=2,DRIVER="TRSHD6")

Drive Select Address:
1
1
# Heads/partition
1
2
Starting head:
3
4

TRSFORM6 :2

Disk pack name:
HARDC
HARDC
Password:
PASSWORD
PASSWORD
Manual Lockout:
N
N

SYSTEM (DRIVE=3,DRIVER="TRSHD6")

Drive Select Address:
1
1
# Heads/partition
1
1
Starting head:
4
6

TRSFORM6 :3

Disk pack name:
HARDD
HARDD
Password:
PASSWORD
PASSWORD
Manual Lockout:
N
N

SYSTEM (DRIVE=4,DRIVER="TRSHD6")

Drive Select Address:
1
1
# Heads/partition
1
1
Starting head:
5
7

TRSFORM6 :4

Disk pack name:
HARDE
HARDE
Password:
PASSWORD
PASSWORD
Manual Lockout:
N
N

SYSTEM (DRIVE=5,DRIVER="TRSHD6")

Drive Select Address:
1
1
# Heads/partition
1
1
Starting head:
6
8

TRSFORM6 :5

Disk pack name:
HARDF
HARDF
Password:
PASSWORD
PASSWORD
Manual Lockout:
N
N

SYSTEM (DRIVE=7,DRIVER="FLOPPY")

I/O Address:
2
2

BACKUP :0 :6 (SYS,INV)
SYSTEM (SYSTEM=6)
SYSGEN (DRIVE=6)

Your system is now set up as follows:

Logical
Drive
Physical
Drive
12MB
Physical
Drive
35MB
:0
HD Head # 1
HD Head # 1
:1
HD Head # 2
HD Head # 2-3
:2
HD Head # 3
HD Head # 4-5
:3
HD Head # 4
HD Head # 6
:4
HD Head # 5
HD Head # 7
:5
HD Head # 6
HD Head # 8
:6
Floppy :0
Floppy Drv 0
:7
Floppy :1
Floppy Drv 1

PLEASE NOTE: This procedure can provide guidelines for partitioning your 12 or 35 meg hard drive for use with both TRSDOS and LDOS.



Changing The Minimum Cluster Size on Radio Shack Hard Drives – Adam Rubin – June 17, 1987

This file explains how to modify your hard disk to get a granule size of 1 kilobyte. It assumes you’re using a Radio Shack 5-meg Hard Disk (26-1130), TRSDOS 6.2 or LS-DOS 6.3, and the Radio Shack hard disk drivers that were included with TRSDOS 6.2.0, and that your hard disk is assigned as drives 0, 1, 2, and 3. Please read ALL of this file, and make sure you understand it, before you try to do anything!

You’ve probably noticed that when you first set up your hard disk, space for files was allocated in units (granules) of 16 sectors, or 4K. As a result, any file stored takes up at least 4K of space. It’s possible to change the DOS’s description of the drive so that space is allocated in units of 1K, which means that there will be less wasted space when storing each file.

On the other hand, reducing the granule size from 4K to 1K introduces other problems. For example, it’s possible for a 12K file to be stored in 12 separate extents of 1K each, which would take considerably longer to access than, say, 3 extents of 4K each. Also, additional directory entries are needed when there are more than four extents, so there’s more chance of filling up all the directory entries before the disk itself is full. Since each extent of a file can be no more than 32 granules, a minimum of one extent for each 32K of a file is necessary, and so any file longer than 4 times 32K, or 128K, will take up at least two directory entries. With these in mind, it’s possible that part, or all, of your system would be better off with the granule size left at 4K.

As mentioned above, this file assumes you’re using the same setup that I am. If your system is different, it may be possible to adapt the method described here, but you’d have to determine that on your own.

The procedure described below will alter the Drive Control Table (DCT) for the chosen drive(s) to indicate 4 sectors per granule, 8 granules per cylinder. (Remember that 8 is the maximum number of granules allowed per cylinder.) Since, as mentioned above, files may require more extents, and possibly additional directory entries, it’s necessary to reformat the drive.

After you’ve modified your hard disk, you don’t have to repeat this whole procedure to reformat one or more of the drives. Boot with the boot diskette created by the steps below (don’t forget SYSTEM (SYSTEM=4) if you’re reformatting :0), backup the files, use TRSFORM6 to reformat the drive, list BOOT/SYS as explained below (again, this is essential!), DATECONV if necessary, and restore your files.

You can use the procedure below to change one, several, or all of the drives on your HD to 1K granules. (Any changes to the HD won’t affect floppy disks; they’ll still be formatted as six sectors (1.5K) per granule.) If, sometime later, you’d like to change an additional drive to use 1K granules, just repeat the procedure described below for that drive. If you’d like to change a drive back to 4K granules, the same procedure also applies, but use the unmodified TRSHD6/DCT instead of TRSHD6A.

If you’re using a 4P and have installed some sort of HD boot scheme, reread its documentation CAREFULLY before doing anything! It may be necessary to re-install the boot routine after modifying the hard disk.

If any of the drives you’re changing are also used by LDOS 5.x, the procedure gets somewhat trickier. My suggestion for that is to modify the CONFIG/SYS.CCC file on your LDOS hard disk boot diskette, by changing DCT+8 for the affected drives from 2F to E3 to reflect the change.

The method in this file appears to work as described. However, I do not accept responsibility for any consequences of using the information in this file, and anything you do must be done at your own risk.

Here’s how to modify your hard disk for 1K granules:

  1. Make a backup of your current hard disk boot diskette. This will become your new boot diskette once you’ve finished this whole procedure. Make sure it has TRSHD6/DCT, TRSFORM6/CMD, and, if you’re using 6.3, DATECONV/CMD.
  2. Create a patch file called TRSHD6A/FIX with these four lines:
    D02,EE=CD 56 33
    F02,EE=3D 0F 0F
    D01,66=CB 3A CB 3A 87 87 3D 0F 0F C9
    F01,66=00 00 00 00 00 00 00 00 00 00

    then RENAME TRSHD6/DCT.DRIVER:f TO TRSHD6A/DCT
    (where “f” is the drive containing the backup of the boot diskette), and PATCH TRSHD6A/DCT:f USING TRSHD6A
    to patch it with the patch file.
  3. Reboot your system with this backup of the boot diskette.
  4. Type SYSTEM (SYSTEM=4) to make the floppy your system drive while you change the hard disk. During all of step 5, therefore, you’ll have to refer to what’s usually :0 as :4.
  5. For each drive to change (which I’ll call drive “d” here)
    1. BACKUP *all* the files on that drive.
    2. SYSTEM (DRIVE=d,DISABLE,DRIVER="TRSHD6A") and answer the prompts. (Make sure you’re using TRSHD6A, not TRSHD6.) With the setup I have, the drive select address is 1 for all drives, each drive uses one head, and the starting head number is the logical drive number plus one. The starting head number for what’s normally drive :0 (which is currently :4) is 1.
    3. TRSFORM6 :d and answer the prompts. Disk name is up to you, and so is the disk master password. Unless you’d previously specified something else, the disk’s current master password is probably PASSWORD. For “Manual lockout of tracks?”, answer N. The appropriate portion of your hard drive will be reformatted, which takes a few minutes.
    4. LIST BOOT/SYS.LSIDOS:d (HEX) to allocate the remainder of the space necessary for BOOT/SYS. This is ESSENTIAL, since TRSFORM6 assumes an unmodified driver, and you’ve thrown its calculations off by modifying TRSHD6/DCT.
    5. If you’re using 6.3, DATECONV :d
    6. Restore your files back onto the hard disk.
    7. Repeat steps 5A-5F for each drive to be changed.
  6. Type SYSTEM (SYSTEM=4) to make the hard disk your system drive again.
  7. Type SYSGEN (DRIVE=4) to write the updated configuration file to the floppy disk.
  8. The floppy disk is now your new boot diskette. Label it, and make several backups of it. Do NOT use your old boot diskette any more, as it won’t work.


Booting a Model 4P from a Hard Drive – Gary Phillips – December 22, 1987

The following patch files can be used to permit a model 4P to boot directly from a hard disk that uses the standard Radio Shack 8X300 or WD1010 controller board. They use the code and technique that was originated by Adam Rubin for TRSDOS 6.2, but have been modified for LS-DOS 6.3. I have tested them with a standard RS 5 Meg drive, using either the original TRSHD6 driver or the Misosys RSHARD6 driver software. You should also read Adam’s original HDBOOT.DOC file before applying these two patches. (See DL6 IN CIS for that file.)

The HDSYS0/FIX patch should be applied to the SYS0/SYS file on your hard disk. The HDBOOT/FIX patch must have the xx, yy, and zz bytes filled in from your DCT before applying it. Be sure that your hard disk is completely backed up before applying these patches, because if you have difficulty you could lose data! Remember, too, that once you have applied these patches, you should NOT use backup to copy /SYS files to or from the hard disk. Your 4P will automatically boot from the hard disk when it is powered on or reset, unless you hold down the F2 key while booting. (If you have an XLR8er board, you may need a couple of tries on a cold boot because the cold start speed of the XLR8er is a bit slow.)

Note that the xx and yy values must be entered in hexadecimal. For a RS 5 Meg drive, xx is 32 sectors/cylinder or hex 20, for example.

If you have your HD system partition configured as drive 0 (by booting from a configuration floppy) you can obtain the zz values by using DEBUG to look at address x’0373′ through x’0378′, which is DCT+3 for drive 0 under LS-DOS 6.x for the Model 4.

. HDSYS0 - Patch to SYS0/SYS of LS-DOS 6.3 to permit direct
. booting of Model 4P from RS HD  - originated by Adam Rubin
. 6.3 level K mods. by Gary Phillips, 08/12/87, rev. 08/22/87
. Apply via PATCH SYS0/SYS.LSIDOS using HDSYS0/FIX
.
d0c,b9=00 00 00
f0c,b9=31 80 03
d0d,07=c3 8f 1e
f0d,07=00 00 00
d0e,a0=00 00 00
f0e,a0=c2 a0 19
d0e,e2=00
f0e,e2=c0
d0f,14=fe
f0f,14=0c
. eop
.
. HDBOOT - Patch to BOOT/SYS of LS-DOS 6.3 to permit direct
. booting of model 4P from RS HD - originated by Adam Rubin
. --adapted for 6.3 level K by Gary Phillips   --08/12/87
. Apply via PATCH BOOT/SYS.LSIDOS using HDBOOT/FIX
. Before using this patch, you must substitute:
.   for xx, number of sectors per cylinder of drive 0 (hex)
.    for yy, number of sectors per gran under your driver (hex)
.    for zz, the values of DCT+3 to DCT+8 for drive 0
.
d00,4d=xx 00 00 00 00 00 00 00
f00,4d=12 fd cb 04 6e 28 01 87
d00,5a=yy
f00,5a=06
d00,9f=c3 43
f00,9f=70 04
d01,41=18 0d f9 43 zz zz zz zz zz zz 00 00 00 00 00
f01,41=1e 00 cd 74 43 3a cd 12 e6 20 21 74 04 b6 77
d01,6f=18 2c 00
f01,6f=c3 38 02
d01,7c=c3
f01,7c=96
d01,80=00 00
f01,80=e6 1c
d01,96=00 00 00 00 00 00 00 21 43 43 11 71 04 01 08 00
f01,96=01 f4 81 ed 41 0d 3e 18 ed 51 cd d9 43 db f0 cb
d01,a6=ed b0 c3 38 02 f3 cd c3 43 3a 78 00 d3 84 fb 3e
f01,a6=47 20 fa 7b d3 f2 3e 81 d3 f4 d5 11 02 c1 3e 80
d01,b6=05 c0 3a 79 04 92 3e 06 28 01 af a7 c9 e5 d5 3e
f01,b6=cd d9 43 3e c0 d3 e4 db f0 a3 28 fb ed a2 7a d3
d01,c6=85 d3 84 d3 9c 4b 5a 16 00 06 0c 3e 02 cf f5 af
f01,c6=f4 ed a2 20 fa 18 fe d1 d1 af d3 e4 3e 81 d3 f4
d01,d6=d3 9c 3e 86 d3 84 f1 d1 e1
f01,d6=db f0 c9 d3 f0 06 18 10 fe
d01,f9=3e 09 90 28 ad af c9
f01,f9=00 00 00 00 00 00 00
. eop


Changing TRSDOS 6.2.1 to Boot a Model 4P from a Hard Drive

This file describes modifications to TRSDOS 6.2.1 to enable a TRS-80 Model 4P to boot directly from a Radio Shack 5-megabyte hard disk drive. You will need a file or sector editor to modify your hard disk.

NOTICE: Changing any operating system, especially at this level, is a dangerous operation. If anything in this file is not absolutely clear to you, do NOT attempt any modifications by yourself.

The method in this file appears to work as described. However, I do not accept responsibility for any consequences of using the information in this file, and any modifications must be made at your own risk.

System Requirements:

  1. TRS-80 Model 4P ONLY, not Model 4 or 4D.
  2. TRSDOS 6.2.1.
  3. Radio Shack 5-meg hard disk drive. This method might work on other drives with a WD1000 or WD1010 controller, but has not been tested. Any hard drive used must meet the following conditions: TRSDOS logical drive :0 must lie entirely under the first head (head 1) on the hard drive. On this drive, logical cylinder and sector numbers must be identical to physical track and sector numbers.
  4. Use of Radio Shack hard disk drivers when running under TRSDOS 6.2.1. Other drivers have not been tested.

Instructions:

All references to drive :0 refer to the first logical (and physical) drive on your hard disk.

  1. Boot the hard disk system with your usual boot diskette. If there is an AUTO command on your boot diskette, write it down.
  2. Backup all files from the hard disk onto floppies.
  3. Use SYSGEN to create a CONFIG/SYS file on logical drive :0.
  4. Fill in the values marked “xx,” “yy,” and “zz zz zz…” in the table of changes to BOOT/SYS.
  5. Using a file or sector editor, CAREFULLY change the files SYS0/SYS and BOOT/SYS on logical drive :0 as specified in the tables below.

    To restore the original BOOT/SYS and SYS0/SYS files, either while changing them or at any time afterwards, reboot using your boot diskette and backup SYS0/SYS from the boot diskette to :0.
  6. Exit from your file or sector editor to “TRSDOS Ready.” If there was an AUTO command on your boot diskette, store it on drive :0.
  7. Remove all floppy disks from the drives and press RESET. In a few seconds, you should see the familiar Tandy logo. If so, you are finished modifying your system.
  8. If your system does not boot properly, reboot with your boot diskette (hold down F2 while pressing RESET), and restore SYS0/SYS and BOOT/SYS from the boot diskette to the hard disk (see step 5 above). You may either abandon the entire project, or attempt it again.

When using the modifications in this file, a few restrictions apply:

  1. The system will attempt to boot from the hard drive if it is turned on. To boot from a floppy, hold down the F2 key while pressing RESET.
  2. When booting, if the hard drive is not completely up to speed you may see either a screenful of garbage or “The floppy disk drive is not ready.” Press RESET, and the system should boot properly.
  3. The CONFIG/SYS file must be loaded when booting from the hard drive, and cannot be suppressed. If it cannot be loaded, the system will not boot. In that case, you must boot with the boot diskette, and use SYSGEN to create a valid CONFIG/SYS file on the hard disk’s drive :0

    You may change your system configuration at any time, as long as it meets the requirements above. Merely boot the system from the hard drive, establish the new configuration, and re-SYSGEN.
  4. When booting from the hard drive, you cannot enter DEBUG by holding down the D key, as this would prevent CONFIG/SYS from being loaded. To enter DEBUG in this manner, boot from a floppy.

    Of course, once you are at the “TRSDOS Ready” prompt, DEBUG may be used as desired.
  5. An AUTO command may be installed on the hard disk’s drive :0. To fix a runaway AUTO command, reboot with your boot diskette.
  6. Do not move the modified SYS0/SYS from hard drive :0 onto another disk. SYS0/SYS and BOOT/SYS have been modified for hard drive boot, and BACKUP will alter the non-existent bootstrap step rate of BOOT/SYS, rendering the copy unusable for booting either a floppy or hard disk system.

Changes to SYS0/SYS.LSIDOS:

Record,Byte     From        To
-----------     ----        --
0C,B0           31 80 03    00 00 00
0C,FE           00 00 00    C3 86 1E
0E,7A           C2 A0 19    00 00 00
0E,C0           C0          00
0E,F2           0C          FE

Changes to BOOT/SYS.LSIDOS:

Record,Byte     From             To
-----------     ----             --
00,4D           12 FD...01 87    xx 00 00 00 00 00 00 00
00,5A           06               yy
00,9F           70 04            C3 43
01,41           1E 00...B6 77    18 0D F9 43 zz zz zz zz zz zz 00 00 00 00 00
01,6F           C3 38 02         18 2C 00
01,7C           96               C3
01,80           E6 1C            00 00
01,F9           00 00...00 00    3E 09 90 28 AD AF C9

01,96 thru 01,DE
From:   01 F4 81 ... 18 10 FE
To:     00 00 00 00 00 00 00 21 43 43 11 71 04 01 08 00 ED B0 C3 38
        02 F3 CD C3 43 3A 78 00 D3 84 FB 3E 05 C0 3A 79 04 92 3E 06
        28 01 AF A7 C9 E5 D5 3E 85 D3 84 D3 9C 4B 5A 16 00 06 0C 3E
        02 CF F5 AF D3 9C 3E 86 D3 84 F1 D1 E1

For “xx,” “yy,” and “zz zz zz…,” substitute the appropriate values for drive :0 of your hard disk system.

xx = Sectors per cylinder, in hexadecimal. For example, thirty-two sectors per cylinder would be 20 hex.

yy = Sectors per granule, in hexadecimal. For example, sixteen sectors per granule would be 10 hex.

zz zz zz… = values of DCT+3 through DCT+8 for hard disk drive :0. Boot the hard disk system with your boot diskette, and use DEBUG to examine the Drive Code table for drive :0.