Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cd32-jamespond2-doc

James Pond 2: Codename RoboCod (Amiga CD32, 1993) — measurements of the pressed disc: what is on it, how much of it is nothing, and the code that reproduces every figure.

No porting, no reverse-engineering toward a re-release, no assets. This is a description of one CD and the commands that produced it.

→ Start at docs/00-predictions.md, which was written before the volume was walked, and docs/13-prediction-scoring.md, which scores it. The wrong predictions are left in place with the measurement above them; they are the most useful pages here.

The platform-level findings — the ones that belong to the format rather than to this title — go to the shared checklist, cd32-platformnotes-doc, which this disc is the nineteenth entry in.


What the disc turns out to be

A 1991 two-floppy Amiga platform game, converted for AGA and the CD32 in 1993, pressed onto a disc where the game is 1.47 % of the file bytes.

python tools/budget.py

data track    100125 sectors   57.97 % of the disc   30.07 % of a CD
track 2 pregap   150 sectors    0.09 % of the disc
audio 2..8     72450 sectors   41.95 % of the disc   21.76 % of a CD
TOTAL         172725 sectors   51.87 % of a 333,000-sector CD

system area + descriptors + path tables + .TM + root      23   0.023 %
the hole, LBA 23..65558, all zero                      65536  65.552 %
directory extents (6 directories)                          8   0.008 %
file extents (135 files)                               34376  34.385 %
trailing run, all zero                                    32   0.032 %
SUM                                                    99975  100.000 %  -> exact

Nine things this disc produced.

1. A hole of exactly 128.000000 MiB. 65,536 sectors — 2^16 — of verified zero, in front of the files, 65.55 % of the declared volume. It is the third round hole in this set after Myth's 50.000000 MiB and Gunship 2000's 100 MiB, and there has never been a ragged one. Add the 8.02 MiB of zero padding inside the CDXL chunks, the 32-sector trailing run and the 150-sector overrun and 69.74 % of the 195 MiB data track is zero.

2. And the hole is not why the data track is big. The prediction file ranked four hypotheses for a 195.6 MiB data track under a two-floppy platformer — a hole, video, audio-in-the-data-track, or a genuinely large game — and treated them as alternatives. Two of them are true at once: 65.55 % hole and 93.90 % of the file bytes are CDXL video, 65,976,124 bytes in three streams holding 2,631 frames. No disc in this set had previously been both.

3. Cartoon, FI5H, RoboCod — the disc is a three-way menu and the game is one option. The boot script is a shell-level main loop: Lab select / RoboSelect / three if blocks on an environment variable / Skip select BACK, forever. One branch plays a 2 m 43 s cartoon (Main.cdxl, 2,038 frames), one opens a three-language electronic book, one starts the game.

4. A three-language manual with no characters in it. 115 IFF ILBM pages, 320 × 200 × 8 planes, ByteRun1, in English, French and German — 7.36 MB of raster reduced to 2.98 MB — and a prose census over the whole disc of 10,875 bytes. All 115 pages share one byte-identical palette; exactly one page is byte-identical across the three languages and it is the largest and inkiest, i.e. the one illustration with no text. 17 pages carry a Deluxe Paint DPPS chunk — ten English, seven French, zero German, a build split from a chunk nobody reads. Page 1 says the book is called FI5H FILE.

5. All seven Red Book tracks are reachable, from a table, with the TOC never read. RoboCod issues exactly three CD commands — CD_PLAYTRACK (37) and CD_PAUSE (40) twice, pause and resume — and no CD_INFO, CD_TOCMSF, CD_TOCLSN or CD_GETNUMTRACKS anywhere. The track number comes from byte 11 of an 86-record, 12-byte-per-level table, where bit 7 of the music id chooses Red Book or Paula; every one of the 86 chooses Red Book, and tracks 3 to 8 are used 15 / 14 / 19 / 9 / 24 / 5 times, with track 2 from a constant in the front end.

6. A programmer's apology, and the copper list agrees with it to the bit. A 469-byte unreachable message in the game executable reads "I'm sorry that RoboCod hasn't got more colours but if I'd have gone to 8 planes it'd have been so slow… I'm not stupid enough to leave debug symbols in". The one stored copper list has BPLCON0 = $5201five bitplanes, 32 colours — and the hunk chain has no HUNK_SYMBOL and no HUNK_DEBUG. Both claims true. And the same list writes the 32 colour registers twice, with BPLCON3 LOCT toggled between the passes, so the palette is 24-bit: 32 simultaneous colours out of 16.7 million.

7. The boot script is a signed development diary, and its dates check out. S/Startup-Sequence is 3,922 bytes of which twenty-one are the launcher. The rest is a comment by Dean Ashton — who is also the name in the ISO 9660 data-preparer field, the sixth individual there in nineteen discs. Three of its claims are testable and all three pass: it says the script was written at 1:30am on 14.07.93 and four files are stamped 00:03 to 01:18 that morning; it says "it's now Sunday 15th August 1993, at 10:05am" and 15 August 1993 was a Sunday with three directories rebuilt 36 to 45 minutes later; it says "Friday 13th was so bad for us" about converting animation, and 13 August 1993 was a Friday with Intro.cdxl stamped 21:33 that evening. It also names the tools that touched the disc and appear nowhere else on it — 16-bit TARGA captures with the red and blue cables swapped, an ARexx script written to fix them, an A3000 that died, a flaky NEC drive on an A4000/040 — and carries a 22-line credit list, five entries longer than the game's own.

8. Nothing is packed, and there is a mechanism. Zero occurrences of thirteen cruncher magics across all 205,056,000 bytes; no file whose first longword is its own size; one file of 135 above 6.7 entropy with an innocent explanation. The reason is in the hunk table: all three of RoboCod's hunks are CHIP, 1,185,496 bytes of a 2 MB budget, so there is no room for a decrunch buffer.

9. The size band's floor moves for the second time in two discs. The game is 1,033,508 bytes on disc and 1,258,076 resident — 18.1 % and 23.1 % below Alfred Chicken's, which had just broken a floor that stood for seventeen discs. Both times the disc that moved it was a platform game whose content lives somewhere other than the data track. The ceiling has never moved.

And Akiko is untouched: zero $B80000 pointer loads across all eight address registers, zero C2P-port references, and 122 C2P merge constants as data against zero as immediates. Nineteen discs, and the chunky-to-planar port has now been zero on every one of them; this disc reaches the drive through cd.device and the CD32's save EEPROM through nonvolatile.library, so even the two non-graphics uses of the chip go through Commodore's own layers.


The disc

CATALOG 0000000000000
TRACK 01  MODE1/2048   205,056,000 bytes = 100,125 sectors exactly
TRACK 02  AUDIO  PREGAP 00:02:00        3:00.00   180.000000 s
TRACK 03  AUDIO                         3:50.00   230.000000 s
TRACK 04  AUDIO                         2:13.49   133.493333 s
TRACK 05  AUDIO                         2:37.84   157.840000 s
TRACK 06  AUDIO                         1:30.00    90.000000 s
TRACK 07  AUDIO                         1:11.00    71.000000 s
TRACK 08  AUDIO                         1:43.67   103.666667 s
                                       16:06.00   966.000000 s, 72,450 sectors
volume identifier      RoboCod_CD          system identifier   CDTV
application identifier RoboCod_CD32        publisher           Millennium Interactive Ltd
data preparer          Dean Ashton - ISOCD 1.04 by Pantaray, Inc. USA -
creation date          1993-08-17 10:12:55 (+0)
volume space size      99,975 sectors      image  100,125      overrun 150
.TM block              2,048 bytes at LBA 21, SHA-1 c5ffcef2… — identical to sixteen
                       previous CD32-era discs

135 files in six directories. The whole tree:

/RoboCod             959,956   the game: 86 levels, all art, all sound, three CHIP hunks
/RoboLoader            7,048   blanks the screen and starts it
/RoboSelect           66,504   the three-way selection screen
/C/{assign,cdgsxl,EBook,FreeAnimation,SetPatch}    115,500
/CDXL/{ident,Intro,Main}.cdxl                   65,976,124   93.90 % of the file bytes
/Devs/system-configuration                             232
/Libs/{asl,iffparse,lowlevel,nonvolatile}.library    58,308
/Pages/ebook.{uk,fr,gr}.*                        3,075,365   115 pages + 3 chapter indices
/S/Startup-Sequence                                  3,922   and it is the best file here

