Identifying a TRS-80 DOS from a Formatted Disk

Introduction

Every TRS-80 DOS has a FORMAT command, and every FORMAT leaves its own fingerprint on the disk. This page explains how to tell which DOS formatted a disk using nothing but what FORMAT itself writes: the boot sector and the directory. No program files are needed, so the method works on a blank data disk as well as on a full system disk.

The rules were worked out from a byte-by-byte comparison of more than 120 disks freshly formatted under nearly 70 DOS builds, then checked against every DOS disk in the trs-80.com archive: close to 900 images. Every image received an answer, and every answer that did not match the disk's label was traced to a known cause (most often a disk formatted by one DOS and later given the system of another).

This page is about identifying the DOS. Telling the versions of one DOS apart is a separate question, and it is only touched on here where the same bytes answer both.

What Is Looked At

A disk that has just been formatted holds only two files, and on most DOSes they are the same two:

  • BOOT/SYS: the boot sector on cylinder 0, the first thing the computer reads when it starts from the disk. On a data disk it usually holds only a short "No system" message.
  • DIR/SYS: the directory, a whole cylinder near the middle of the disk (usually cylinder 17 or 20).

Inside those two files, and in the way the disk is laid out, these are the places that are read:

  • The physical format. How many sectors each track has, how they are numbered (from 0 or from 1), whether cylinder 0 is single density (FM) or double density (MFM), and which data address mark (FB, FA or F8) each sector carries. A DOS formats every disk the same way, so the layout alone already splits the DOSes into a handful of groups.
  • The boot sector. Cylinder 0, sector 0 on a Model I (single density), or sector 1 on a Model III or 4 (double density). Its first ten to twenty bytes are the start of the DOS's own boot code, and they differ from one DOS to the next. Byte 2 (byte 1 on TRSDOS 1.x and 2.7/2.8) also tells where the directory is.
  • The GAT (Granule Allocation Table): the first sector of the directory cylinder. Besides the map of free space it holds, at offset CBh, a version byte written by FORMAT on most DOSes, and at CEh-CFh a password code.
  • The HIT (Hash Index Table): the second sector of the directory cylinder. It holds a one-byte code for each file name; bytes 0 and 1 are the codes for the first two entries, and the way a DOS computes them is itself a fingerprint.
  • The BOOT/SYS and DIR/SYS entries in the directory: 32 bytes each, including, at bytes 10h-13h, two 2-byte codes for the file's update and access passwords. FORMAT fills these in, and each DOS fills them in its own way.
  • A few other sectors of cylinder 0 that some DOSes write at FORMAT time: a version byte in sector 2 (LDOS, VTOS 4, TRSDOS 6), a drive table in sector 2 (NEWDOS/80), a copy of the GAT in sector 3 (LDOS, VTOS 4, TRSDOS 6).
  • The fill byte: what FORMAT writes into every empty sector. Most DOSes use E5 (single density) or 6D B6 (double density); some use their own, such as 00, 6C, EC, 5B, or the text "MULTIDOS" or "ULTRADOS".

Two things on a formatted disk are never used, because the person formatting the disk types them or accepts a default: the disk name and the date (GAT bytes D0h-EFh).

A few DOSes do not follow the two-file pattern. TRSDOS 1.x for the Model III and TRSDOS 2.7/2.8 have no BOOT/SYS or DIR/SYS entries at all; UltraDOS's first entry is SYSFF/SYS; the German NEWDOS/80 builds call them GDOS/SYS (or HDOS/SYS) and INHALT/SYS; Percom MicroDOS and OS-80 III have no directory. Each is covered below.

Byte offsets on this page are in hexadecimal and count from 00 at the start of a sector.

