Cycle-driven · OCS / ECS / AGA · written in Rust

Copperline

An Amiga emulator that models the hardware, not individual titles. The chip bus is arbitrated per colour clock; the Copper and blitter are scheduled per DMA slot; 68000 interrupt latency is modelled. Timing-sensitive demos and games run at real speed.

  • 68000 - 68040
  • OCS
  • ECS
  • AGA
  • A500 - A1200
  • CDTV
  • CD32
  • HAM8

// features

Modelled, not faked

Compatibility problems are fixed by modelling the 68000, Agnus, Denise, Paula, CIA, floppy and timing - never by branching on a title's name.

timing core

Cycle-driven chip bus

The chip bus is arbitrated per colour clock between refresh, display, sprite, disk and audio DMA, the Copper, the blitter and the CPU - with hardware per-word bus sequences and modelled 68000 interrupt-recognition latency.

chipsets

OCS, ECS & AGA

Independent Agnus / Denise revisions and machine profiles from the A500 to the A1200, plus CDTV and CD32. Boots Kickstart 1.3 / 2.05 / 3.1 and DiagROM, and runs the timing-sensitive regression set at real speed.

cpu

68000 through 68040

Selectable 68000 / 68EC020 / 68020 / 68030 / 68040 and clock, accurate 68000 cycle counts, optional on-chip caches, and a 68881 / 68882 FPU (default-on for the 040).

peripherals

Real I/O paths

A bit-timed keyboard (6500/1 MCU), mouse, USB gamepad (pure-Rust gilrs, no SDL2), 4-channel Paula audio, floppy (ADF / ADZ / DMS / SCP), Gayle IDE, A2091 SCSI, and CDTV / CD32 CD.

graphics

The full AGA path

8 bitplanes, a 256-entry 25-bit palette, HAM8, FMODE wide fetch, dual playfield, EHB, sprites and hardware collisions - replayed by beam position so the renderer never races the chipset.

tooling

Deterministic by design

An in-window debugger, deterministic save states, input recording / replay, and headless screenshot & frame-dump capture. Every replay is byte-identical.


// screenshots

See it run

Real captures from the emulator window - chrome, status bar and all.

Copperline window showing a 256-colour AGA HAM8 image
AGA HAM8. A 262 144-colour image decoded through the full Alice / Lisa display path.
Workbench 3.1 desktop running in Copperline
Workbench 3.1. Booted from an IDE hard disk on an A1200 profile.
Spaceballs State of the Art demo running in Copperline
State of the Art. Spaceballs' OCS demo - timing-sensitive, at real speed.
// status bar

Hardware at a glance

The bottom bar mirrors the front panel: power, floppy and hard-disk activity LEDs, a live floppy track counter, disk insert / swap / eject controls, an audio volume slider, and shortcuts for the menu, screenshots, pause and power.

Close-up of the Copperline status bar showing power, floppy and hard-disk LEDs, track counter, disk controls, volume slider and power buttons

// what gets emulated

The machine, end to end

From the 68000 prefetch queue to Paula's audio mixer - the timing model is documented next to the code and backed by named regression tests.

A vendored pure-Rust m68k core drives the CPU. The detailed architecture and timing model live in the internals docs.


// download

Get Copperline

Grab the latest release, or build from source with a stable Rust toolchain. Developed and tested on macOS; the Linux and Windows coming soon.

Download the latest release
build from source
# clone and build (release - debug is too slow for real-time)
git clone https://github.com/LinuxJedi/Copperline.git
cd Copperline
cargo build --release

# run with a Kickstart ROM, or a config file
./target/release/copperline path/to/kickstart.rom
./target/release/copperline --config copperline.toml

Requires Rust 1.87+ (stable). No SDL2 dependency.