Apple DOS file system
Apple DOS 3.3 disks were 5 1/4" media containing 35 tracks of 16 sectors using a GCR encoding.
The DOS executable was stored on disk. The Disk ][ controller card (typically placed in slot #6 of an Apple ][) contained firmware that when started (via the command PR#6) would load the track $00, sector $00 into memory and start executing. In the case of a DOS boot disk, that sector would contain code that loaded the full DOS into memory, this was always stored in the first 3 tracks of a DOS boot disk.
When a new DOS boot disk was created (using the INIT command), the DOS in memory would be written to the disk being INITed. This made it easy for people to create variants of DOS (by altering the running copy of DOS then INITing a new disk). Common modifications made include changing the GCR encoding or the sync and sector header bytes (to prevent the copying of a disk via normal DOS copy programs), and extending the number of tracks per disk (up to 40)
Contents |
Volume Table Of Contents
A standard Apple DOS 3.3 has a structure called a Volume Table of Contents (VTOC) stored at track $11, sector $00
The contents of the VTOC are:
offset ----- $00 not used $01 track number of first catalog sector $02 sector number of first catalog sector $03 release number of DOS used to INIT this disk $04-05 not used $06 Diskette volume number (1-254) $07-26 not used $27 maximum number of track/sector pairs which will fit in one file track/sector list sector (122 for 256 byte sectors) $28-2F not used $30 last track where sectors were allocated $31 direction of track allocation (+1 or -1) $32-33 not used $34 number of tracks per diskette (normally 35) $35 number of sectors per track (13 or 16) $36-37 number of bytes per sector (LO/HI format) $38-3B bit map of free sectors in track 0 $3C-3F bit map of free sectors in track 1 $40-43 bit map of free sectors in track 2
...
$BC-BF bit map of free sectors in track 33 $CO-C3 bit map of free sectors in track 34 $C4-FF bit maps for additional tracks if there are more than 35 tracks per diskette
Catalog
The catalog consists of a 35 byte "File Descriptive Entry" for each file on the disk. The catalog is a chain of sectors, the location of the first Catalog sector is found by looking in the VTOC.
offset ---- $00 Not Used $01 track number of next catalog sector $02 sector number of next catalog sector $03-0A not used $0B-2D First file descriptive entry $2E-50 Second file descriptive entry $51-73 Third file descriptive entry $74-96 Fourth file descriptive entry $97-B9 Fifth file descriptive entry $BA-DC Sixth file descriptive entry $DD-FF Seventh file descriptive entry
File Descriptive Entry
offset ---- $00 Track of first track/sector list sector, if this is a deleted file this contains FF
and the original track number is copied to the last byte of the file name (BYTE 20)
If this byte contains a 00, the entry is assumed to never have been used and is available for use. (This means track 0 can never be used for data even if the DOS image is 'wiped' from the disk) $01 Sector of first track/sector list sector $02 File type and flags: $80+file type - file is locked
$00+file type - file is not locked $00 - TEXT file $01 - INTEGER BASIC file $02 - APPLESOFT BASIC file $04 - BINARY file $08 - S type file $10 - RELOCATABLE object module file $20 - a type file $40 - b type file
$03-20 File Name (30 characters) $21-22 Length of file in sectors (LO/HI format)
Track Sector List Format
$00 Not used $01 Track number of next T/S list of one is needed or zero if no more t/s list $02 Sector number of next T/S list (if one is present) $03-04 Not used $05-06 Sector offset in file of the first sector described by this list $07-oB Not used $0C-0D Track and sector of first data sector or zeros $0E-0F Track and sector of second data sector or zeros $10-FF Up to 120 more track and sector pairs