Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Alfred Chicken (Amiga CD32, 1993) — disc documentation

Twilight for Mindscape, 1993. Structural documentation of the code and file layout of the Amiga CD32 release, read from an original pressed disc.

This is the eighteenth disc documented against the shared platform checklist at cd32-platformnotes-doc, and the first one read from physical media rather than from an image file. That changes what could be measured, and three things on this disc could not have been established from a file at all.

What this disc settled that seventeen images could not

The thirteen zeros are real. The MCN was read from subchannel Q with MCVAL set: 0000000000000, thirteen ASCII zeros, on the disc. Four discs in the set carry the same thirteen zeros in a third party's .cue, and the worry was that a dumper had lost a real catalogue number. It had not. Four checklist rows stand.

The overrun is the mastering, and its mechanism is now known. Fifteen of the seventeen previous images overrun their declared volume by 32..232 sectors, and from a file it is impossible to tell the disc from the dumper. Here the declared volume is 691 sectors and the disc physically carries 918 — every one a valid MODE1 sector with a correct sync pattern, a matching header address and a passing EDC. The 227 extra sectors are all zero, they are genuinely cut into the glass master, and they stop exactly where track 2's pregap begins. The data run is padded up to the next track. That explains the whole 32..232 range across the set without invoking a dumper artefact anywhere.

MODE1/2048 is verified, not assumed. Every .cue in this set says MODE1 and no disc had ever been checked. Reading raw 2,352-byte sectors and descrambling them (ECMA-130 annex B) exposes the header: mode byte 1 on all 902 sectors checked, not sampled.

Two more the physical disc gave for free: no ISRC on any of the ten tracks (TCVAL=0, a field the set has never had), and the nine audio tracks are perfectly contiguous — one 150-sector pregap on the whole disc, none between audio tracks, and no track begins with silence.

The disc

tracks 10 — 1 data (MODE1/2048), 9 audio
data track LBA 0–1067: 918 sectors of data + 150 of silent pregap
lead-out LBA 93,513 = 20:48:63
declared volume 691 sectors — 227 fewer than the disc carries
audio 92,445 sectors, 20 min 32 s99.02 % of the physical disc
MCN 0000000000000 (MCVAL=1) · ISRC: none · CD-TEXT: none
PVD system id CDTV, volume Alfred, publisher Mindscape
data preparer Abersoft - ISOCD 1.04 by Pantaray, Inc. USA -
master cut 1993-12-06 17:54:10
files / directories 30 / 4, zero empty directories
bytes on disc / resident / used 1,261,776 / 1,636,635 / 1,610,416
expansion / slack 1.297× / 1.602 %
compression RNC ProPack method 1, 11 streams, CRC-validated 11 of 11, nesting depth 0
C2P / Akiko none / all four figures absent
matrix ring CDD2971 · /CS090011 · MASTERED BY NIMBUS · no IFPI

Guardian's floor falls. Bytes-on-disc had stood at 2,249,822 through seventeen discs; this is 1,261,776 — 43.9 % below it — and the expansion factor, 1.297×, is the lowest of eleven measured. Both for a stated reason: this disc puts its content in Red Book audio, not in its data track.

The image, and why it took two paths

Neither obvious way of reading the disc could read all of it.

  • ReadFile on \\.\E: stops at the end of the logical volume — 691 sectors — and is the only path on this drive that can read LBA 0–15.
  • Raw CDDA transfers, descrambled here, reach every sector including the 227 past the volume, but cannot read LBA 0–15 on this drive.

Both were used. Where they overlap — LBA 16–690, 675 sectors — they were compared: they agree byte for byte. That is a guarantee none of the seventeen previous images has ever had, and tools/buildimage.py refuses to write an image if the overlap disagrees.

Along the way the drive was caught returning wrong data on the first transfer after a seek — two dumps of the same 918 sectors gave two different wrong answers. Because a MODE1 header contains the sector's own address, and the sectors have to be descrambled anyway, every sector can prove its own identity for free. tools/rawsectors.py checks sync, header address and EDC on every sector and retries. After that: 0 retries needed, 0 unreadable, 0 EDC failures. A dumper writing 2,048 bytes per sector cannot see this at all.

image/alfredchicken.cue is derived from the TOC read off this disc and says so in its own REM lines. For the seventeen previous discs it was the other way round: the cue was a source, and its CATALOG, track modes and pregaps were inherited claims.

Local branch pushed: master.

The four owners, and the pair that separates mastering from packing

This is the first disc in the set where all four manufacturing steps have a distinct, observable owner and all four slots are filled:

step owner read from
game build Twilight RCS keywords, SAS/C debug records, alf.c, the label's copyright
label Mindscape PVD publisher field, silkscreen
premastering Abersoft PVD data preparer field
glass master, pressing Nimbus matrix ring, absence of any SID

Abersoft is the second company to appear in a preparer field, after Rob Northen Computing on Myth — and the pair settles a question the set has been circling. Myth's preparer was Rob Northen Computing and its packer was Bytekiller; this disc's preparer is Abersoft and its packer is Rob Northen's RNC ProPack. Two discs, the roles swapped, and in neither case does the mastering house's tool appear in the master it cut. The mastering step and the packing step do not touch.

And D J Pocock still leaves a 232-sector final run while nobody else does — 5 of 5 against 13 of 13. This disc's final run is 32.

Mindscape twice