The Order of the Tests

  1. Cylinder 0's density gives the model. A single-density sector 0 on cylinder 0 means a Model I disk; a double-density sector 1 means a Model III or Model 4 disk. (The one exception: MultiDOS and Esoteric "P density" disks keep a single-density cylinder 0 on every model.)
  2. The boot sector gives the DOS. Its opening bytes are matched against the patterns in the DOS-by-DOS section. A few bytes that hold disk geometry (the directory cylinder, a density flag) are masked out.
  3. The directory confirms the DOS and, where possible, gives the version: the directory's cylinder and data marks, the GAT version byte, the HIT codes and the password codes. Where the boot sector carries no DOS-specific code (some DOSes write an all-zero or nearly empty boot sector on a data disk), the directory decides on its own.
  4. If the boot sector and the directory disagree, both are reported: the directory names the DOS that formatted the disk, the boot sector the DOS whose system was copied on later.

DOSes That Can Be Identified

Each line is what a formatted disk can be identified as. A line with a slash names DOSes whose FORMAT writes exactly the same bytes, so a disk can be placed on the line but not narrowed to one of them.

DOSModelsNotes
TRSDOS 1.xIII
TRSDOS 2.x / NEWDOS 2.1 / NEWDOS+++INEWDOS 2.1 and NEWDOS+++ use TRSDOS's FORMAT. TRSDOS 3.0 and 2.3b can be named on their own.
TRSDOS 2.7DD / 2.8DDITandy's double-density TRSDOS for the Model I
NEWDOS 3.0 / NEWDOS+INEWDOS+ 2.1 can be named on its own
VTOSI
LDOS 5I, III, MAX-80
TRSDOS 6 / LS-DOS 64 / 4POne line of DOSes: 6.0-6.2 is TRSDOS, 6.3 is LS-DOS, and the version byte tells which
DOSPLUS 3.xI, IIIModel I and III cannot be told apart on 3.4 and 3.5
DOSPLUS IV4
NEWDOS/80I, III
MultiDOS / Z'DOS / EsotericI, III, 4Z'DOS is MultiDOS 1.5 under another name; Esoteric and MultiDOS 5.1 and later format identically. The model is not shown from MultiDOS 1.7 on.
UltraDOSI
RapidDOSIII, 4
Percom MicroDOSIThe DOS can be named; its version cannot
Percom OS-80 IIIIIIThe DOS can be named; its version cannot

What Cannot Be Identified

  • DOSes that have no FORMAT command. Percom DoubleDOS, the German NEWDOS/80 builds G-DOS and H-DOS, and MultiDOS II never made a blank disk of their own, so there is no formatted disk to identify. Their system disks, made with BACKUP or a copier, can still be recognised (see below).
  • Model 4 versus Model 4P. Both use the same DOSes and the same format.
  • Model III versus a Model 4P running TRSDOS 1.3. The format is identical.
  • The DOS whose system is on a disk, when another DOS formatted it. A formatted disk names the DOS that formatted it. If a different DOS's system was copied on later, the boot sector may name that second DOS, but the directory still names the first. LDOS's REPAIR command rewrites the boot sector, so a repaired disk's boot sector says LDOS whatever formatted it.

DOS by DOS

For each DOS: the layout of the disk, the bytes that are checked, and why they decide the DOS. "xx" in a byte pattern marks a byte that varies with the disk (geometry or density) and is ignored.

TRSDOS 1.x (Model III)

  • Layout: double density, 18 sectors per track numbered 1 to 18 (almost every other DOS numbers from 0). Every track carries the F8 data mark except the directory on cylinder 17, which carries FB: the reverse of every other DOS.
  • Boot sector (cylinder 0 sector 1): starts FE 11 3E D0 D3 F0 21 02 00 22 EA 43 (TRSDOS 1.1: FE 11 3A D0 00 D3 F0). Byte 1 is the directory cylinder. Byte FE holds the version in BCD (11, 12, 13), byte FF = 28.
  • Directory: no BOOT/SYS or DIR/SYS entries (TRSDOS 1.5 adds a BOOT/SYS entry). The entries are 48 bytes, not 32, and every entry sector carries the text (c) 1980 Tandy at offset F0. The GAT is sector 1, the HIT sector 2.
  • Why it is decisive: sector numbering from 1, FB on the directory only, and the Tandy text in the entry sectors occur together on no other DOS. RapidDOS for the Model III uses the same layout but has its own boot sector and no Tandy text (below).

