Skip to content
Hardware

Agnus: The Amiga's Memory Master

DMA controller, Blitter, and Copper in one package

Agnus coordinated all memory access on the Amiga, housing the Blitter for fast graphics and the Copper for beam-synchronised effects.

Amiga custom-chipsdmamemory-controllercommodore 1985–1992

Overview

Agnus was the Amiga’s traffic controller. Every memory access—from the 68000, the Blitter, the display hardware, audio playback—flowed through Agnus. It allocated time slots fairly, ensuring smooth graphics and audio while letting the CPU work during the gaps.

Fast facts

  • Function: DMA controller, Blitter engine, Copper coprocessor.
  • Versions: 8361 (NTSC), 8367 (PAL), 8370/8372 (Fat Agnus), 8375 (Super Agnus).
  • Chip RAM: 512KB (original), 1MB (Fat), 2MB (Super/ECS).
  • DMA channels: 25 independent channels for different purposes.

DMA slot allocation

Agnus divides each scanline into time slots:

SlotsPurpose
0-3Disk DMA
4-7Audio channels 0-3
8-15Sprites 0-7
16-17Reserved
18-53Bitplane DMA (display)
RemainingCPU and Blitter

The CPU and Blitter share leftover slots, with Blitter taking priority when running.

Chip versions

ChipChip RAMNotes
8361/8367512KBOriginal A1000, early A500
8370/83721MB”Fat Agnus” - larger package
83752MBECS “Super Agnus”
Alice2MBAGA replacement in A1200/A4000

The Blitter

The Blitter is a DMA engine within Agnus that performs:

  • Block copies: rectangular memory moves.
  • Logic operations: combine up to three sources with minterm logic.
  • Area fill: flood-fill between edges.
  • Line drawing: hardware-accelerated lines.

Blitter sources

SourcePurpose
ASource/mask data
BSource data
CDestination read (for merge)
DDestination write

Minterm operations

The Blitter combines sources using an 8-bit minterm value:

Result = (A AND B AND C) * bit7 +
         (A AND B AND NOT C) * bit6 +
         ... and so on for all 8 combinations

Common minterms:

  • $F0: Copy A to D (ignore B, C)
  • $CA: Cookie-cut (A masks B onto C)
  • $5A: XOR A with C

The Copper

The Copper is a coprocessor with just three instructions:

InstructionOpcodePurpose
WAIT0001Wait for beam position
MOVE0000Write to register
SKIP0001 + skip bitConditional skip

Copper list example

dc.w    $0180, $0000    ; COLOR00 = black
dc.w    $2c07, $fffe    ; WAIT for line $2c
dc.w    $0180, $0f00    ; COLOR00 = red
dc.w    $5007, $fffe    ; WAIT for line $50
dc.w    $0180, $00f0    ; COLOR00 = green
dc.w    $ffff, $fffe    ; End (wait forever)

Copper capabilities

  • Palette changes: different colours per scanline (copper rainbows).
  • Mode switches: change resolution mid-screen.
  • Sprite repositioning: move sprites to different locations per frame.
  • Register pokes: modify nearly any hardware register.

Key registers

RegisterAddressPurpose
DMACON$DFF096DMA control
DMACONR$DFF002DMA control read
BLTCON0$DFF040Blitter control
COP1LC$DFF080Copper list 1 pointer
COP2LC$DFF084Copper list 2 pointer
COPJMP1$DFF088Restart Copper list 1

See also