Liberation: Captive II (Byte Engineers / Mindscape, 1994) is already in the set, so this is a same-publisher pair. Across preparer, final run, codec, boot architecture, save system, scale, executable format and dating method, the two discs share one thing that fifteen other discs do not also share: the premastering tool. Full column-by-column comparison in docs/11-label-comparison.md; the short version is that the publisher's name predicts nothing about how the disc was made.

What is inside

11 levels built from 6 tile sets, read straight out of alfred as two parallel fixed-stride tables — and a twelfth entry, cloud, that exists only in the tile-bank table, which is why cloud.map and cloud.unpack have no CLOUD.PAK beside them.

The tile geometry was derived, not guessed, and two independent measurements agree: every one of the eighteen unpacked graphics pieces is an exact multiple of 128 bytes (16 × 16 pixels × 4 planes), and for all seven <name>.unpack / <name>.map pairs the largest index in the 1,024-byte map is exactly (length / 128) − 1. Seven of seven. Rendering settled the internal layout as row-interleaved, and also refuted part of the arithmetic: seventeen of the eighteen pieces are tile banks and the eighteenth, frontend.pak, is the 320 × 184 title screen — the game's own name, drawn.

The engine stores no copper list, no palette, no blitter control word and no BLTSIZE — it computes them at run time. But it is not uniformly dynamic: it writes BPLCON0, BPLCON2 and BPLCON3 as immediates, and alfred's two BPLCON0 writes give BPU = 4 — a third independent confirmation of the tile geometry, from the hardware register. intro runs five planes and calls both LoadRGB4 and LoadRGB32, making this the third disc in the set to call both.

The archaeology

  • intro ships a working Amiga hardware debugger: 47 register description strings lifted verbatim from Commodore's hardware/custom.i, and copdis, a copper list disassembler with a null guard and an unknown-opcode path. alfred has none of it — the two executables are builds of one code base fourteen months apart (RCS check-outs 1992-09-29 and 1993-11-19), and the older one is the one that still has the scaffolding in it.
  • alf is 46.9 % debug information — the whole SAS/C 6.00 symbol table, alf.c, and a line-number table. What it does is run intro and then alfred.
  • alfred.info's DefaultTool is the string JUNK.
  • End Of All Vars! sits in alfred between the globals and the code — a fencepost somebody left for reading memory dumps.
  • JJS is stamped into both executables by RCS at check-out, and the shipped boot script tests for a volume called JJSDISK: — the same initials, in two independent places, one written by a machine.
  • 57 tiles of artwork are drawn, packed, pressed and never placed by any map (12.8 % across all seven banks).
  • The only place this disc writes its own title in a form a human reads is in pixels. There is no string table, because there is essentially no text.

Documents

00-predictions.md written after the TOC and before the PVD, committed unchanged
01-physical-carrier.md matrix ring, silkscreen, and what the plastic says
02-toc-and-subchannel.md TOC, MCN, ISRC, sector mode, pregaps
03-image-and-method.md the two read paths and the cross-check
04-volume-and-filesystem.md PVD, .TM, sector map, file census
05-timestamps.md the build log, step 39, the RCS keywords
06-compression.md RNC, the three band figures, duplication
07-graphics.md C2P, Akiko, blitter, and the derived geometry
08-audio.md nine tracks measured from the drive
09-text-and-strings.md a fifth string model: there isn't one
10-code-and-engine.md three executables, two build epochs
11-label-comparison.md Alfred Chicken against Liberation
12-open-questions.md what this disc could not settle
13-prediction-scoring.md 19 right, 7 wrong, 1 vacuous — and what the wrong ones bought
14-tools.md new, inherited, and the ones that lied
15-leftovers.md the archaeology

Tools

New here: rawcd.py, rawsectors.py, buildimage.py, audioscan.py, makecue.py, band2.py, idstrings.py, tilesheet.py, dupscan.py.

Inherited and reused unmodified: isodump.py, rnc.py, packscan2.py, akiko2.py, c2pscan.py, copperscan.py, blitscan.py, hunkinfo.py, lvoscan.py, libscan.py, strs.py, textcensus.py, dispatch.py, iffle.py, timeline.py, planar.py, relocs.py and others.

Inherited tools that lied on this disc, checked before the answer was written down: band.py reports zero streams because it knows only IMP! and ATN! — run unmodified on the Superfrog tree it reports 158, so the zero is its magic list, not a measurement. devpaths.py reports two false positives and misses all three real device paths. Full accounting, including the three faults in tools written this session, in docs/14-tools.md.

Scope and provenance

Analysis and documentation only. No game code or asset data is redistributed here: the repository contains the tools, the measurements and the notes, and no image files, extracted assets or disc image — the same convention as the other seventeen repositories in this set. Every render described in the documentation is reproducible from the disc with tools/tilesheet.py and tools/planar.py. The 217 MB of Red Book audio is not published either; per-track SHA-1s are, so the read is reproducible from the disc.

Every figure comes from a read performed in this session. Where a claim rests on something outside the disc — the physical transcription, or a photograph of a second copy used to confirm that the matrix identifiers are properties of the pressing run rather than of one copy — it is labelled as such in docs/01-physical-carrier.md. Background about who Nimbus, Mindscape and Twilight were is context, not measurement, and is not asserted here.

Alfred Chicken is a trademark of Twilight; the disc's own copyright line reads Copyright (C) 1993 Twilight.

About

Alfred Chicken (Twilight / Mindscape, Amiga CD32, 1993): structural documentation read from an original pressed disc, the first physical one in this set. Settles that the thirteen-zero CATALOG is the mastering not the dumper, that the overrun past the declared volume is cut into the glass master, and verifies MODE1/2048 by descrambling.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages