Difference between revisions of "Loading routine "cores""

From SinclairFAQ
Jump to: navigation, search
(Document the Microsphere loader.)
(Document the Paul Owens loader.)
Line 104: Line 104:
  
 
Another very close variant on the ROM loader, this time replacing the <code>RET NC</code> with the <code>NOP</code>-equivalent <code>AND A</code>.
 
Another very close variant on the ROM loader, this time replacing the <code>RET NC</code> with the <code>NOP</code>-equivalent <code>AND A</code>.
 +
 +
=== Paul Owens ===
 +
 +
Used in some Ocean games, for example [https://spectrumcomputing.co.uk/index.php?cat=96&id=903 Chase H.Q.].
 +
 +
LD-SAMPLE  INC B
 +
            RET Z
 +
            LD A,7F
 +
            IN A,(FE)
 +
            RRA
 +
            RET Z
 +
            XOR C
 +
            AND 20
 +
            JR Z,LD-SAMPLE
 +
 +
Again just a one-byte change from the ROM loader, replacing the <code>RET NC</code> with Alkatraz's <code>RET Z</code>.

Revision as of 21:04, 28 July 2018

This page documents the "core" of the loading routine used in the various turboloaders: the part of the loader which actually finds an edge from the tape.

ROM loader

The basis for every loading routine out there, this is the one found in the Spectrum ROM (at 05ED). The LD-SAMPLE name is taken from Logan and O'Hara's The Complete Spectrum ROM Disassembly.

LD-SAMPLE  INC B
           RET Z
           LD A,7F
           IN A,(FE)
           RRA
           RET NC
           XOR C
           AND 20
           JR Z,LD-SAMPLE

This routine is used unchanged (just copied elsewhere in memory) by a large number of turboloaders, for example Cybernoid and Dan Dare.

Turboloaders

The names given to each of these loading routines are not meant to imply that loaders was the first to use the specific loading loop; it is the most common usage of the loading loop, or just the first place that it was seen by the authors of this page.

Speedlock

The Speedlock loader, used in huge numbers of games, for example Daley Thompson's Decathlon and Head over Heels.

LD-SAMPLE  INC B
           RET Z
           LD A,7F
           IN A,(FE)
           RRA
           XOR C
           AND 20
           JR Z,LD-SAMPLE

This is essentially identical to the ROM loader, but just without the RET NC which aborts if space is pressed during the ROM loading routine.

Alkatraz

The Alkatraz loader, used in games like 720° and Cobra.

LD-SAMPLE  INC B
           JR NZ,LD-SAMPLE2
           JP <somewhere else>
LD-SAMPLE2 IN A,(FE)
           RRA
           RET Z
           XOR C
           AND 20
           JR Z,LD-SAMPLE

This again isn't that different from the ROM loader; the minor changes are:

  • Inverting the "no edge found" condition
  • Using a JP if an edge is not found rather than a RET
  • Not setting the high byte of the IN - this isn't critical as it affects only which keyboard half-rows are scanned
  • Replacing the RET NC with a RET Z. I think this makes it essentially a no-op unless lots of keys are pressed at once.

"Variant" Alkatraz

A very close variant of the Alkatraz loader, seen only in three late era Spectrum games: Gauntlet III, Out Run Europa and Shadow Dancer.

LD-SAMPLE  INC B
           JR NZ,LD-SAMPLE2
           RET
LD-SAMPLE2 IN A,(FE)
           RRA
           RET Z
           XOR C
           AND 20
           JR Z,LD-SAMPLE

This actually makes the Alkatraz routine closer to the original ROM code as it now uses a RET to exit in the "no edge found" case.

Bleepload

The Bleepload routine, used in lots of Firebird games, for example Bubble Bobble and Starglider 2.

LD-SAMPLE  INC B
           RET Z
           LD A,7F
           IN A,(FE)
           RRA
           NOP
           XOR C
           AND 20
           JR Z,LD-SAMPLE

This is just the ROM routine, but with the "space pressed" check explicitly replaced with a NOP.

Microsphere

Used in a few Microsphere games, for instance Contact Sam Cruise and Skool Daze.

LD-SAMPLE  INC B
           RET Z
           LD A,7F
           IN A,(FE)
           RRA
           AND A
           XOR C
           AND 20
           JR Z,LD-SAMPLE

Another very close variant on the ROM loader, this time replacing the RET NC with the NOP-equivalent AND A.

Paul Owens

Used in some Ocean games, for example Chase H.Q..

LD-SAMPLE  INC B
           RET Z
           LD A,7F
           IN A,(FE)
           RRA
           RET Z
           XOR C
           AND 20
           JR Z,LD-SAMPLE

Again just a one-byte change from the ROM loader, replacing the RET NC with Alkatraz's RET Z.