Victor 9000 format

From DiscFerret
Revision as of 21:19, 2 March 2011 by Philpem (talk | contribs) (GCR code table)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


A very strange format used by the Sirius One / Victor 9000 computer. This machine ran MS-DOS and CP/M, but had a very unusual disc format:

  • Variable speed -- 9-zone Z-CLV. The linear velocity of the disc is held fairly constant by rotating certain blocks of tracks slower than others, and storing more data sectors on the outer ("longer") tracks.
  • GCR coding -- specifically, a 4-to-5 GCR code which looks like MFM on a timing histogram.

Other than that, they're pretty standard. A DiscFerret can accurately sample and (in theory) decode these discs.

Low level format

References: (page 86 onwards)

GCR code table

From the source code to CW 0.13 by Karsten Scheibler:

input (hex) output (bin) output (hex)
0 01010 0x0a
1 01011 0x0b
2 10010 0x12
3 10011 0x13
4 01110 0x0e
5 01111 0x0f
6 10110 0x16
7 10111 0x17
input (hex) output (bin) output (hex)
8 01001 0x09
9 11001 0x19
A 11010 0x1a
B 11011 0x1b
C 01101 0x0d
D 11101 0x1d
E 11110 0x1e
F 10101 0x15

The eagle-eyed among you might just have noticed that this is the same GCR code table the Commodore 1541 uses... Hardly surprising, seeing as the 1541 is a descendant of the Commodore 8050, which was designed by Chuck Peddle, who also designed the Victor 9000. In a posting to classiccmp on the 2nd of March 2011, Tony Duell (ard p850ug1 demon co uk) says that the disc controller circuitry in the Victor is nearly identical to the circuitry in the 8050. This isn't particularly surprising on the face of it (and really makes the reverse engineering work go quicker!)

Sector Header sync marks are defined as a string of 60 or more '1' bits, followed by the sector header (data block ID, track number, sector number, and checksum).

The data header sync mark is shorter -- 5 byte-times (50 GCR bits) long -- and is followed by the "data block IO byte", data payload and 2-byte additive checksum.

Data sectors are 512 bytes in length.