Back to the list

TRSDOS 2.x / NEWDOS 2.1 / NEWDOS+++ (Model I)

  • Layout: single density, 10 sectors per track numbered 0 to 9; directory on cylinder 17 with the FA data mark.
  • Boot sector (cylinder 0 sector 0): starts 00 FE 11 F3 31 FC 41 21 E2 42 CD 9A 42 3E 01 32 E1 37.
  • Directory: GAT CB = 20 (TRSDOS 2.0) or 21 (2.1-2.3, NEWDOS 2.1); GAT CE-CF = E0 42; HIT bytes 0-1 = A2 2C; BOOT/SYS passwords 60 7F 1F B2, DIR/SYS passwords A7 1D F9 E5.
  • Why it is decisive: the boot opening F3 31 FC 41 21 E2 42 belongs to this family alone (VTOS 3.0 has 31 E0 41, DOSPLUS 3.1 31 FC 41 CD C9 01), and the HIT pair A2 2C together with those password codes is written by TRSDOS's FORMAT (and the NEWDOS builds that use it) only.
  • Within the family: NEWDOS 2.1 and NEWDOS+++ write exactly what TRSDOS 2.1 writes. TRSDOS 3.0 has GAT CB = FC and BOOT/SYS passwords FF FF FF FF. TRSDOS 2.3b has its own boot (00 FE 11 F3 31 FC 41 CD C9 01 3E 01 32 E1 37 3A D8 42). Boot byte 7D is E1 on a 2.0 or 2.1 format and B6 on a 2.2 or 2.3 format.

Back to the list

TRSDOS 2.7DD / 2.8DD (Model I)

  • Layout: a hybrid. Cylinder 0 is single density, 10 sectors numbered 0-9; every other cylinder is double density, 18 sectors numbered 1 to 18, as on a Model III. Directory on cylinder 17 with F8 marks.
  • Boot sector (cylinder 0 sector 0, single density): FE 11 F3 31 71 40 CD C9 01 21 04 3E with the message "Not a SYSTEM Disk" and the text (c) 1982 Tandy at offset F0.
  • Directory: 48-byte entries, no BOOT/SYS or DIR/SYS entries, (c) 1982 Tandy at F0 of each entry sector; GAT CE-CF = 13 CC.
  • Why it is decisive: no other DOS mixes a single-density cylinder 0 with double-density tracks numbered from 1, and the 1982 Tandy text appears on no other DOS. TRSDOS 2.7 and 2.8 format identically.

Back to the list

NEWDOS 3.0 / NEWDOS+ (Model I)

  • Layout and boot sector: as TRSDOS 2.x: NEWDOS 3.0 and NEWDOS+ use TRSDOS's boot sector.
  • What separates them from TRSDOS: GAT byte C0 = 23 (or C1 = A5) on a NEWDOS 3.0 or NEWDOS+ 3.0 format; HIT byte 1 = C4 instead of 2C on a NEWDOS+ 2.2 or 3.0 format.
  • NEWDOS+ 2.1 is the one NEWDOS whose boot sector differs from TRSDOS 2.1's: bytes BB-BE = E3 E3 E3 E3 and C9-CA = E3 E3 (TRSDOS: F5 F1 F5 F1 and C5 C1). That alone names it.

Back to the list

