amiga-bootcamp/01_hardware/common/zorro_bus.md
2026-04-29 23:18:55 -04:00

7.8 KiB
Raw Blame History

← Home · Hardware

Zorro Bus — Expansion Architecture

Overview

The Amiga uses the Zorro expansion bus for add-on cards. There are two generations:

  • Zorro II — 16-bit, 24-bit addressing, 7 MHz, compatible with A2000/A3000/A4000
  • Zorro III — 32-bit, 32-bit addressing, up to 33 MHz burst, A3000/A4000 only

Zorro uses AutoConfig — a standardised plug-and-play configuration protocol that predates PCI by several years.

Zorro II

Parameter Value
Data bus 16-bit
Address bus 24-bit
Clock 7.14 MHz (bus cycle ≈ 280 ns)
Max transfer ~5 MB/s (DMA)
Address space $A00000$EFFFFF (I/O), $200000$9FFFFF (RAM)
Slots 5 (A2000), 3 (A3000)

Zorro II cards appear in the 16 MB address space. RAM cards are configured into $200000$9FFFFF. I/O cards use $A00000$DEFFFF.

Zorro III

Parameter Value
Data bus 32-bit
Address bus 32-bit
Clock Up to 33 MHz burst
Max transfer ~40 MB/s (DMA)
Address space $01000000 and above
Slots 4 (A3000), 5 (A4000)

Zorro III extends into the 32-bit address space, allowing large RAM cards (32128 MB) and fast peripherals. Requires a 32-bit CPU (68030+) and OS support.

AutoConfig Protocol

AutoConfig allows the OS to discover and configure cards without jumpers:

sequenceDiagram
    participant OS as AmigaOS (expansion.library)
    participant Card as Zorro Card

    OS->>Card: Read $E80000 (config space)
    Card-->>OS: Manufacturer ID (16-bit)
    OS->>Card: Read $E80002
    Card-->>OS: Product ID, flags
    OS->>Card: Read board size, type
    OS->>OS: AllocAbs() / ConfigBoard()
    OS->>Card: Write base address
    Card-->>OS: Card configured, moves off $E80000

Key AutoConfig registers (read from $E80000$E8007F before configuration):

Offset Content
$00 er_Type (board type: RAM/IO, Zorro II/III)
$02 er_Product (product ID)
$04 er_Flags
$06 er_Reserved03
$08$0A er_Manufacturer (16-bit)
$0C$0F er_SerialNumber
$10$11 er_InitDiagVec (diagnostic ROM vector)

Board types (er_Type bits):

#define ERT_TYPEMASK   0xC0
#define ERT_ZORROII    0xC0   /* Zorro II card */
#define ERT_ZORROIII   0x80   /* Zorro III card */
#define ERTB_MEMLIST   5      /* board is RAM, add to free list */
#define ERTB_DIAGVALID 4      /* DiagArea ROM is valid */
#define ERTB_CHAINEDCONFIG 3  /* more boards to configure */

expansion.library

AmigaOS provides expansion.library to manage Zorro configuration:

#include <libraries/expansion.h>
#include <clib/expansion_protos.h>

/* Find a configured board by manufacturer/product */
struct ConfigDev *cd = NULL;
while ((cd = FindConfigDev(cd, MANUF_ID, PROD_ID)) != NULL) {
    APTR base = cd->cd_BoardAddr;
    ULONG size = cd->cd_BoardSize;
    /* use board at base */
}

Key structures:

struct ConfigDev {
    struct Node    cd_Node;
    UBYTE          cd_Flags;
    UBYTE          cd_Pad;
    struct ExpansionRom cd_Rom;   /* copy of autoconfig ROM area */
    APTR           cd_BoardAddr;  /* configured base address */
    ULONG          cd_BoardSize;
    UWORD          cd_SlotAddr;
    UWORD          cd_SlotSize;
    APTR           cd_Driver;
    struct ConfigDev *cd_NextCD;
    ULONG          cd_Unused[4];
};

DiagArea — Card ROM

