Skip to content

Latest commit

 

History

History
104 lines (91 loc) · 8 KB

File metadata and controls

104 lines (91 loc) · 8 KB

00 — The disc in one table

HeroQuest II: Legacy of Sorasil, Gremlin Graphics, 1994, for the Amiga CD32. An isometric, point-and-click adaptation of the Milton Bradley / Games Workshop board game, licensed from Hasbro. Six tracks: one MODE1/2048 data track and five Red Book audio tracks.

Every number below is produced by a tool in tools/ from the disc image; the raw output is in notes/.

Publisher / studio Gremlin Graphics Software Limited, Sheffield, UK
Licence "Heroquest © 1994 Hasbro International Inc. All Rights Reserved. Heroquest was developed in association with Games Workshop" — on the logo screen, and nowhere else on the disc
Master cut 1994-06-15 17:34:13, and the game executable was written 11 minutes 34 seconds earlier
Mastering tool ISOCD 1.03 by Pantaray — the first disc in this series that is not 1.04
Data preparer Kevin Dudley - ISOCD 1.03 by Pantaray, Inc. USA -and he is the game's programmer, named on its own credits screen
PVD system id CDTV (tenth disc of ten)
Volume id Legacy of Sorasil
Volume set id 15 June 1994 17:30 — a hand-typed date, four minutes before the master
Application id Legacy of Sorasil CD32 — the title and the console
Tracks 1 data (MODE1/2048) + 5 audio, 1,902.1 s = 31 min 42 s
Data track 25,663 sectors in the image, 25,436 declared, overrun 227, all zero
Share of a 333,000-sector CD 50.5 % — data 7.6 %, audio 42.8 %
Files / directories 97 / 7, 2,156,143 bytes
Unpacked 4,285,931 bytes = 4.09 MB — inside the 2.7–13.3 MB band for the tenth time
Compression RNC ProPack method 1 with an XOR layer over the literals — 106 blocks in 92 files, 49.1 %
.TM block sector 21, 2,048 bytes, the eighth byte-identical copy of Commodore's; no .TM file in the root
Unclaimed sectors 32, all zero, at the end (seventh disc at exactly 32) — and 24,272 zero sectors at the front, 95.4 % of the volume
Boot script 208 bytes, seven non-blank lines: setpatch, loaderblackpal, Stack 8192, three Assigns of floppy volume names, QuestII 2
libs/ absent. freeanim.library is opened by /loaderblackpal, which ships with its symbol table intact
Libraries opened by the game 4, all via OpenLibrary (−552): dos, graphics, nonvolatile, lowlevel — graphics.library is never called
Devices opened cd.device twice, input.device once
AGA none. No BPLCON3, BPLCON4, FMODE or DIWHIGH anywhere on the disc; LoadRGB4 and LoadRGB32 both never called; 5 bitplanes, 32 colours
Akiko untouched — 0 C2P-port references, 0 pointer loads, 0 $C0DE0000, in the image, in all 97 files and in all 111 decrunched blocks
Graphics plane-separated planar, 320 × 200, 4 and 5 planes; sprites 32 px wide, 6 planes, 24 bytes per row on all 36 files
Text 362 strings per language in three languages, 7-bit ASCII, accents encoded as punctuation
Music 6 ProTracker modules + 39 raw PCM effects + Red Book — of which only tracks 2 and 3 are ever played
Save system CD32 nonvolatile.library alone — app Hero Quest II , item Save; stores 24 bytes and reads 238 back
Floppy SKU yes, and the disc reconstructs it: every file is addressed as Legacy of Sorasil DISK 1/2/3: — 13, 39 and 39 files

What is actually on it

Half the disc is Red Book audio and the other half is mostly empty. The game itself is 2.1 MB on the disc and 4.1 MB unpacked: an executable, six pieces of music, nine dungeons' worth of maps, tiles and illustrations, 36 character and monster sprite sheets, 39 sound effects and three language files.

Three things about it are worth the repository:

  • it is a three-floppy A1200 game with its floppy loader intact, and the loader still addresses all 91 of its files through the volume names Legacy of Sorasil DISK 1:, DISK 2: and DISK 3: (docs 03 and 11);
  • its cruncher is RNC ProPack method 1 with an obfuscation layer nothing else on this format uses — every literal byte XORed with the low byte of a 16-bit key that rotates one bit right after each literal run, in three variants that the CRC in each block's own header tells apart (doc 04);
  • it is the second disc in this series with no AGA register anywhere, after Dragonstone, and the first where the reason is legible in 228 bytes: a root command called loaderblackpal that opens freeanim.library and then writes exactly 32 colour registers to black (doc 06).

The documents

Doc Contents
01-disc-and-filesystem.md ISOCD 1.03, a date typed into the volume-set field, and 95.4 % of the volume left empty in front of the files
02-timestamps.md A six-minute copy session, three later files, and a master 11 minutes after the executable
03-boot-chain.md Seven lines, three floppy volume names, and two commands byte-identical to other studios'
04-compression.md RNC ProPack 1 with a rotating XOR key — three variants, 106 blocks, every CRC verified
05-executable.md A hunk file that decrunches and relocates itself in 584 bytes
06-display-and-akiko.md AGA measured to zero and Akiko measured to zero, and the 228-byte program that settles the colour count
07-graphics-formats.md Plane-separated screens, 64 × 64 maps of 8-byte cells, and 24 bytes per row on all 36 sprite sheets
08-text-and-licence.md 362 strings × 3 languages, accents mapped onto ( ) * +, and the Hasbro / Games Workshop notice
09-audio.md Six ProTracker modules, 39 effects, and three Red Book tracks nothing plays
10-input-and-saves.md Two ports feeding one pointer, and a save that stores 24 bytes and reads 238
11-archaeology.md A title screen that still calls the game Masters, a publisher logo with the copyright removed, and a Sheffield pub
12-open-questions.md What is unresolved, with the measurement beside it
notes/file-inventory.md All 97 files with LBA, size, timestamp, SHA-1, packing and unpacked size
cd32-platformnotes-doc Platform checklist — what to look for on any CD32 or CDTV disc. Shared by every Amiga CD pipeline in this series; this repository does not keep a copy

Hunk and file offsets — the convention used throughout

This matters here, because the game executable's three large hunks are compressed and their contents therefore have two different addresses.

  • File offset means a byte position in a file exactly as it sits on the disc. Written 0x1234 and always qualified with the file name.
  • Hunk offset means a byte position inside a decompressed hunk, counted from the first byte of that hunk's image in memory. /QuestII unpacks to _work/unpacked/QuestII.hunk1, .hunk2 and .hunk4, and every address quoted for the game's code and data in these documents is a hunk offset into one of those three files, named explicitly.
  • Absolute addresses printed by a disassembler ($36f70, $25800) are unrelocated hunk-relative values as they sit in the file. AmigaDOS adds the target hunk's base at load time, so they are useful as identities and useless as addresses. They are never quoted here as memory locations.
  • Copper-list offsets are file offsets into QuestII.hunk4, whose list starts at byte 2, not byte 0.

Capstone's M68K backend prints wrong-but-plausible immediates, displacements and branch targets on this code. Every constant in these documents was re-read from the raw bytes, and tools/m68kdis.py prints the bytes beside every instruction so that the re-reading is reproducible.