Ant64 Graphics Architecture — A Chipset, Not a GPU
FireStorm's graphics system is designed to be played as much as programmed.
Design Philosophy
The Ant64 graphics system is not a traditional GPU, and it is not a fixed-function retro display chip. It is a programmable, deterministic, multi-layer visual instrument, inspired by:
- The Amiga's Copper and Blitter, and Atari ANTIC / GTIA
- Arcade hardware layering and sprites
- Demo scene timing tricks
- Vector and raster hybrids
- Modern compositing pipelines
| Modern GPU optimises for | Ant64 optimises for |
|---|---|
| Throughput | Predictability |
| Abstraction | Low-latency control |
| General purpose | Creative misuse |
| Independence from audio | Tight synchronisation with audio |
The result is something closer to a custom chipset than a GPU — deliberately so.
Architectural Overview
Graphics rendering and audio synthesis are handled by the FireStorm FPGA, which contains:
- A multi-layer raster engine
- Sprite and primitive renderers
- Tilemap and text engines
- Vector and ray-based extensions
- A hardware Z-buffer
- A Copper-style control processor
- Update Units for bulk and procedural changes
All graphics and audio components are memory-mapped devices, visible to the SG2000, Pulse Sequencer, and DeMon.
Layer System
Layer Model
Ant64 supports up to 16 independent layers, each assignable to a type at runtime:
- Independently addressable, scrollable, and clipped
- Optionally Z-aware or Z-agnostic during merge
- Layer order is programmable and can change per scanline via the Copper
Layer Types
Raster Pixel Layers
| Mode | Description |
|---|---|
| 3 bpp text | 7 colours + transparency |
| 6 bpp indexed | — |
| 9 bpp indexed | Palette-based |
| 12 bpp direct | 4-4-4 colour |
| 12 bpp palette-indexed | 64 palettes × 64 colours |
| 18 bpp direct | — |
| 36 bpp HDR | Extended mode |
Palette-based layers are resolved during merge, not storage.
Tilemap Layers
- Traditional 2D tilemaps with variable tile sizes
- Fine scrolling with hidden edge buffers
- Per-tile: palette, rotation, flip, depth bias
- Tiles may reside in SRAM or DDR3
Designed to replace entire background engines from SNES, Megadrive, and arcade boards.
Text Layers
- Character-cell based, packed 36-bit cells (2 characters per word)
- Hardware scrolling (coarse + fine)
- Optional shadowing, palette resolved at render time
Ideal for consoles, debug overlays, retro-style UIs, and terminal environments.
Vector Layers
- Line and curve primitives with colour changes mid-path
- SVG-like command lists, resolution-independent
Ideal for Vectrex-style games, HUDs, oscilloscope-style visuals, and music visualisation.
Command List Layers
- Consumes draw command streams
- Compatible with immediate-mode UI systems (e.g. ImGui-like)
- Copper can inject or modify commands mid-frame
This allows modern UI systems to coexist with retro rendering paradigms.
Sprite and Primitive System
Sprites
Sprites are rendered primitives, not a special layer:
- Arbitrary size · Scaling · Rotation
- Palette or direct colour · Z-depth
- Optional pixel-perfect collision detection via Z-buffer flags
- Textures typically reside in DDR3
Primitives
| Primitive | Z-Buffer |
|---|---|
| Lines | Write / ignore / trigger interrupt |
| Rectangles | Write / ignore / trigger interrupt |
| Polygons | Write / ignore / trigger interrupt |
| Textured triangles | Write / ignore / trigger interrupt |
| Tilemap draw | Write / ignore / trigger interrupt |
| Vector paths | Write / ignore / trigger interrupt |
Z-Buffer System
The hardware Z-buffer is optional per layer and per primitive:
- True depth-aware 2D / 2.5D scenes
- Isometric layering
- Faux-3D tile depth effects
- Sprites exist inside scenes, not just on top of them
Layers can explicitly opt out of Z-based merging to preserve classic ordering when needed.
Copper System
The Copper is a lightweight control processor that executes instruction lists synchronised to raster position:
Copper instruction list
|
├── Modify registers mid-frame
├── Trigger update units
├── Control audio and graphics together
└── Fire at any scanline position
Enables:
- Raster splits and per-scanline palette changes
- Dynamic layer reveals
- OS-style draggable screens
- Music-synchronised visual effects
The Blitter Engine
The Blitter is not a legacy compatibility feature — it is a primary performance and creativity engine.
The Blitter is a dedicated DMA-driven unit that performs high-speed memory-to-memory operations without CPU involvement. Unlike modern GPUs, the Ant64 Blitter is explicit, predictable, memory-address driven, and cycle-deterministic.
Supported Operations
- Copy · Fill · Masked copy · Pattern fill
- Line draw · Area scroll
- Block rotate (90°, 180°, mirror)
- Bitplane ↔ chunky conversion (packed/planar transforms)
Logical Combination Modes
AND · OR · NOT · XOR · MIN/MAX · SHIFT (bit-accurate) · Alpha-controlled merge · Palette-index-aware masking
Enables: hardware compositing, stencil effects, shadow casting, dynamic transparency, feedback-based visuals.
Chained Blit Operations
Blits can be chained, queued, and triggered by interrupts or Copper instructions — allowing entire rendering pipelines to run without CPU loops:
Clear background
→ Scroll playfield
→ Draw tile layer
→ Draw sprites
→ Post-process result
All executed deterministically, every frame.
Blitter + Z-Buffer
The Blitter can write Z values, respect existing Z values, or ignore Z entirely — enabling depth-aware bulk rendering, occlusion-aware scrolling, and hardware-assisted isometric engines.
Blitter + Audio
Uniquely, the Blitter is not limited to graphics memory. It can also operate on:
- Audio sample buffers · Wave tables
- Granular synthesis buffers · FM operator tables
Enabling: waveform morphing, sample layering, time-domain effects, and DSP preprocessing.
Update Units
Update Units are hardware engines for structured bulk modification. They can:
- Move overlapping memory regions
- Clear blocks efficiently
- Update structured data (sprites, tiles, audio voices)
- Unpack compressed or packed data streams
Available for: graphics · audio · Copper lists
The CPU describes work instead of performing it.
Advanced Rendering Extensions
Raycasting Unit
- Grid-based ray queries, returns collision cell and distance
- Ideal for Doom-style engines, visibility checks, AI line-of-sight
Voxel Column Extension
- Column-based height rendering — extremely fast, memory-efficient
- Ideal for heightmaps, scrolling landscapes, pseudo-3D racers
Depth-Enhanced Tilemaps
- Tiles can have thickness — hardware-generated side faces and roof/ceiling visibility
- Works for top-down games (Zelda-like) and side-scrollers (Mario/Sonic-style)
- Sprites interact via the Z-buffer, preventing "floating" artefacts
Planar Surfaces & Bitplane Processing
FireStorm does not expose planar graphics as a display mode. Instead it introduces Planar Surfaces as a first-class memory and Blitter resource — preserving the creative power of bitplane representations without burdening the display pipeline.
What Is a Planar Surface?
A Planar Surface is a memory object composed of multiple 1-bit planes:
| Planes | Result |
|---|---|
| 1 plane | 1-bit mask |
| 2–4 planes | Low-bit indexed data |
| 5–8 planes | Full 8-bit indexed data |
Unlike legacy systems, planes are not tied to scanline fetch, palettes, or display timing. They are pure data.
What Planar Surfaces Are For
- High-speed bitwise effects · Masking and stencilling
- Feedback and interference patterns
- Procedural and algorithmic visuals
- Software-style renderers accelerated in hardware
They integrate cleanly with the Blitter, Copper, Z-buffered layer merging, and all modern chunky/tile/sprite layers.
Output Pipeline
Internal render resolution is decoupled from output resolution:
| Output | Availability |
|---|---|
| HDMI | All models |
| Analog RGB (SCART, VGA, etc.) | All models |
| DisplayPort | Ant64C only |
Each output can independently choose which layers to display, apply different scaling, use different colour formats, and apply different raster line effects.
Intent and Legacy
Ant64 graphics are not about brute-force polygon counts. They are about:
Expressiveness. Timing. Control. The joy of bending hardware to your will.
Just as the Amiga's Blitter and Copper became creative tools in their own right, FireStorm's graphics system is designed to be played as much as programmed.
The expectation is not that developers will merely reproduce classic visuals — but that they will discover new ones that only exist because this hardware behaves the way it does.