Gayle Chip Registers¶
The Gayle chip (Commodore part number 5719 / 390914-01) is the bus-controller IC that integrates IDE, PCMCIA, and miscellaneous control glue on the Amiga 600 and Amiga 1200 (introduced 1991–1992). On the A1200 it is paired with the A1200 IDE controller (registers in [$DA0000-$DA301F] range — see at-ide.md).
This page documents the complete Gayle register set as known from public Amiga hardware documentation (including the full PCMCIA-related bit definitions and memory windows). The CCIDE extended mode (A1200-only configurable IDE timing) is not documented here.
Register map (offsets from $DA8000)¶
| Offset | Absolute | Name | Access | Description |
|---|---|---|---|---|
$0000 |
$DA8000 |
gaylestatus |
R | Status register (PCMCIA card status + IDE IRQ) |
$1000 |
$DA9000 |
gaylechange |
R + clear-on-W | Change-detect latches (PCMCIA status changes) |
$2000 |
$DAA000 |
gayleint |
RW | Interrupt enables + level control |
$3000 |
$DAB000 |
gaylecontrol |
RW | Memory speed + programming voltage |
| Address | Name | Access | Description |
|---|---|---|---|
$DE1000 |
gayleregid |
RW | Chip version ID register |
$A40000 |
gaylehedley |
— | Auxiliary control register ("Hedley" — see below) |
ID register ($DE1000)¶
The version ID is read with a specific sequence:
- The register must be accessed only from a task context with
FORBID(orDISABLE) surrounding the access. - The procedure is: write anything to the register, then read 8 successive times. The high bit (bit 7) of each read is the data — yielding one bit per read.
- The expected pattern is
1-1-0-1-0-0-0-0=$D0=%11010000. - The first 4 bits indicate GAYLE VERSION; the last 4 bits indicate GAYLE REVISION. All REVISIONS are backward-compatible with earlier versions (if any).
BITDEF GAYLE,ID,7 ; ID bit (in each read)
GAYLE_ID EQU %11010000
Status register ($DA8000)¶
Read-only.
| Bit | Define | Meaning |
|---|---|---|
| 7 | GAYLEB_STATUS_IDEINT |
IDE interface interrupt pending |
| 6 | GAYLEB_STATUS_CCDET |
PCMCIA card-detect changed |
| 5 | GAYLEB_STATUS_BVD1 / GAYLEB_STATUS_SC |
Battery voltage detect 1 / Status change |
| 4 | GAYLEB_STATUS_BVD2 / GAYLEB_STATUS_DA |
Battery voltage detect 2 / Digital audio |
| 3 | GAYLEB_STATUS_WR |
Write-protect status |
| 2 | GAYLEB_STATUS_BSYIRQ |
Busy / IRQ status |
| 1 | GAYLEB_STATUS_DIGAUDIO |
Digital audio enable status |
| 0 | GAYLEB_STATUS_CCDISABLE |
Card-disable status |
Change-detect register ($DA9000)¶
Read + clear-on-write. Bits 7–2 share positions with the status register; bits 1–0 are distinct.
| Bit | Define | Meaning |
|---|---|---|
| 7 | GAYLEB_CHANGE_IDEINT |
IDE interrupt change |
| 6 | GAYLEB_CHANGE_CCDET |
Card-detect change (latched) |
| 5 | GAYLEB_CHANGE_BVD1 / GAYLEB_CHANGE_SC |
BVD1 / Status change (latched) |
| 4 | GAYLEB_CHANGE_BVD2 / GAYLEB_CHANGE_DA |
BVD2 / Digital audio change (latched) |
| 3 | GAYLEB_CHANGE_WR |
Write-protect change (latched) |
| 2 | GAYLEB_CHANGE_BSYIRQ |
Busy / IRQ change (latched) |
| 1 | GAYLEB_DETRESET |
Hardware reset on card-detect |
| 0 | GAYLEB_DETBERR |
Bus error on card-detect |
Writing the value read back into the register clears the latched bits.
Interrupt control register ($DAA000)¶
Read/write.
| Bit | Define | Meaning |
|---|---|---|
| 7 | GAYLEB_INT_IDEINT |
Enable IDE interrupt |
| 6 | GAYLEB_INT_CCDET |
Enable card-detect interrupt |
| 5 | GAYLEB_INT_BVD1 / GAYLEB_INT_SC |
Enable BVD1 / Status-change interrupt |
| 4 | GAYLEB_INT_BVD2 / GAYLEB_INT_DA |
Enable BVD2 / Digital-audio interrupt |
| 3 | GAYLEB_INT_WR |
Enable write-protect interrupt |
| 2 | GAYLEB_INT_BSYIRQ |
Enable Busy/IRQ interrupt |
| 1 | GAYLEB_LEVEL_BVD / GAYLEB_LEVEL_DA / GAYLEB_LEVEL_SC |
Interrupt level control (BVD/DA/SC) |
| 0 | GAYLEB_LEVEL_BSYIRQ |
Interrupt level control (BSY/IRQ) |
Control register ($DAB000)¶
Read/write.
| Bit | Define | Meaning |
|---|---|---|
| 3 | GAYLEB_MEMORY_SPEED1 |
Memory speed bit 1 |
| 2 | GAYLEB_MEMORY_SPEED0 |
Memory speed bit 0 |
| 1 | GAYLEB_PROGRAM_12V |
Apply 12 V programming voltage |
| 0 | GAYLEB_PROGRAM_5V |
Apply 5 V programming voltage |
Memory speed control¶
The two MEMORY_SPEED bits select the PCMCIA memory access timing. The standard speed grades are:
| Speed setting | Memory speed bits | Constant |
|---|---|---|
| 250 ns (default) | 00 |
CARD_SPEED_250NS |
| 150 ns | 01 (bit 0 set) |
CARD_SPEED_150NS |
| 100 ns | 10 (bit 1 set) |
CARD_SPEED_100NS |
| 720 ns | 11 (both bits set) |
CARD_SPEED_720NS |
CARD_SPEED_250NS EQU 0 ; default
CARD_SPEED_150NS EQU GAYLEF_MEMORY_SPEED0
CARD_SPEED_100NS EQU GAYLEF_MEMORY_SPEED1
CARD_SPEED_720NS EQU GAYLEF_MEMORY_SPEED0!GAYLEF_MEMORY_SPEED1
"Hedley" register ($A40000)¶
The Gayle chip exposes an additional auxiliary control register at $A40000, named gaylehedley in the public hardware headers. It is used by the built-in card driver for a hardware-specific setup that depends on the Gayle revision.
PCMCIA memory windows¶
The PCMCIA card slot memory is mapped into the Amiga address space in four windows:
| Window | Address | Size | Purpose |
|---|---|---|---|
COMMON_MEMORY |
$600000 |
4 MB (COMMON_MEM_SIZE = $400000) |
PCMCIA common memory |
ATTRIBUTE_MEMORY |
$A00000 |
128 KB (ATTR_MEM_SIZE = $020000) |
PCMCIA attribute memory (CIS, config registers) |
IO_MEMORY |
$A20000 |
128 KB (IO_MEM_SIZE = $020000) |
PCMCIA I/O space |
FLASH_ROM |
$A40000 |
— | Flash ROM region (overlaps gaylehedley) |
Reset sequence (canonical card.resource initialization)¶
The standard reset for the four Gayle registers is performed by writing known values to clear change latches and reset the interrupt and control state:
- Clear change latches — write
IDE_MASK!CC_MASKtogaylechange(clears all status change interrupts except IDE and CC_DET, also clears RESET and BERR bits). - Clear status register — write
$00togaylestatus(clears CC_DET, WR, BVD1, BVD2, IRQ, DIG_AUD, CC_DISABLE). - Reset control register — write
$00togaylecontrol(default memory speed 250 ns, default programming voltage). - Reset interrupt enables — clear
GAYLEB_INT_BVD2, then setGAYLEF_INT_BVD1!GAYLEF_INT_WR!GAYLEF_INT_BSYIRQ(the default enabled set: BVD1, WR, BSY/IRQ).
After this sequence, the chip is in a known idle state ready for the next card insertion.
Interrupt vector registration¶
GAYLE_ADDR ($DA8000) is registered as the interrupt vector address — when the interrupt fires, the CPU reads the vector from this location. Gayle's INT line drives the interrupt acknowledge cycle, and the interrupt code pointer points to this base.
Limitations¶
This page covers the four main registers ($DA8000+offsets) plus the ID register ($DE1000) and the Hedley auxiliary register ($A40000). The CCIDE register space (configurable IDE timing modes — A1200-only feature) is not documented here.
Cross-references¶
at-ide.md— IDE/AT task file registers at$DA2000co-located on the Gayle-attached IDE buspcmcia.md— PCMCIA memory windows andcard.resourceAPI bit definitions../register-reference.md— master register index../../library-reference/card-library.md—card.resourcefunction reference