Contents
DCB Layout
DCT Layout
Disk Layout
Dir Layout
GAT Layout
HIT Layout
Disk I/O Table
|
LDOS 5.1.x Internals
LDOS Device Control Blocks (DCB)
The Device Control Block, or DCB, is used to interface with all the
various devices in LDOS. This includes the keyboard, video display, printer
and communications port. Each DCB is six bytes long, and has the following
layout:
Byte 0 - DCB Type
- Bit 7 - If set, the DCB is really a file control block (FCB) with the
file in an OPEN state. Used for I/O redirection.
- Bit 5 and 6 - Reserved
- Bit 4 - If set, the device is ROUTEd to another device
- Bit 3 - If set, the device is set to NIL. Output is discarded and input
returns zero.
- Bit 2 - If set, the device supports the @CTL system call
- Bit 1 - If set, the device supports the @PUT system call
- Bit 0 - If set, the device supports the @GET system call
Byte 1 - Low order driver address
This byte contains the low byte of the driver routine that services
this device.
Byte 2 - High order driver address
This byte contains the high byte of the driver routine that services
this device.
Bytes 3-5 - Variable storage
These three bytes are for the driver routine to use as variable storage.
It is up to the driver to define their use.
The system stores DCBs at the following addresses:
Address Assignment
-------- -----------------------
4015h *KI - Keyboard
401Dh *DO - Video
4025h *PR - Printer
42C2h *JL - Job Log
42C8h *SI - Standard input
42CEh *SO - Standard output
42D4h Spare #1
42DAh Spare #2
42E0h Spare #3
42E6h Spare #4
The two character device names for each of the ten available devices
are stored in the 20 byte block of memory at 42ECh.
Top
|
LDOS Drive Control Table (DCT)
The drive control table (DCT) is what LDOS uses to interface with disk
drives. The DCT contains the memory variables LDOS needs in order to determine
the disk's geometry as well as the address of the driver routine that services
requests to the drive.
The DCT contains eight entries, one for each of the drives :0 to :7.
In a floppy disk system, only the first four will be used.
DCT+0 Three byte jump vector to the driver. If this contains
0C9h (a Z-80 RET instruction) then the drive is disabled.
DCT+1 Two byte address of the driver
DCT+3 Drive specifications
Bit 7 - 1 if the drive is software write protected.
6 - 1 for double density. 0 for single density.
5 - 1 for 8 inch drives. 0 for 5 1/4 inch.
4 - 1 if using the second side of the disk at the time.
3 - 1 for hard disk. 0 for floppy disk.
2 - Start delay - 0 = 1 second 1 = 0.5 second.
1-0 - Step rate. 00 = 6ms 01 = 12ms
10 = 20ms 11 = 30ms
DCT+4 Additional drive specifications
Bit 7 - Reserved.
6 - 1 if controller is capable of double density.
5 - 1 for double sided operation if floppy disk.
If this is a hard disk entry, this bit means
that the cylinder counts stored in the DCT
entry are half the physical number of cylinders.
4 - 1 indicates a non-standard disk controller.
3-0 - Physical drive address by bit. 1, 2, 4, or 8.
Only one bit may be set. If the non-standard
bit is set, these 4 bits indicate the starting
head number.
DCT+5 Current cylinder position of the drive
DCT+6 Highest numbered cylinder of the drive.
DCT+7 Allocation information
Bit 7-5 - Number of heads for a hard disk.
4-0 - Highest numbered sector relative to 0. If
DCT+4 bit 5 is 1, the sectors per cylinder
is actually twice this number.
DCT+8 Additional allocation information
Bit 7-5 - Number of granules per track. If DCT+4 bit 5
is 1, this is half the actual granules per
track.
4-0 - Number of sectors per granule.
DCT+9 Directory location. This byte is looked at first when
looking for the directory of a disk. If the read fails
then the disks boot sector is examined for the proper
value and this entry is updated.
It is important that the entries at DCT+6 through DCT+8 all relate without
conflicts. This information is used by LDOS to properly position the drive's
heads.
Top
|
LDOS Diskette Layout
The layout of an LDOS diskette or hard disk partition is as follows:
The first sector of the first track is reserved for the boot sector. The
third byte of the boot sector is used to indicate the location of the directory
track, which is normally in the center of the disk. The directory track
consists of one GAT sector, one HIT sector, and the remaining sectors are
allocated to directory records.
Though not to scale, since it only shows six sectors on each track,
the following table illustrates the disk layout. The general idea is the
same for any size LDOS diskette or hard disk partition.
Key: (B) = Boot Sector
(x) = Data Sector
(G) = Granule Allocation Table
(H) = Hash Index Table
(D) = Directory Sector
Trk Sector Sector Sector Sector Sector Sector Sector Sector
Num 012345 012345 012345 012345 012345 012345 012345 012345
--- ------ ------ ------ ------ ------ ------ ------ ------
0 Bxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx
8 xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx
16 xxxxxx xxxxxx xxxxxx xxxxxx GHDDDD xxxxxx xxxxxx xxxxxx
24 xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx
32 xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx xxxxxx
Top
|
LDOS Directory Records (DIRREC)
The directory contains all the information needed to access files on
an LDOS disk. The directory track contains one Granule Allocation Table
(GAT), one Hash Index Table (HIT) and up to 32 sectors of directory records.
The number of directory records is limited by the physical layout of the
HIT. On a double sided double density floppy disk, which has 36 sectors
available, the last two sectors of the second side will not be used.
Each directory record is 32 bytes long, giving eight entries per sector.
This makes the number of files that can be placed on a disk dependent on
the size of the disk. The following table summarizes the number of entries
available based on disk size. The number of files available will be reduced
by 16 to account for the directory entries reserved for use by the operating
system files. On non-bootable data disks, the number of available files
is only two less than the total.
Disk # of Secs/ Dir Total Avail
Size Density sides cyl Secs Files Files
----- ------- ----- ----- ---- ----- -----
5 Single 1 10 8 64 48
5 Single 2 20 18 144 128
5 Double 1 18 16 128 112
5 Double 2 36 32 256 240
5 Hard 128 32 256 240
8 Single 1 16 14 112 96
8 Single 2 32 30 240 224
8 Double 1 30 28 224 208
8 Double 2 60 32 256 240
8 Hard 256 32 256 240
LDOS is upward compatible with other operating systems that are TRSDOS
2.3 compatible. Each record contains space for up to four extents (contiguous
granules of disk allocation). If a file requires more than four extents,
an additional directory record is allocated to the file. In order to distinguish
between primary and secondary entries, a bit in the directory record is
used. The following table documents the layout of the LDOS directory records.
DIR+0 This byte contains the attributes of the file.
Bit 7 - 0 = primary DIRREC 1 = secondard DIRREC
6 - 0 = user file 1 = system file
5 - Reserved
4 - 0 = record unused 1 = record in use
3 - 0 = file is visible 1 = file is invisible
2-0 - File protection level.
000 = Full access to the file
001 - All but change attributes
010 - Rename, write, read, execute
011 - unused
100 - Write, read, execute
101 - Read, execute
110 - Execute only
111 - No access to the file
DIR+1 Various flags and month of modification
DIR+2 Remaining date of modification flags
DIR+3 End of file offset
DIR+4 Logical Record Length
DIR+5-12 File name, padded with blanks
DIR+13-15 File extension, padded with blanks
DIR+16-17 Update password hash code
DIR+18-19 Access password hash code
DIR+20-21 Ending record number. Based on full sectors.
DIR+22-23 First file extent field. The extent is laid out as:
EXT+0 - One byte containing the cylinder the extent starts on.
EXT+1 - Bits 0-4 contain the number of contiguous granules.
EXT+1 - Bits 7-5 contain the starting granule on the cylinder.
DIR+24-25 Second file extent field.
DIR+26-27 Third file extent field.
DIR+28-29 Fourth file extent field.
DIR+30 If 0FFh then there is no link to an secondary directory
record. If 0FEh, then there is a link to a FXDE.
DIR+31 If a secondary entry is in use, this contains the
directory entry code (DEC) of the entry. This DEC
is a pointer into the Hash Index Table. See the
information below about the HIT for more information.
Top
|
LDOS Granule Allocation Table (GAT)
The granule allocation table contains information LDOS needs to determine
the free space on a floppy or hard disk.
This section is still under construction
Top
|
LDOS Hash Index Table (HIT)
This section is still under construction
Top
|
LDOS Disk I/O Table
This section is still under construction
Top
|
Top
The TRS-80 Home Page created and maintained by Pete Cervasio
cervasio@airmail.net
Copyright © 1998 Pete Cervasio
|