Cards with ERTB_DIAGVALID have a small ROM (DiagArea) that the OS calls during boot:

struct DiagArea {
    UBYTE da_Config;     /* flags */
    UBYTE da_Flags;
    UWORD da_Size;
    UWORD da_DiagPoint; /* offset to diagnostic code */
    UWORD da_BootPoint; /* offset to boot code */
    UWORD da_Name;      /* offset to name string */
    UWORD da_Reserved01;
    UWORD da_Reserved02;
};

The boot vector is called by ConfigChain() during the early boot sequence — this is how SCSI controllers install their filesystem handlers.

Real-World Performance & Bottlenecks

While the theoretical speeds are high, real-world Zorro performance is often gated by the Amiga's system bus controller and motherboard design.

The "Buster" Bottleneck

In the A3000 and A4000, the Buster chip manages Zorro III traffic.

  • Revision 9: Contained bugs that made Zorro III DMA unstable or slow.
  • Revision 11: The "Golden" revision. It fixed several timing bugs and allowed for reliable Burst Mode transfers, which are essential for reaching speeds above 10 MB/s.

Bandwidth Comparison (Real-World)

Interface Effective CPU-to-VRAM Notes
Zorro II ~2.5 3.5 MB/s Gated by 7 MHz 68000 bus timing.
Zorro III ~10 15 MB/s Requires Buster 11 and a 68040/060.
PCI Bridge ~20 30 MB/s Limited by the Zorro-to-PCI bridge interface.
Local Bus ~60 80 MB/s Bypasses Zorro; uses CPU-slot (CyberStorm PPC).

2. PCI Bridgeboards (Mediator, G-REX, Prometheus)

PCI bridges allowed the Amiga to break out of the aging Zorro ecosystem and tap into the vast, cheap pool of PC hardware.

Hardware Architecture

  • Mediator (Elbox): The most popular solution. It consists of a "Logic Board" (containing GALs/CPLDs) and a "Busboard." It uses a Memory Windowing technique (typically 8MB) to map the vast 4GB PCI address space into the Amiga's 24-bit or 32-bit space.
  • G-REX (DCE): Designed for high-end PowerPC systems. It connects directly to the CPU local slot of a BlizzardPPC or CyberStormPPC. Unlike the Mediator, it uses Linear Mapping, making the entire PCI memory space directly addressable without window switching, resulting in superior performance.
  • Prometheus (Mayap/Individual Computers): A simpler Zorro III-to-PCI bridge using a single PLX bridge chip.

Software & Libraries

  • pci.library: The standard API for PCI hardware on the Amiga. It handles resource allocation (BARs), interrupt routing, and device discovery.
  • OpenPCI: An open-source alternative library designed to provide a unified driver interface across different bridge brands.
  • Mediator Multimedia CD: The proprietary driver suite from Elbox, required for many of their advanced features (like using a graphics card's VRAM as system Fast RAM).

Supported PCI Cards

Category Supported Models Notable Drivers
Graphics 3dfx Voodoo 3/4/5, ATI Radeon 9200/9250, S3 ViRGE Picasso96, CyberGraphX v4
Sound Sound Blaster 128, ESS Solo-1, ForteMedia FM801 AHI (Amiga Hardware Interface)
Networking Realtek 8139 (10/100 Mbps) SANA-II (Roadshow, Genesis)
USB NEC-based cards (e.g., Elbox Spider) Poseidon USB Stack
TV/Video Brooktree Bt848/878 based cards TVPaint, VGR

Tip

Mediator VRAM trick: One of the most powerful features of the Mediator is the ability to use the 128MB+ of RAM on a Radeon card as system Fast RAM. While slower than local motherboard RAM, it is significantly faster than swapping to a hard drive.

3. FPGA-Based Modern Cards

Modern Zorro cards like the MNT ZZ9000 use an FPGA to provide RTG, Ethernet, and USB. They often include an ARM processor or specialized hardware logic to perform operations (like JPEG decoding) locally on the card, reducing the amount of raw data that needs to be sent over the Zorro bus.

References