A byte-level documentation of the Sherlock Holmes: Consulting Detective, Vol. I CD-ROM for the Tandy / Memorex VIS (1992, ICOM Simulations) — the first retail VIS disc this collection has opened, and the first object in it where ninety-six per cent of the bytes were a format nobody had ever described.
No disc image, no game asset and no decoded frame is published here. Only measurements, the code that reproduces them, and one hash list.
| the object | one .bin + .cue, MODE1/2352, 512,745,408 bytes, sha1 66a20865ab247d3917944241c94d682e23bee6ae |
| the medium | 218,004 sectors. EDC 218,004/218,004, ECC P 218,004/218,004, ECC Q 218,004/218,004. Zero errors of any kind |
| the volume | ISO 9660, one namespace, publisher and data preparer both ICOM SIMULATIONS, mastered 1992-11-11 22:59:12 |
| the contents | 193 files, 7 directories, 445,760,838 bytes, nine extensions |
| the headline | 96.4344 % is .IMV — 1 h 48 m 35 s of moving picture at 15 fps with 32.1420 % of the whole disc in recorded 22,050 Hz sound |
| the program | SHI.EXE, 0.0268 %. A real-mode Borland C++ 1991 DOS executable. No NE header, no import table, no .DLL, no .INI |
| the platform | one file of 193 knows it is on a VIS — CONTROL.TAT, 483 bytes, 0.000108 % |
What is a VIS title, actually? The platform checklist says a VIS title is a Win16 NE application launched by Modular Windows, and says — proven by writing code that ran — that there is no real-mode DOS path on the machine. The first retail VIS disc anybody here has opened ships a Borland C++ MZ DOS executable and Microsoft's DOS mouse driver, named in that order inside Tandy's own vendor block.
The answer published in 11 is the narrow one:
this disc contains no Windows executable, and one disc cannot say what the
platform requires. Four readings survive every measurement; the cheapest —
a DOS master with a Tandy vendor block bolted on — is the most likely and is
not settled. The checklist gains a [1 of 4] column and a contradiction
stated as a contradiction. Its [authoring] marks are not demoted by what a
publisher shipped.
| 00 | predictions, written before the zip was opened — 15 inherited clauses, 75 open |
| 01 | the object, and the denominator, chosen on a rule that predates the figure |
| 02 | the technical sheet, with the command on every line |
| 03 | a perfect Mode 1 image, and 300 written sectors nobody claims |
| 04 | .IMV derived — a doubly-linked block chain that restarts on every sector boundary |
| 05 | .IMV decoded — a palette found by scoring against a control, and a picture I described wrongly |
| 06 | .IMV heard — 22,050 Hz, a third of the disc, and the ten bytes that made it knock |
| 07 | one container format for every data file, stating two quantities twice each |
| 08 | the script, the newspaper, and three cases that share a fifth of their world |
| 09 | a DOS program on a Windows console, and the field it has no room for |
| 10 | CONTROL.TAT, the fourth sample, and a field that stops meaning what the notes say |
| 11 | what is a VIS title, on a sample of one |
| 12 | 96.4344 %, the head of the table, and two 1992 adventure games at opposite ends of it |
| 13 | a dump that does date itself after all, and a cast nobody can read |
| 14 | zero, across seventy-five repositories |
| 15 | 66,984,570 bytes of medium, and the files that are not here |
| 16 | nine errors in the pre-briefing, and five of my own |
| 17 | 99.84 % of the picture, and the exact place I stopped |
| 18 | the predictions, scored |
.IMV is derived, and the derivation is checkable. Each block states its
own size and the previous block's, so size[i-1] == prev[i] is a test a
wrong layout cannot pass by luck. It holds on 157 of 157 files and every
block in them. And the chain runs in segments — 3,879 of them — each
starting on a CD sector boundary, each restating the stream header, each
naming the next one's sector. That is why every one of the 157 files is an
exact multiple of 2,048 bytes: not padding, structure. A 1× drive can
begin decoding anywhere.
The running time comes out twice. 97,730 declared frames at 15 fps is 6,515.3 seconds; 143,276,490 bytes of audio at 22,050 Hz is 6,497.8. They disagree by 0.269 %.
One container format opens every data file on the disc — the script, the newspaper, the character tables, a 2.2 MB art bank and 8.5 MB of sampled sound, 30 files. It writes down where its records end twice, and how many there are twice. The one data file that fails, fails loudly.
And the thing this repository is most sure of is smaller than it started out. The first draft said the pictures were filmed. Measured against the disc's own bank of hand-painted art, the one frame described in detail is a drawing — and 123 of the 157 first frames open in a fade from black and cannot be judged at all. The sound is settled as a recording. The picture source is not, and 12 says so.
Seven were written here. They live in tools/ alongside the 351
inherited from the previous pipeline.
imv.py |
the .IMV reader — validate, census, segments, key frames, WAV, and --reject as a negative control |
icomdat.py |
ICOM's container format, with both cross-checks |
palfit.py |
scores candidate readings of a palette against a shuffled control, and says so out loud when none separates |
flatness.py |
tells art drawn in a palette from a continuous-tone source, using the disc's own painted art as the control |
mz.py |
a real-mode DOS MZ header and relocation-table reader — this collection had never read one |
controltat.py |
the VIS vendor block, as a table instead of four paragraphs of prose. This one belongs to every future VIS disc |
mctext.py |
the case-file censuses |
vistokens.py |
asks a disc what it knows about the machine it is on — and prints file names and offsets, never a bare count |
| vis-platformnotes-doc | the canonical checklist. This disc is the first pressing ever to feed it |
| vis-gamelist-doc | the index. This disc is its first entry |
notes/sha1-all.txt — 193 records, sizes summing to 445,760,838, 186
distinct hashes. It exists so that anybody holding an MS-DOS pressing of this
title can settle 11 in a minute.