VTOS (Model I)

  • Layout: single density, 10 sectors numbered 0-9; directory on cylinder 17, FA marks.
  • VTOS 3.0: boot sector 00 FE 11 F3 31 E0 41 21 E2 42 CD 9A 42 3E 01 32 E1 37. FORMAT also puts a copy of the GAT in cylinder 0 sector 3 and writes extra sector IDs numbered 124-126 on cylinder 0 (VTOS 3.0's copy protection). GAT CB = 30, HIT 0-1 = A2 C4, DIR/SYS passwords A7 1D 96 42.
  • VTOS 4.0: boot sector 00 FE 11 F3 31 E0 41 FD 21 00 00, shared with LDOS 5 on the Model I. GAT CB = 40, and cylinder 0 sector 2 byte 0 = 40.
  • Why it is decisive: VTOS 3.0's boot opening and its hidden IDs are unique to it. VTOS 4.0 and LDOS share a boot sector, and the version byte (40 for VTOS, 50-53 for LDOS) decides between them.

Back to the list

LDOS 5 (Model I, Model III, Lobo MAX-80)

  • Boot sector: Model I single density 00 FE 11 F3 31 E0 41 FD 21 00 00; Model I double density ("Sole") 00 FE 14 F3 31 E0 41 FD 21 1C 42; Model III 00 FE 14 F3 3A 02 43 57 1E 04; MAX-80 00 1E 14 06 00.
  • Directory: cylinder 17 on the Model I (single density), cylinder 20 on the Model III and double-density Model I; F8 marks. GAT CB = 50, 51 or 53 (LDOS 5.0, 5.1, 5.3); HIT 0-1 = A2 C4.
  • Cylinder 0: sector 2 byte 0 repeats the version (50, 51, 53); sector 3 is a copy of the GAT.
  • Why it is decisive: the boot sector places a disk in the VTOS 4 / LDOS line, and the version byte 5x in the GAT and in sector 2 is written by no other DOS.

Back to the list

TRSDOS 6 / LS-DOS 6 (Model 4 and 4P)

  • Layout: double density, 18 sectors numbered 0-17; directory on cylinder 20 with F8 marks; fill 6D B6.
  • Boot sector: on a data disk FORMAT writes a short stub, in both sector 0 and sector 1: 00 FE 14 F3 21 0E 43 (6.0 and 6.01.00), or 00 FE 14 F3, twelve zero bytes, then 11 87 FB (6.01.01-6.01.02) or 11 8D FB (6.02 and LS-DOS 6.3), with the message "Cannot boot, DATA DISK!". A system disk has 00 FE 14 F3 3E 86 D3 84 32 78 00.
  • Directory: GAT CB = 60, 61, 62 or 63 (the version, in BCD); GAT CE-CF = E0 42; HIT 0-1 = A2 C4; BOOT/SYS passwords F6 37 ... (6.0-6.3.0) or F4 71 00 00 (LS-DOS 6.3.1). From 6.2 on, GAT F5-FF holds a media block starting 03 "LSI" (6.3.1: 03 "631").
  • Cylinder 0: sector 2 byte 0 repeats the version (60-63); sector 3 is a copy of the GAT.
  • Why it is decisive: the stubs and the system boot belong to this line only. The one DOS sharing its GAT version byte, DOSPLUS IV (CB = 60), has GAT CE-CF = 96 42 and DD 23 passwords instead. Version byte 63 makes the DOS LS-DOS; 60-62 make it TRSDOS.

Back to the list

DOSPLUS 3.x (Model I and III)

  • Boot sector: each FORMAT writes its own:
    • 3.1: 00 FE 11 F3 31 FC 41 CD C9 01 3E 01 32 E1 37 3A 02 42 57 ("NO SYSTEM!");
    • 3.2: F3 FE 11 31 FC 41 CD C9 01 3A 02 42 57;
    • 3.3: sector 1 = 06 0C 21 10 43 7E 23 CD 33 00;
    • 3.4: 00 FE 14 06 0C 21 13 43 7E 23 CD 33 00, the same on the Model I and III;
    • 3.5: 00 FE 14 followed by zeros, the same on the Model I and III.
  • Directory: cylinder 17 (3.1, 3.2) or 20 (3.3 on); GAT CB = 31, 32, 33, 34, 35 (40 on 3.4a and 3.4D); GAT CE-CF = 96 42; HIT 0-1 = A2 C4; BOOT/SYS passwords 7E B2 82 2A (3.1, 3.2), 27 0B 82 2A (3.3, 3.4) or DD 23 DD 23 (3.5).
  • Fill: 00 (3.1, 3.2, 3.4), E5 (3.3) or 6C (3.5).
  • Why it is decisive: GAT CE-CF = 96 42 together with a GAT version byte from 31 to 40 occurs on DOSPLUS only, so the directory names DOSPLUS even where the boot sector is empty (3.5). The boot sectors of 3.4 and 3.5 are the same on both models, so the model cannot be told on those two.

Back to the list

DOSPLUS IV (Model 4)

  • Boot sector: FORMAT writes DOSPLUS 3.5's empty boot sector (00 FE 14 and zeros) with fill 6C. A system disk has 00 FE 14 3E 86 D3 84 21 00 F8 (TRSDOS 6's boot without the F3 at byte 3) and the text "DCT" at the start of cylinder 0 sector 2.
  • Directory: cylinder 20; GAT CB-CD = 60 05 C2 (the same as TRSDOS 6.0); GAT CE-CF = 96 42; BOOT/SYS passwords DD 23 DD 23, DIR/SYS DD 23 96 42.
  • Why it is decisive: it differs from a DOSPLUS 3.5 disk only in GAT CB (60 against 35), and from TRSDOS 6.0 in the empty boot, GAT CE-CF 96 42 and the DD 23 passwords. Each of those, on its own, separates it from every TRSDOS 6 and LS-DOS disk.

