Skip to content

Latest commit

 

History

History
191 lines (145 loc) · 7.87 KB

File metadata and controls

191 lines (145 loc) · 7.87 KB

10 — What this disc shares with other CD-i titles

Five results here, and every one came from comparing rather than from analysing — two new identities and three corrections to what the earlier pipelines wrote down. The shared checklist that makes them cheap is cdi-platformnotes-doc.

1. The Philips bumper is byte-identical to Link's

/CMDS/philips.rtf on The Apprentice (The Vision Factory, Netherlands, 1994) and the bumper stream on Link: The Faces of Evil (Animation Magic / Philips Interactive Media of America, USA, 1993) are the same file.

Not similar. The same bytes.

stream channel coding sectors payload MD5 identical
RL7 video 15 0x04 121 278,784 B 383be6befb8e… yes
Level B stereo audio 15 0x01 149 343,296 B c8547a7e4886… yes
DYUV picture 16 0x05 40 92,160 B 4f19073bf9f6… yes
descriptor 16 data 1 2,304 B no, 37 bytes differ

714,240 bytes of video and audio, identical across two studios, two continents and eighteen months. The channel numbers are the same, the codings are the same, the sector counts are the same, and the one data sector that differs is the container's own descriptor — its first 2,048 bytes match exactly and only the 37 bytes after them differ, which are the per-disc fields.

The DYUV picture is 40 sectors × 2,304 bytes = 92,160 = 384 × 240 exactly: CD-i normal resolution at NTSC height. That geometry is proved by the arithmetic rather than guessed at.

The descriptor sector opens with a four-byte magic and a tagged field dictionary:

ba be fa ce  00 00 00 05  00 00 00 00  01 00 00 00 ...
... "cluts\0count\0filenum\0frame_size..."

0xBABEFACE, and the field names cluts, count, filenum, frame_sizes. That is the publisher's stream container, and grepping a new CD-i disc for babeface is now a one-second test worth running.

What this means in practice: the Philips bumper was distributed to licensees as a finished asset and pressed verbatim. Hashing the DYUV payload of a new disc against 4f19073bf9f625c6e620a065ad43cb5f will identify it immediately, exactly the way hashing the head-region filler does.

Merlin's Apprentice, published by the same company two years later, has no bumper stream at all.

2. The filler recording is a third one

The strongest result the earlier pipelines produced is that the 2,250 sectors of filler in front of the file system descramble to the same 5,229,000 bytes of recorded speech on three unrelated discs:

Link     1993   sectors 19-2268   md5 a0ed87f2e98b43f91281d16390fb178b
Origami  1993   sectors 18-2267   md5 a0ed87f2e98b43f91281d16390fb178b
Merlin   1995   sectors 19-2268   md5 a0ed87f2e98b43f91281d16390fb178b

Ultra CD-i Soccer, in 1997, carries a different recording in the same place.

The Apprentice, in October 1994 — between Merlin and the 1993 pair in date, and inside the window the trio brackets — carries a third:

Apprentice  1994  sectors 18-2267   md5 4e61f608e1f1455d9ad5b2a0615dbbd3

It is not the 1993–95 recording, and it is not Soccer's either. The comparison was done properly rather than by hashing alone, because both clips contain long runs of digital silence that produce false matches: sampling non-trivial 512-byte windows every 4,096 bytes out of each of Soccer's two clips and searching for them in each of this disc's two clips gives zero matches in all four directions, and the same test run the other way gives zero as well.

So the filler is not a single artefact of a single tool. Its structure is common and its content is not:

disc year studio clips L == R peak recording
Origami 1993 EagleVision, NL one, 2,250 sectors 1.4 % of frames 23,345 A
Link 1993 Animation Magic, US one, 2,250 sectors 1.4 % 23,345 A
Merlin 1995 PIMA, US one, 2,250 sectors 1.4 % 23,345 A
Apprentice 1994 Vision Factory, NL two, in 2,250 sectors 100 % 16,383 B
Soccer 1997 Krisalis, UK two, mixed with zeroes 100 % C

On the structural tests this disc sits with Soccer: two separate clips rather than one continuous take, and left bit-identical to right rather than merely correlated. On content it sits with neither.

Peak 16,383 is 2^14 − 1, which no other disc's filler shows. Either the source was 14-bit or it was attenuated exactly 6 dB.

What is the same is the mechanism

Everything structural matches the other four discs to the byte:

2,250 sectors, ending immediately before the path table
subheader  00 00 20 00  on all of them
EDC field  00 00 00 00  on all of them
28 bytes destroyed per sector

And this disc proves the last of those from the other side. On the four data-mode dumps the region reads as audio-XOR-scrambler and has to be descrambled; on this audio-mode dump it reads as audio directly, and XORing it gives noise. Same object, opposite views, and the boundary-discontinuity test gives the same 28 bytes either way. See 01-disc-image.md.

And one thing that is new

This is the first disc to write the filler twice:

head  18-2267      5,229,000 B  md5 4e61f608e1f1455d9ad5b2a0615dbbd3
tail  57868-60117  5,229,000 B  md5 4e61f608e1f1455d9ad5b2a0615dbbd3

Link, Origami, Merlin and Soccer all pad the tail with plain zeroes. Here the same block brackets the volume.

3. The -F that was not a linker option

Recorded here because it corrects a note the previous pipelines carried. Origami's and Merlin's main modules were read as ending <module name> NUL -F NUL, with -F taken to be a linker option string of unknown meaning. It is neither a string nor an option:

2D46 8010    MOVE.L  D6,-$7FF0(A6)      "-F"
2D46 8014    MOVE.L  D6,-$7FEC(A6)      "-F"
3D43 8018    MOVE.W  D3,-$7FE8(A6)      "=C"
082B 0005    BTST    #5,$0005(A3)

M$Exec on Merlin's cdi_merlin is 0x54, and the bytes at 0x54 are 2d 46 80 10 2d 46 80 14 3d 43 80 18 08 2b 00 05 — the first four instructions of _cstart. The same sixteen bytes open cdi_philips, cdi_factory and cdi_invaders on this disc.

It is a better fingerprint than the thing it was mistaken for: a shared Microware C entry sequence across two studios and two years, greppable as a fixed sixteen-byte run.

4. The CD-DA attribute bit

The directory attribute table in circulation puts the CD-DA flag at bit 12. The twenty-two /CDDA/trackN.cda entries here are unambiguously CD-DA — their extents are the Red Book tracks — and every one of them sets bit 14, while nothing else on the volume does. No previously documented disc exposed its audio tracks as files, so nothing had exercised the bit. Corrected in tools/cdilib.py.

5. Misspelling the publisher's own name

Link        volume descriptor, publisher field
            "Philips Intractive Media of America, Inc."       no 'e'
Apprentice  bibliographic file
            "Philips Interacive Media inc."                   no 't'

Two of five discs, different fields, different studios, different countries. Typos live in the fields that were typed; the DYUV logo three sectors away spells it correctly on both.

Where these went

All five are folded back into cdi-platformnotes-doc rather than kept here: the bumper is its new section 5b, the third filler recording and the head/tail duplication extend section 2, the attribute bit corrects section 3, and the -F correction rewrites part of section 5.

Reproducing this

python tools/cdihead.py hash
python tools/cdirtf.py census

The cross-disc comparisons need the other disc's image and are four lines of Python: pull the sectors matching (channel, submode & 0x0e, coding) from each, take 2,304 bytes from each sector, and compare.