amiga-bootcamp/17_demoscene/README.md

8.8 KiB
Raw Blame History

← Home

Demoscene Techniques — Pushing the Hardware Beyond Its Limits

Overview

The Amiga demoscene is a subculture of programmers, artists, and musicians who create real-time audiovisual presentations ("demos") that push the hardware far beyond what Commodore's engineers imagined possible. From 1986 to the present day, Amiga demos have showcased techniques that later became standard in game development and graphics programming: copper bars, raster effects, sprite multiplexing, chunky pixels, rotozoom, dot tunnels, and more.

This section documents the hardware techniques that demoscene coders invented or perfected on the Amiga — techniques that are essential knowledge for anyone reverse-engineering games, writing emulators, or building FPGA implementations.

Learning path: For a guided, video-based introduction to these techniques, see the Scoopex Amiga Hardware Programming series by Photon (ScoopexUs) on YouTube — a comprehensive walkthrough of Copper, Blitter, sprites, and hardware banging in 68k assembly, with companion articles at coppershade.org.

graph TB
    subgraph "Display Techniques"
        CB["Copper Bars<br/>Color register cycling"]
        RE["Raster Effects<br/>Mid-frame register changes"]
        PL["Parallax Scrolling<br/>Dual playfield / scroll registers"]
    end

    subgraph "Sprite Techniques"
        SM["Sprite Multiplexing<br/>Reuse sprites across scanlines"]
        SB["Sprite-Built Images<br/>Sprites as pixel data"]
    end

    subgraph "Pixel Techniques"
        CC["Copper Chunky<br/>Copper-driven pseudo-chunky"]
        C2P["Chunky to Planar<br/>Fast C2P conversion"]
        HAM["HAM Art<br/>HAM-6/8 for photorealism"]
    end

    subgraph "3D Techniques"
        FL["Filled Polygons<br/>Blitter fill mode"]
        RT["Rotozoom<br/>Affine texture transform"]
        DT["Dot Tunnel<br/>Z-ordered particle tunnel"]
        VO["Voxel Space<br/>Raycast heightmap"]
    end

    style CB fill:#e8f4fd,stroke:#2196f3,color:#333
    style SM fill:#fff3e0,stroke:#ff9800,color:#333
    style CC fill:#f3e5f5,stroke:#9c27b0,color:#333
    style RT fill:#e8f5e9,stroke:#4caf50,color:#333

Section Index

File Description
copper_effects.md Copper bars, raster splits, mid-frame register changes, gradient shading, sine-based color cycling
sprite_techniques.md Sprite multiplexing, sprite-built images, 15-color attached sprites, sprite-BLT interaction
pixel_tricks.md Copper chunky, HAM art, scroll-register tricks, modulo-based wrapping, bobs-vs-sprites
3d_rendering.md Fixed-point 3D math, Blitter-filled polygons, rotozoom, dot tunnels, voxel space, matrix operations
timing_optimization.md Cycle counting, blitter-CPU interleaving, copper-wait placement, memory access patterns, self-modifying code

The Demoscene & Hardware — Symbiosis

sequenceDiagram
    participant Copper as Copper Coprocessor
    participant Blitter as Blitter DMA
    participant Sprites as Sprite DMA
    participant Audio as Paula Audio DMA
    participant CPU as 68000 CPU

    Note over Copper,CPU: Single Frame (PAL: 312 scanlines, ~20ms)

    par Scanline 050 (Top Border)
        Copper->>Copper: WAIT y=0, set BPLCON0
        CPU->>CPU: Calculate 3D vertices
    and Scanline 50250 (Display Area)
        Copper->>Copper: Change colors per scanline (copper bars)
        Blitter->>Blitter: Fill polygon (line-draw + fill mode)
        Sprites->>Sprites: Display multiplexed sprite data
        Audio->>Audio: Stream 4-channel MOD samples
    and Scanline 250312 (Bottom Border + VBlank)
        Copper->>Copper: WAIT for VBlank
        CPU->>CPU: Update scroll registers, prepare next frame
    end

The key insight of demoscene coding: the Copper, Blitter, Sprites, and Audio all run via DMA alongside the CPU. A single frame has the Copper changing display parameters, the Blitter filling polygons, sprites being displayed, audio streaming — all while the CPU computes the next frame's geometry. This parallelism is what made the Amiga unique and what demoscene coders exploited to the absolute limit.

DMA Budget Per Scanline

Resource DMA Slots per Scanline (LoRes) Used For
Bitplanes (4 planes) 8 of 226 Display pixel data
Sprites (8 sprites) 4 of 226 Sprite data fetch
Copper ~12 of 226 Copper instruction execution
Blitter 0226 of 226 (shared) Copy/fill/line operations
Audio (4 channels) 1 of 226 Sample data fetch
CPU Remaining slots Computation

Note

The Blitter and CPU share the same bus cycles. When the Blitter is running, the CPU gets fewer cycles. The BLTPRI bit gives the Blitter priority over the CPU entirely — "Blitter Nasty" mode. Demoscene coders use this to time operations precisely.


Famous Demo Effects & Hardware Techniques

Effect Hardware Used First Seen How It Works
Copper Bars Copper (color registers) 1987 (Scoopex) Copper writes COLORxx registers at different Y positions, creating horizontal color bands
Raster Bars Copper (BPLCON0) 1988 (Red Sector) Same as copper bars, but also changes bitplane depth/resolution mid-frame for split-screen
Scrolling Sinus Copper (scroll registers) 1988 (Red Sector) Per-scanline BPLxMOD changes create a sinusoidal wave distortion
Copper Master Copper (all registers) 1990 (Angels) Ultimate copper showcase: bars, gradients, chunky, sine effects
Sprite Multiplexing Sprites + Copper 1989 (Kefrens) Copper repositions sprites at different Y positions to display > 8 sprites on screen
Parallax Scrolling Dual playfield + scroll regs 1989 Two independent bitplane layers scroll at different rates
Copper Chunky Copper (color registers only) 1990 (Sanity Arte) No bitplanes at all — Copper writes COLOR01 per pixel position to create a chunky-pixel display
Filled Vectors Blitter (line + fill) 1991 (Phenomena Enigma) Blitter draws polygon edges, then fill mode paints the interior
Rotozoom CPU math + Blitter copy 1991 (Complex) Affine texture transform rendered line-by-line, Blitter copies to bitplanes
Dot Tunnel CPU + Blitter 1993 (Spaceballs) Z-ordered circles rendered with Blitter circles, creating a fly-through tunnel
Voxel Space CPU + blitter 1994 (Rebels) Raycast heightmap with 1-pixel-per-column rendering
Raytracing CPU only 1995 (Polka Brothers) Pure CPU raytracer at 0.5 FPS — proof of concept

References

  • Copper — Copper coprocessor hardware: instruction format, UCopList
  • Copper Programming — Building copper lists, gradients, raster effects
  • Blitter — Blitter DMA engine: channels, minterms
  • Blitter Programming — Cookie-cut masking, line draw, fill mode
  • Sprites — Hardware sprites: DMA, attached sprites, multiplexing
  • Pixel Conversion — Chunky↔Planar: Kalms, Copper Chunky, Akiko
  • Video Timing — Scanline anatomy, beam counters, per-frame budgets
  • DMA Architecture — DMA slot allocation, bus arbitration

External Resources