Skip to content

Latest commit

 

History

History
228 lines (185 loc) · 10.3 KB

File metadata and controls

228 lines (185 loc) · 10.3 KB

03 — The boot chain, and a floppy release named three times before the game starts

/S/startup-sequence, 208 bytes, seven non-blank lines

C:setpatch >nil:

LOADERBLACKPAL

C:STACK 8192

C:ASSIGN >NIL: "Legacy of Sorasil DISK 1:" "cd0:"
C:ASSIGN >NIL: "Legacy of Sorasil DISK 2:" "cd0:"
C:ASSIGN >NIL: "Legacy of Sorasil DISK 3:" "cd0:"

QuestII 2

There is no NoOpenWB, no reboot at the end and no publisher stub. What there is instead is three Assigns, and they are the single most informative line on the disc.

The three assigns reconstruct the floppy release

Legacy of Sorasil DISK 1:, DISK 2: and DISK 3: are AmigaDOS volume names — the labels on three floppy disks — and the script points all three at cd0:. This is exactly Speris' idiom (speris-1:speris-4:) and it means the CD32 build is the floppy build with the volumes redirected and nothing else changed.

The executable confirms it in the strongest possible way: it does not merely mention the volumes, it addresses every one of its 91 data files through them, as full paths compiled into the loader's own file table. tools/paths.py extracts all 91 and checks each against the directory:

disk 1: 13 files    Pack.Bin, Intro.Rnc, Hq2title.Rnc, ShopG.Rnc, TitleG.Rnc,
                    Trader.Rnc, OverG.Rnc, English.Bin, Deutsch.Bin,
                    Francais.Bin, GREMLIN.PAK, HEROLOGO.PAK, PRESENTS.PAK
disk 2: 39 files    FASTG.BIN, GAMEG.BIN, and the four nine-file dungeon
                    families -- SKETCH/, GLUED/, BITS/, CHARTS/ -- plus Level.Map
disk 3: 39 files    HQ2GAME.RNC, AUDIOG.BIN, CREDITSG.BIN and all 36 CHAPS/*.RAW

That is a complete three-floppy layout, recovered from a CD with no disassembly beyond a string search, and it is what the checklist's step 15 is for. Ninety of the ninety-one exist on the disc. The ninety-first, Legacy of Sorasil DISK 2:Level.Map, does not (doc 11).

Note the spelling. Disk 1's names are mixed case (Hq2title.Rnc, English.Bin), disks 2 and 3 are upper case (FASTG.BIN, CHAPS/BARBRIAN.RAW), and the disc itself is mixed case throughout (HQ2Title.Rnc, Chaps/Barbrian.Raw). Harmless on an Amiga, fatal on a case-sensitive host, and a hint that the three tables were written at different times.

C:STACK 8192

Stack is the AmigaDOS command that sets the shell's stack size, and 8,192 bytes is eight times the default. It is here because the game inherits the shell's stack, and it is the reason Stack is on the disc at all.

QuestII 2

The game executable is launched with an argument, the digit 2. The first stage does not parse it with ReadArgs, and the only dos.library calls in the program are Open, Close, Read, Write, Seek, Lock, UnLock and Examine (doc 05) — so if it reads the argument at all it does so out of the command line the shell hands it. What 2 selects is unresolved and it is in doc 12; the obvious candidates are a screen mode, a language default and a drive-speed setting, and nothing on the disc decides between them.

/loaderblackpal — 228 bytes, and the only symbol table on the disc

The second line of the boot script runs a file in the volume root, not in C:. That is the Gloom shape — Kickstart's C: assign on a booted CD32 volume finds commands in the root — and it is the fourth shape of boot script in this series.

/loaderblackpal is 572 bytes on disc: an AmigaDOS hunk file with one 228-byte chip code hunk, 11 relocations, and 13 HUNK_SYMBOL entries that survived. It is the only symbol table anywhere on this disc.

START           0x006      FREEANIMNAME    0x0c0
OPENLIBRARIES   0x042      LOWLEVELNAME    0x092
BLACKCOLOURS    0x07e      DOSNAME         0x0a3
BLUEBITS        0x006      GFXNAME         0x0af
GREENBITS       0x006      FABASE          0x0d6
MYGFXBASE       0x0de      DOSBASE         0x0da
LOWLEVELBASE    0x0d2

and the whole program, re-read from the bytes:

0x000  jmp     START

START:
0x006  movea.l 4.w,a6
0x00a  lea     FREEANIMNAME,a1        ; 'freeanim.library'
0x010  moveq   #0,d0
0x012  jsr     -552(a6)               ; OpenLibrary  -- not OldOpenLibrary
0x016  move.l  d0,FABASE
0x01c  bsr     OPENLIBRARIES          ; dos, graphics, lowlevel
0x020  movea.l 4.w,a6
0x024  movea.l FABASE,a1
0x02a  jsr     -414(a6)               ; CloseLibrary
0x02e  movea.l MYGFXBASE,a6
0x034  suba.l  a1,a1                  ; NULL
0x036  jsr     -222(a6)               ; LoadView(NULL)
0x03a  bsr     BLACKCOLOURS
0x03e  moveq   #0,d0
0x040  rts

OPENLIBRARIES:                        ; three OpenLibrary calls, version 0
0x042  dos.library      -> DOSBASE
       graphics.library -> MYGFXBASE
       lowlevel.library -> LOWLEVELBASE
0x07c  rts

BLACKCOLOURS:
0x07e  lea     $DFF180.l,a0
0x084  move.w  #$1f,d7                ; 32 colour registers
0x088  move.w  #$0,(a0)+
0x08c  dbra    d7,0x088
0x090  rts

Four things worth taking away from 228 bytes.

It is the freeanim.library open, and the gap is real. The library is opened first, before anything else, exactly as the Amiga CD32 Developer Notes require; three further OpenLibrary calls happen in the interval; then it is closed. That is another sighting of the documented open/close pair, and there is still no call to the library on any disc in this series. Against Microcosm's zero-length gap this one is small but not empty: three library opens' worth of work happens while the boot animation fades.

It uses OpenLibrary (−552), not OldOpenLibrary (−408) — asking for version 0, and never testing the result, which is precisely what the notes tell developers to do so that the program still runs on a plain Amiga with a CD-ROM.

It leaks three libraries. dos, graphics and lowlevel are opened and never closed, and dos and lowlevel are never used at all — only MYGFXBASE is, for the single LoadView(NULL). The program exits immediately afterwards, so three library open counts are left raised for the rest of the session. Harmless in practice; it is what the file looks like when somebody copied the "open the libraries" subroutine out of the game.

And BLACKCOLOURS is the disc's own statement of its colour count. It writes 32 colour registers, COLOR00 through COLOR31, and stops. On a disc that never calls LoadRGB4 or LoadRGB32 and never writes BPLCON3, this loop is the most direct evidence available that the display has 32 colours and not 64 or 256 — see doc 06.

Two symbols do not correspond to anything. BLUEBITS and GREENBITS both have the value 0x006, which is START — three labels at one address, in a program whose only palette code writes zeros. There is no blue or green component anywhere in the 228 bytes. The likeliest reading is that an earlier version faded the palette down a channel at a time and the code was deleted without deleting the labels; the disc does not settle it.

/C/ — three commands, and two of them are other studios' copies

c/Assign    3,220 B   $VER: assign 37.4 (25.4.91)     Commodore, Workbench 2.04
c/Stack       872 B   no $VER: string
c/setpatch 12,968 B   $VER: setpatch 40.12 (16.9.93)  Commodore, Kickstart 3.1

All three are run by the boot script, so unlike Marvin's SpeedyCD or Liberation's CloseAnim nothing here ships unused.

Hashing them is where this disc pays. The platform checklist says to hash the binaries and not only the $VER: strings, because Commodore-era developer files circulated between studios as single copies. Two of these three are copies already in the series:

SHA-1  5fa6e23089c82e7292073fecebaab8b6ed03ad49   12,968 B   c/setpatch 40.12
       == Liberation (Byte Engineers / Mindscape, April 1994)
       == Prey CD32  (KirkMoreno / Almathera, November 1993)
       == HeroQuest II (Gremlin, June 1994)                    -- three discs

SHA-1  b5b7edb67f578019d46af425a16458ec0cdb1c2e    3,220 B   c/Assign 37.4
       == Prey CD32, Speris, Legends, Liberation, HeroQuest II -- five discs

SetPatch 40.12 is now the third Commodore-era file shown to travel as a single copy, after the .TM block (eight discs) and freeanim (two), and the first to do it in three copies across three unrelated studios and three publishers. Assign 37.4 goes further: five discs, five studios, five publishers, 1993 to 1996, and one 3,220-byte file. A command from April 1991 shipping unchanged on a 1996 CD32 disc is not surprising on its own; five byte-identical copies is a measurement of how Amiga development actually distributed its tools, and it costs one sha1sum.

c/Stack is the odd one out: 872 bytes, no $VER: string at all, and no match against any file in the other nine repositories. Its only strings are three error messages (bad argument for STACK, current stack size is %n bytes, Suggested stack size too small / too large), which are Commodore's wording, so it is a Commodore Stack — from a release early enough not to carry a version string, or with it stripped.

setpatch 40.12's own string table names the patches it can install, and on a CD32 title several of them are the reason it is there at all: NuDrive Firmware Patch, NuCDPatch Interrupt, nonvolatile.library GetNVList() patched, BestModeIDA() patch, Gfx HashTable patch, NMI Hardware patch, Conner CP2024 patch. Its ReadArgs template is QUIET/S,NOCACHE/S,REVERSE/S,NOAGA/S — and the boot script passes none of them.

What is not in the boot chain

  • No libs/ directory. lowlevel.library and nonvolatile.library are both opened by the game, lowlevel again by loaderblackpal, and neither ships on the disc — so this build needs a machine that already has them: a CD32, or an Amiga running Workbench 3.1. Speris, Marvin and Prey all carry their own copies for exactly that reason and this disc does not, which is the shape of a CD32-only build even though the game itself is a floppy port.
  • No NoOpenWB. The Workbench screen is dealt with by LoadView(NULL) in loaderblackpal instead.
  • No reboot. The boot script ends at QuestII 2 and never gets control back, so the machine is left however the game leaves it.
  • No .info file, so no Workbench entry point (doc 01).
  • No .bak beside the boot script, which Gloom had and which would have been the previous release's script.