Skip to content

Latest commit

 

History

History
185 lines (145 loc) · 7.5 KB

File metadata and controls

185 lines (145 loc) · 7.5 KB

08 — Audio

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?

OpenDevice first

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.pynotes/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.

The Nu trap, live on this disc

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.

Where the music is: a fifth place, and the checklist did not have it

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/residentnotes/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.

Superfrog's music

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.

Super Stardust's music

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.

8SVX, and it is inside a binary

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

Arcade Pool

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.

Summary

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