Back to the list

NEWDOS/80 (Model I and III)

  • Boot sector: 1.0: 00 FE 11 21 11 42 7E 23 CD 33 00, fill EC. 2.x Model I: 00 FE 11 F3 21 EC 37 36 xx 36 D0. 2.x Model III: 00 FE 11 F3 11 05 00 D9 31 E0 41 21 FF 51 CD 45 43 (3.0: CD 47 43), fill 5B.
  • Cylinder 0 sector 2 (2.x and 3.0): the PDRIVE table, the drive settings the disk was formatted with, starting 11.
  • Directory: GAT CB = 80 (1.0) or 82 (2.x, 3.0); HIT 0-1 = A2 C4. The directory is often not on the cylinder the boot sector names: with NEWDOS/80's lump allocation it sits on cylinder 9 or 10 with the GAT in sector 8, so it is found by searching for the DIR/SYS entry.
  • Why it is decisive: the boot openings are NEWDOS/80's own, the PDRIVE table in sector 2 and the GAT version byte 80 or 82 appear on no other DOS.

Back to the list

MultiDOS / Z'DOS / Esoteric (Model I, III and 4)

  • Boot sector: the Model I MultiDOS 1.0 writes its real boot, 00 FE 11 32 20 40 0F C5 F5 7B AD 47, with the text "This is a Multidos formatted diskette." Every later FORMAT writes one of four stubs, the same on every model:
    • xx FE 11 CD 0B 00 11 0E 00 19 CD 67 44: MultiDOS 1.0 (Model III) to 1.4;
    • xx FE 11 CD 0B 00 11 2E 00 19 7E 23 B7: 1.5 (Z'DOS) and 1.6;
    • xx FE 11 3A 03 00 FE 17 28 24 CD 0B 00 11 2F 00: 1.7, 2.0 and 2.10;
    • xx FE 11 CD 0B 00 11 10 00 19 7E 23 CD 33 00 B7 20 F8: 4.01 on, and Esoteric.
    Byte 0 (xx) is a format flag (00, 81, 3B for P density), not part of the pattern.
  • Directory: cylinder 17 (10 on P density); HIT 0-1 = 94 C4 (1.0) or C4 94 (1.1-1.7), A2 C4 from 2.0 on. GAT CB = 50 (Model I 1.0), 10 (1.0-1.4), 15, 16, 17 (1.5, 1.6, 1.7-2.0), FF (2.10 on). GAT F0-FF holds a copyright text ((c) 81 V. Hester, (c) '82 C. E. C. ...) up to 2.10.
  • Fill: the text MULTIDOS repeated (1.0-1.4), otherwise E5 or 6D B6.
  • Why it is decisive: the four stubs and the 1.0 boot are MultiDOS's alone, and the HIT pair 94 C4 / C4 94 is written by no other DOS on this page. MultiDOS 5.10 and later and Esoteric write byte-for-byte the same disk, so they can only be named together. The stubs from 1.7 on carry no model, so neither does the disk.

Back to the list

UltraDOS (Model I)

  • Boot sector: 4.1: 00 FE 11 F3 31 00 42 CD C9 01 01 00 4D; 4.2: 00 FE 11 F3 31 00 42 21 4A 42; both with the message "ULTRADOS formatted diskette".
  • Directory: GAT CB-CD = the text U41 or U42; the first entry is SYSFF/SYS, not BOOT/SYS; HIT byte 0 = 6B.
  • Fill: the text ULTRADOS repeated.
  • Why it is decisive: the version written as text in the GAT, the SYSFF/SYS entry and the ULTRADOS fill occur on no other DOS.

Back to the list

RapidDOS (Model III and 4)

  • Model III: the TRSDOS 1.x layout (sectors numbered 1-18, FB on the directory), with boot sector FE 11 21 10 43 11 00 3C 01 11 00 ED B0 C3 0D 43 ("Not a System Disk") and E5 entry sectors without the Tandy text.
  • Model 4: the TRSDOS 6 layout (directory on cylinder 20), with boot sector 00 FE 14 21 11 43 11 00 3C 01 11 00 ED B0 C3 0E 43, HIT 0-1 = A2 00, GAT CB = 60 (1.3, 1.5) or 62 (2.0), and fill E5 instead of 6D B6.
  • Why it is decisive: RapidDOS borrows TRSDOS's layouts, and its own boot sectors (and, on the Model III, the missing Tandy text) separate it.

Back to the list

Percom MicroDOS (Model I)

  • Layout: single density, 10 sectors numbered 0-9, every sector marked FB, and no directory: the DOS itself is on track 0 and the disk has no file system.
  • Boot sector: FE 00 31 FC 41 CD C9 01 01 00 43 11 EC 37 with the message "NO MICRODOS".
  • Why it is decisive: the boot sector is MicroDOS's own, and no other DOS leaves a disk with no directory. Every version writes the same boot track, so the version cannot be told.

Back to the list

Percom OS-80 III (Model III)

  • Layout: double density, 18 sectors numbered 0-17, no directory; all the sectors outside the DOS are filled with 6D B6.
  • Boot sector: FE 00 3E D0 D3 F0 3E C3 32 49 40 21 7C 43.
  • Why it is decisive: as for MicroDOS: its own boot sector and no directory. The versions are identical on disk.

Back to the list

DOSes with no FORMAT command

These never wrote a blank disk of their own, so there is no formatted disk to identify. Their system disks can still be recognised:

  • Percom DoubleDOS (Model I): a TRSDOS 2.x derivative. One boot sector for every version; GAT CB = 21; the directory on cylinder 10 with the GAT in sector 8; no BOOT/SYS entry. The versions cannot be told apart.
  • G-DOS and H-DOS (German NEWDOS/80 2.1b builds): boot 00 FE 18 F3 21 EC 37 36 FF 36 D0 (byte 2 = 18); BOOT/SYS is renamed GDOS/SYS or HDOS/SYS and DIR/SYS is renamed INHALT/SYS; GAT CB = 82, as on every NEWDOS/80 2.x. The name of the first file tells G-DOS from H-DOS.
  • MultiDOS II: a different file system from MultiDOS 1.x and 2.x, with a boot sector starting 00 FE 11 ED 56 3A 00 42 B7 20 6F and directory entries carrying a mixed-case tag ("Index", "Resident", "Library1") and no BOOT/SYS or DIR/SYS.

Back to the list