Apple IIgs Network Boot Process

Boot Stages

The Apple IIgs network boot happens in multiple stages. They are:

Stage 0 - ROM: The system has a very minimal AppleTalk stack built into the ROM. It is capable of NBP lookups, ATP, and the lower level protocols to support these, and not much else. The stage 0 code performs an NBP lookup for Apple //gs. When it finds it, it retrieves the stage 1 code using ATP requests in the same fashion as the Workstation Card retrieves its boot blocks. The image is usually called ProDOS16 Boot Blocks

Stage 1: The stage 1 code is a small program with two purposes: It initializes an Apple II Ethernet Card, if installed, and patches it into the toolbox in a rudimentary fashion, and it uses ATP to load the stage 2 code from the server found by the stage 0 code, in usual manner.

Stage 2 “Fizzy”: Fizzy is the first chunk in an archive of files that make up the file ProDOS16 Image. Fizzy's job is to selectively load the next stages of the boot, depending on the ROM version, boot OS (GS/OS or ProDOS 8), and network medium (EtherTalk or LocalTalk).

Specifically, Fizzy does these things:

  1. Inits the memory manager and tools
  2. Displays and maintains the “Starting Up Over the Network” screen.
  3. Loads each applicable segment of the ProDOS16 Image file.
    1. Requests memory manager memory if the segment loads in bank 2 or higher.
  4. Calculates how fast the network is delivering boot data.
  5. Sets up the loaded AppleTalk protocols, these are the higher levels required to talk to AppleShare.
    1. These include either the ATROM and ATRAM patches or the Ethernet patches, but not both at the same time.
  6. Initializes ProDOS 8 if it is the boot OS.
  7. Sets up a a limited “stub” AppleShare FST if GS/OS is the boot OS.
  8. Calls the Logon program with a flag on which OS is booting.
  9. If Logon returns, passes control to the stub FST as a stage 3 loader.
  10. If Logon does not return, we are done because P8 is now running with the user's startup application.

Contents of the ProDOS16 Image:

The first block is a header block beginning with GSOSBOOT at $000, and at $100 are the segment descriptors that tell how each of the embedded files is to be loaded.

The contents of a standard GS/OS ProDOS16 Image are below. Note that the images are not named in the file, these are names that I have gotten from other sources or from analysis of the contents.

 #  Image   Run Address  Size                       Start Blk  Max ROM, Boot OS, and Medium
--- ------- -----------  -----                      ---------- ----------------------------
 0: Fizzy   @0x00001000, 0x047d bytes (0x0003 blks) at 0x0001, ROM 4, any OS, any HW
 1: Stub    @0x00002000, 0x033e bytes (0x0002 blks) at 0x0004, ROM 4, GS/OS, any HW
 2: P8      @0x00002000, 0x42e8 bytes (0x0022 blks) at 0x0006, ROM 4, ProDOS 8, any HW
 3: Logon   @0x00006800, 0x458b bytes (0x0023 blks) at 0x0028, ROM 4, any OS, any HW
 4: ATROM   @0x0002a269, 0x281b bytes (0x0015 blks) at 0x004b, ROM 4, any OS, LocalTalk
 5: ATRAM   @0x00020000, 0xa269 bytes (0x0052 blks) at 0x0060, ROM 4, any OS, LocalTalk
 6: ETBoot  @0x00020000, 0x0596 bytes (0x0003 blks) at 0x00b2, ROM 4, any OS, EtherTalk
 7: End     @0x00000000, 0x0000 bytes (0x0000 blks) at 0x00b5, ROM 0, any OS, any HW

Stage 3: This stage is in the stub AppleShare FST. It looks for SYSTEM:START.GS.OS on the user volume that Logon mounted, loads it, and launches it.

Stage 4: START.GS.OS can use the stub FST to bring in the rest of GS/OS, eventually replacing the stub FST with the full AppleShare FST as it loads up.