The documents

00-predictions.md written before the volume was walked, never edited except to add the measurement under each
01-volume-and-mastering.md the descriptor, the preparer field and the correlation it tests, the 150-sector overrun and the pregap it equals, the sector budget, the 128 MiB hole, the .TM block
(the .TM trademark block is in 01, not a chapter of its own)
03-timestamps.md one 1978 file falsified by its own $VER:, a clean ten-week build log, and a prose comment whose three dates the filesystem confirms
04-boot-chain.md the shell-level main loop, FreeAnimation in five instructions, the 68020-and-AGA requirement in nine, and the 44-line signed diary
05-compression.md thirteen magics over 205 MB returning zero, the two magic-free tells returning zero, and the chip-RAM budget that explains why
06-graphics.md the apology and the copper list that confirms it, five planes with a 24-bit LOCT palette, the AGA gate, the Blitter's three questions, C2P at zero
07-cdxl.md three streams, 2,631 chunks, a header whose audioSize field disagrees with its chunk size by 3,324 bytes and a scan that settles which is right; HAM6 identified from arithmetic; a closed-loop audio resampler in an interrupt handler
08-audio.md seven tracks measured from the payloads, four cut to whole seconds and three not, and the 86-entry table that makes every one of them reachable without reading the TOC
09-text-and-the-ebook.md a sixth string model: a complete three-language manual containing no characters, measured in pixels — and the one render that answers what measurement cannot
10-code-and-engine.md one file, three CHIP hunks, 69 library calls, two interrupt servers, 16 jump tables, and the level table read column by column
11-size-band.md the floor moves from 1.26 MB to 1.03 MB, and what the band was really measuring
12-open-questions.md ten open, two answered mid-session by rendering one page
13-prediction-scoring.md four hits, three misses, two mixed — and the misses are worth more
14-tools.md what each tool measures, the fourteen scans that returned nothing, and why one tool's output is deliberately not committed
15-leftovers.md 69.74 % zero, three hidden messages, and what to do next in order

Reproducing it

Put the eight track files and the cue sheet in the repository root — they are not committed — and run:

mkdir -p extract notes
python tools/pvd.py         "James Pond 2 - Robocod (1993)(Millennium)(Track 1 of 8)[!].iso"
python tools/isodump.py     "James Pond 2 - Robocod (1993)(Millennium)(Track 1 of 8)[!].iso" \
                            --extract extract --json notes/iso.json
python tools/budget.py
python tools/census.py      extract
python tools/audiotracks.py .
python tools/cdxl.py        extract/CDXL/*.cdxl --scan
python tools/pages.py       extract/Pages
python tools/leveltable.py  extract/RoboCod

Plain Python 3, no dependencies except Capstone for tools/dis68k.py and Pillow for tools/render.py. The stored output of every one of those runs is in notes/, so each number in the documents can be checked before the image is even opened.

What is not in this repository: the disc image, the audio tracks, any extracted file, any decoded picture, and any executable. Only measurements and the code that makes them.


Two conventions worth knowing before reading an address

Hunk offsets, not file offsets. Every address quoted for RoboCod in the form $xxxx is an offset into hunk 0, which begins at file offset 40 (a three-hunk header with no resident list). tools/dis68k.py is invoked with --base 0x28 so its listing column is the file offset; the constants inside the code are hunk offsets. EBook's hunk 0 begins at file offset 72. Mixing the two is the largest source of silent error on this format.

Capstone's M68K backend prints wrong-but-plausible immediates on 68020 code. The raw byte column is the authority, and every constant quoted in these documents was re-read from it.

About

James Pond 2: Codename RoboCod (Amiga CD32, 1993) — measurements of the pressed disc: a 128.000000 MiB hole, 93.9 % of the file bytes as CDXL video, a three-language manual with no characters in it, and a boot script that is a signed development diary. Nineteenth disc in the CD32 set.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages