Specifications

Apple IIGS
#66: ExpressLoad Philosophy 1 of 2
Apple II
Technical Notes
Developer Technical Support
®
Apple IIGS
#66: ExpressLoad Philosophy
Revised by: Matt Deatherage May 1992
Written by: Matt Deatherage September 1989
This Technical Note discusses the ExpressLoad feature and how it relates to the standard Loader
and your application.
Changes since September 1990: Clarified some changes now that ExpressLoad and the System
Loader are combined to be “Loader 4.0” in System Software 6.0. Completely removed the note
about not calling Close(0) since it’s not relevant.
Speedy the Loader Helper
ExpressLoad is a GS/OS feature which is usually present with System Software 5.0 (if the
ExpressLoad file is present and there’s more than 512K of RAM), and always on System
Software 5.0.4 and later. In fact, ExpressLoad is no longer a separate file in System Software 6.0;
it’s included in the System Loader version 4.0. Even though ExpressLoad is part of the Loader, we
refer to its functionality separately to distinguish how the Loader takes special advantage of
“expressed” files.
ExpressLoad operates on Object Module Format (OMF) files which have been “expressed,” using
either the APW tool Express (or it’s MPW counterpart, ExpressIIGS) or created that way by a
linker. Expressed files contain a dynamic data segment named either ExpressLoad or
~ExpressLoad at the beginning of the file. (Current versions of Express and ExpressIIGS create
~ExpressLoad segments, which is the preferred naming convention; older versions created
ExpressLoad segments, and should be re-Expressed for future compatibility.) This segment
contains information which allows the Loader to load these files more quickly, including such
things as file offsets to segment headers, mappings of old segment numbers to new segment
numbers (these files may have their segments rearranged for optimal performance), and file offsets
to relocation dictionaries.
Two Loader Components, Two Missions, One Function
The System Loader’s function is to interpret OMF. It takes files on disk (or in memory) and
transforms them from load files into relocated 65816 code. It does this very well, but in a very
straightforward way. For example, when the System Loader sees the instruction to right-shift a
value n times, it loads a register with the value and performs a right-shift n times.
ExpressLoad has a different mission. It relies upon the rest of the System Loader to handle OMF
in a straightforward fashion so it can concentrate upon handling the most common OMF cases in
the fastest possible way. For example, when asked for a specific segment in a load file, the System
Loader “walks” the OMF until it finds the desired segment. ExpressLoad, however, goes directly
to the desired segment since an Expressed file contains precalculated offsets to each segment in the
ExpressLoad segment.