Copperlist
An Amiga cracktro, chip by chip, for Resolume

What it does
An FFGL source plugin for Resolume Arena and Avenue that plays an Amiga cracktro, written against an emulation of the chips that made cracktros look the way they did rather than drawn to look like one. The Amiga's copper is a tiny co-processor that waits for the video beam to reach a screen position and then writes to a hardware register, usually a colour. A copper bar is nothing more than colour-register writes at the start of scanlines.
So Copperlist emulates the parts of the chipset whose limits you can see: chip RAM, the copper reading real two-word instructions out of it, 32 twelve-bit colour registers, five low-resolution bitplanes, eight 16-pixel sprites and the blitter. The demo itself is C++ that builds a copper list and issues blits every field, the way the original coders' vertical-blank routines did. Nothing in the demo can get at a pixel any other way, so the look can't cheat.
What comes out: a bar is horizontal and one line tall per colour step, because a write lasts until the next one. Two bars that cross show whichever write came later, never a blend. A colour change in the middle of a line lands on the copper's own grid, with a WAIT resolving to four low-resolution pixels and each MOVE costing eight. There are 4,096 colours and not one more. The starfield is three sprites, moved by the copper on every line that has a star in it. The scroller moves by whole pixels and its wave by whole lines, because each column is a separate blit. The cube is the blitter's line mode, and filled, it's an area fill. Colour cycling is three registers rotated, and fewer bitplanes means fewer colours and fewer scenes.
The emulation runs fields, not frames: PAL at 320×256 and 50 Hz or NTSC at 320×200 and 60 Hz, off the host clock, and a 60 fps composition repeats fields rather than interpolating between them. Integer scaling shows the chip's picture at whole multiples, letterboxed, with the copper bars running on into the border the way they did on a monitor. Fit and Fit Smooth fill the frame, with a non-square pixel aspect worked out from the colour clock. Each scene is switched off by the control that already says how many of it there are.
- An emulated copper, blitter, bitplanes, sprites and 12-bit palette, with the cracktro written against them
- Copper bars with count, height, speed and palette, and a Bar Wave that starts each bar on the copper's grid
- A sine scroller with your own text, blitted a column at a time, and colour cycling
- A three-layer starfield of sprites multiplexed by the copper
- A wireframe or filled cube from the blitter's line mode, and up to 16 bobs on four paths
- PAL or NTSC fields at 50 or 60 Hz, and one to five bitplanes
- Integer, Fit or Fit Smooth scaling, non-square or square pixels, and a border, black or transparent background
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.0, and early days. It hasn't been loaded into Resolume on macOS yet. On Windows it has: a build loads, registers and renders in Resolume Arena 7.27.1 on software rendering (no GPU), with every parameter as declared, but 23 of its controls couldn't be shown moving there, because a source that never stands still raises the check's noise floor above what one control changes. Everything else is measured by an offline harness that drives the real plugin and reads the emulated chip's own memory and picture, then the rendered output at two rasters. Across 8,544 bar lines every colour change lands on the copper's four-pixel grid and none is closer than one MOVE; on 5,982 crossing lines no pixel is a colour no MOVE wrote; 576 blitter lines match a closed-form Bresenham to the pixel; every channel of 17.6 million output pixels is a multiple of 17; the field count stays right over long runs, including from Resolume's measured ~499 million ms clock; a field reached by running is byte-identical to the same field reached by a jump; and Integer output is the chip's picture bit for bit. It catches eleven models that are wrong on purpose and a one-character change to its own shader, and all 24 sweepable controls change the picture. The emulation costs about 0.86 ms a field on the CPU whatever the output size, and under 1 ms a frame all the way up to 4K. It leaves out what doesn't show (the 68000, audio, interrupts) and DMA slot contention, so with five bitplanes the copper is never held up the way a real machine's would be. There's a user guide and a browser demo, which is a port rather than the plugin, but no OpenFX port. The macOS builds are signed and notarised. Try it in your own rig before you trust it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead