Amiga DMA slot timing
See who owns every colour clock of an Amiga scanline — refresh, disk, audio, sprites, bitplanes, copper, blitter and the 68000 — and how screen depth, resolution, overscan and blitter-nasty steal chip-RAM time, with per-frame and per-second budgets for PAL and NTSC.
Added
How to use it
One scanline is 227.5 colour clocks (about 280 ns each); in each one the chip bus moves one
16-bit word for exactly one owner. The grid shows a line 16 clocks per row, $00 to $E2,
coloured by owner, with the bitplane number in each fetch slot. Odd clocks carry a small dot.
Tap a slot to see what it is.
-
Choose an example set-up or set the screen yourself: video standard, chip set, resolution, number of bitplanes, AGA fetch mode, and the data-fetch window
DDFSTRT/DDFSTOP(hex,$38or38). The fetch window is shaded. -
Sprites, Audio channels and Disk DMA take their fixed slots only when switched on.
-
Copper MOVEs / line puts that many MOVEs on the line from the given clock; each uses two even slots.
-
Blitter busy gives the blitter every slot no one else uses. Without blitter-nasty (
BLTPRIin DMACON) it lets the 68000 have one cycle after refusing it three times; with it set, a 68000 running from chip RAM waits until the blit is done. -
Display line / Blank line switches the grid between a line with bitplane fetches and one in the border or vertical blank.
The Budget panel counts the slots per line for the bitplanes, the 68000, the blitter and the copper, the share of chip-RAM time the 68000 loses while the beam is in the display, and the totals per frame and per second (display lines use the display pattern, the rest the blank one). Bandwidth is two bytes per slot (four or eight per bitplane slot with AGA wide fetches).
⛶ Full screen (or F) gives the slot grid the whole screen — the browser’s full screen
where it is allowed, otherwise a full-window layer (iPhone) — with the budget beside it on a
wide screen; ◫ Panels hides it. Escape leaves.
How the line is shared
From the Amiga Hardware Reference Manual (3rd edition), chapter 6, "DMA Time Slot Allocation" and Figure 6-9:
-
Four memory refresh slots (
$E2,$01,$03,$05), three disk ($07–$0B), four audio ($0D–$13, one per channel) and sixteen sprite slots ($15–$33, two per sprite: its data words, or POS and CTL at the start) — all odd clocks. -
Bitplanes are fetched in units of 8 clocks starting at
DDFSTRTwhile the unit start is at or beforeDDFSTOP. In lores a unit fetches one word per plane in the order– 4 6 2 – 3 5 1; in hires two words per plane,4 2 3 1 4 2 3 1. A 320-pixel lores screen ($38–$D0) is 20 units, 160 clocks; 640 hires ($3C–$D4) is 40 words per plane. Fetching can’t start before$18or continue past$D8. -
The 68000 needs a bus cycle of 4 clocks, so it only ever uses even clocks. Up to four lores planes fetch only on odd clocks and cost the CPU nothing; planes 5 and 6 take even ones, so six lores planes steal half of the CPU’s slots in the display (HRM: "160 cycles per line"). Four hires planes take all 160 slots of the window: the 68000 can’t reach chip RAM until the beam reaches the border.
-
A display that starts fetching earlier than
$38(overscan, horizontal scrolling) takes sprite slots:$30loses sprite 7, and every 8 clocks earlier loses two more. -
The copper uses even clocks only; a MOVE takes 4 clocks (two fetches), a WAIT 6.
-
The blitter takes any free slot; it has priority over the 68000 but, unless
BLTPRIis set, gives it one cycle after three refusals. -
AGA (Alice) adds planes 7 and 8 and
FMODE: with 32- or 64-bit fetches a fetch unit covers 2× or 4× as many pixels, so the same screen needs a half or a quarter of the slots. -
PAL lines are 227 clocks and NTSC lines alternate 228 and 227. At 3.546895 MHz (PAL) and 3.579545 MHz (NTSC) colour clock that is 50.08 and 59.94–60.05 frames per second.
Limits
-
It is a slot-ownership model, not a cycle-exact emulator: the copper’s WAIT wake-up, the blitter’s own idle cycles (which depend on the channels in use and on fill/line mode) and the 68000’s instruction timing are not modelled — the blitter here wants every free slot and the CPU wants every even one.
-
Sprite loss is shown when a sprite’s slots fall inside the fetch window.
-
With AGA wide fetches the counts are exact but the position of each fetch inside its unit is drawn approximately (the fetches sit at the end of the unit); AGA sprite and copper timing changes are not modelled.
-
ECS super hires uses 2-clock units (
2 1); productivity and scan-doubled modes are not covered.
Related: 68000 cycle counter (what an instruction costs before the chips steal any of it), copper and blitter playground, Amiga custom chip registers (DDFSTRT, BPLCON0, DMACON), sprites and BOBs, Paula sound.
Linking to an example
Share link copies the current set-up. Links can be written by hand; settings not in the link keep their defaults.
| Parameter | Meaning | Example |
|---|---|---|
|
A preset: |
|
|
|
|
|
|
|
|
|
|
|
Bitplanes, 0–8 |
|
|
AGA fetch mode 1, 2 or 4 |
|
|
Data fetch start and stop (decimal or |
|
|
Display lines per frame |
|
|
Sprites and audio channels with DMA on |
|
|
Disk DMA running |
|
|
Copper MOVEs per line and the clock they start at |
|
|
Blitter busy; BLTPRI set |
|
|
Interlace (adds half a line per frame) |
|
|
|
|
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.