No Red Book track. One MODE1/2048 data track and nothing else in the cue
sheet, so the checklist's usual section-8 question — how many of the disc's
audio tracks does the game actually reach — does not arise, and the TOC column
stays at its four existing answers.
The question that replaces it: where is the music?
The checklist says to count OpenDevice before anything else, because on a disc
with no audio track a zero is expected and says nothing, but a non-zero does.
python3 tools/lvoscan.py → notes/lvoscan.txt.
Displacement -444, with every candidate name printed rather than one guessed:
| binary | OpenDevice |
CloseDevice |
DoIO/OwnBlitter (−456) |
|---|---|---|---|
SuperFrog/SuperFrogCD |
0 | 0 | 0 |
SuperFrog/SFIntro |
0 | 0 | 0 |
s/T17Menu |
0 | 0 | 0 |
Pool/POOL |
2 | 2 | 5 |
SuperStardust/TUNNELDEMO |
1 | 1 | 3 |
SuperStardust/MAINDEMO1 |
1 | 1 | — |
Non-zero, so it has to be cross-checked against the strings rather than reported
as a count. python3 tools/libscan.py — which finds device names by walking
backwards from the NUL-terminated suffix through the character set a real
name uses, so an opcode byte cannot be absorbed:
| binary | device names present |
|---|---|
Pool/POOL |
trackdisk.device |
SuperStardust/MAINDEMO1, MAINDEMO2, TUNNELDEMO |
input.device |
SuperFrog/* |
none |
So the cross-check resolves cleanly: two devices, neither of them audio. Arcade Pool opens the floppy controller and the Super Stardust demos open the input device. Superfrog opens no device at all.
Worth recording because it fired immediately. A naive printable-run dump of this
disc returns Nucd.device, N]Nuscsi.device, Nugameport.device,
N]Nuclipboard.device, ufreeanim.library, udos.library, udiskfont.library.
None of those exist. 4E 75 is rts and reads Nu; 4E 5D is unlk a5 and
reads N].
The N is easy to reject because a library name has no uppercase. The u is
not, because utility.library is real. The exact test, which
tools/libscan.py implements and tools/strs.py documents: if the name
starts with u and the byte before it is 0x4E, that u is the low half of an
opcode. No heuristic needed — it is decidable from the two bytes.
The checklist lists four places the music can be on a disc with no Red Book:
ProTracker-family modules, IFF 8SVX, raw PCM, or an in-house player. Scanning
for the first two:
python3 tools/embedscan.py _work/resident — every offset, not just file heads,
with the ProTracker header validated (song length 1–128, order bytes ≤ 127,
sample volumes ≤ 64):
M.K. M!K! M&K! FLT4 FLT8 4CHN 6CHN 8CHN OCTA CD81 0 occurrences
MMD0 MMD1 MMD2 MMD3 0 occurrences
Zero ProTracker modules. Zero OctaMED modules. P8 predicted ProTracker on the strength of Speris's twelve, and it is wrong.
What is there instead is P41A, found by looking at the bytes of the files
named like music:
SFData/L1MU -> 50 34 31 41 14 1f 0b 00 ... 'P41A'
The Player 4.1A — a replayer format that stores a converted module in the
player's own layout. Its four-byte magic is the version string itself, which is
why neither a M.K. scan nor a cruncher-magic scan finds it. And the disc
confirms the reading itself: /SuperStardust/SND/P40.INGAME1 is a file whose
name says P40 and whose first four bytes are P40B — The Player 4.0B.
Header, read from the files:
+0 char[4] magic, the version string
+4 UBYTE number of patterns
+5 UBYTE a sample-related count (32, 33 and 36 occur, so not "of 31")
+6 UBYTE song length in positions
+7 UBYTE 0
+8 ULONG offset of the sample-descriptor table
+12 ULONG offset of the pattern-offset table
python3 tools/playerscan.py _work/resident →
notes/playerscan.txt: 37 validated modules.
| version | modules | where |
|---|---|---|
P41A |
26 | Superfrog and Arcade Pool |
P40B |
11 | Super Stardust |
So the answer to "where is the music" is: a packed module in a replayer's own format, which is a fifth place and belongs in the checklist. Two different versions of the same replayer on one disc, matching the two development houses.
Nine P41A modules at offset 0 of their own files, one per level plus a title
theme:
| file | resident bytes | patterns | song length |
|---|---|---|---|
SFData/MUSC |
60,446 | 18 | 12 |
SFData/L1MU |
40,514 | 20 | 11 |
SFData/L2MU |
40,122 | 14 | 10 |
SFData/L3MU |
36,282 | 20 | 13 |
SFData/L4MU |
39,024 | 10 | 11 |
SFData/L5MU |
41,680 | 26 | 11 |
SFData/L6MU |
38,956 | 19 | 11 |
SFData/LBMU |
33,876 | 6 | 13 |
SFData/LFMU |
25,422 | 7 | 7 |
And eight more inside SFData/INTROC — small modules at resident offsets
50,470 to 54,680, with 3 to 9 patterns and 1 to 4 samples each, song lengths
9 and 4. One-sample, few-pattern modules are sound effects written as modules
rather than as raw samples: the intro's effect bank is eight tiny tracker tunes
concatenated. The same eight appear again inside SFIntro's raw gap at offset
650,256, 56 bytes further along, because that gap is the near-duplicate of
INTROC described in 05-compression.md.
Five P40B modules inside MAINDEMO1 at resident offsets 245,016–253,248, and
the same five inside MAINDEMO2 at offsets exactly 214 bytes higher —
consistent with the 220-byte code-length difference between the two builds
(06-executables.md). Plus SND/P40.INGAME1 as a standalone
2,022-byte file, 7 patterns, 10 samples.
The samples live separately: SND/SMP.INGAME1 is 18,126 bytes and
SND/7BIT/enemy11-boost is 4,512. The directory name 7BIT says what the
encoding is.
27 validated IFF 8SVX samples in the resident corpus, and all 27 are inside
TUNNELDEMO, at resident offsets from 1,378,212 upward — deep in the
1.44 MB of the "code" hunk that carries no relocations at all
(06-executables.md).
That is the Gunship lesson repeating exactly: a census over files sees zero
8SVX on this disc, and there are 27 of them. The scan has to run at every
offset and over the resident corpus, not the on-disc one.
| count | |
|---|---|
8SVX as a file |
0 |
8SVX embedded in a binary |
27 |
Pool/snd/chipsams.bin.aga (108,574 on disc → 148,422 resident) and
Pool/snd/snd.bin.aga (5,532 → 9,764). The second contains a P41A module at
resident offset 2,752 — 6 patterns, 8 samples, song length 5. The .aga suffix
on both, and the 7 suffix on the eight Pool/gfx/*7 files, are the demo's own
variant naming; chipsams reads as chip samples, i.e. the bank that has to
live in chip RAM.
| question | answer |
|---|---|
| Red Book tracks | 0 |
| tracks the game reaches | not applicable |
OpenDevice calls |
4, in Arcade Pool and Super Stardust; 0 in Superfrog |
| devices opened | trackdisk.device, input.device — no audio device |
| ProTracker / OctaMED modules | 0 |
| The Player modules | 37 (26 × P41A, 11 × P40B) |
IFF 8SVX |
27, all embedded in TUNNELDEMO |
| raw PCM banks | SMP.INGAME1, 7BIT/enemy11-boost, chipsams.bin.aga |
cd.device opened by a game |
no |