Releases: LinuxJedi/Copperline
Release list
Copperline 0.11.0
Copperline 0.11.0 focuses on hardware fidelity and performance: host directories can now be mounted (and booted) as native AmigaDOS volumes, the blitter's BLTPRI bus fence and the 68000's microcode write ordering are modelled much more closely, sprite serialization and several display paths were fixed against cross-emulator and real-hardware references, frame-time spikes on slower hosts were eliminated, and a golden-render timing-probe suite now guards chipset timing in CI. As always it is a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.
The display regressions noted as known issues in 0.10.0 are fixed in this release.
Required config changes
The experimental [a4091] section from 0.10.0 is gone: both SCSI boards now live under [scsi] with a controller key ("a2091", the default, or "a4091"). An existing [scsi] A2091 setup keeps working unchanged; an [a4091] section must be renamed to [scsi] with controller = "a4091".
All other new options ([[filesys]] mounts, [serial] mode = "pty") are optional additions, and omitted configs continue to parse.
Save states are compatible in both directions with 0.10.0: the state format version is unchanged.
Highlights
- Host directories as AmigaDOS volumes. New
[[filesys]]config mounts host directories as HOSTFS volumes through an autoconfig services board and a resident guest handler: full file I/O with FFS path semantics, file attributes from host permissions and.uaemsidecars, optional write protection, host path-escape hardening, warm-reboot survival, and bootable volumes viabootpriโ a Workbench directory on the host can now boot the machine directly. - Blitter BLTPRI bus fence. BLTPRI now asserts BLS against the CPU the way Agnus does: the CPU is fenced off the chip bus during a blit's warm-up window, BLS pressure follows the blitter's per-slot micro-cycle, a blit with no channels enabled asserts no fence, and line-blit startup was shortened. This class fixes MFM-decoding trackloaders that rely on exact CPU/blitter interleaving (a Jim Power boot crash was the regression example).
- 68000/68010 microcode write-ordering pass. A long series ordering register writes, ALU and address-calculation tails, and internal clocks against prefetch and bus sync the way the microcode does: EOR/EXG/BCD/Scc/MOVEM/ADDX/SUBX/MOVE USP/MOVEA/MOVE from SR, delayed SR writes, 68010 SR read ordering and long shift timing, CHK trap timing, multiply and division internal clocks, quick and bit ops, and 68020 Bcc long-displacement gating. The external RESET instruction is now modelled as a true warm reset.
- Sprite serialization fixes. Denise emits a sprite's first pixel one lo-res pixel after the horizontal comparator match (measured against FS-UAE and vAmiga with new ruler probes), and a DATA-armed sprite keeps serializing on every line โ across frames โ until SPRxCTL disarms it. Together these improve 180 of 186 vAmigaTS sprite cases and fix long-standing demo sprite placement bugs.
- Frame-spike elimination. Profiling on an i5-class machine (issue #99) removed per-colour-clock table copies in the bus hot path, per-pixel palette copies and a quadratic sprite-multiplexer scan in the renderer, and added p50/p90/p99/max frame-time reporting to
--benchmark-until. Worst-case core frame time on the profiled workload dropped from 100.8 ms to 16.1 ms and audio underruns disappeared. - Golden-render CI suite. Every
cargo test --releaserun now boots the committedtiming-test/probe binaries on the bundled AROS ROM and compares their rendered output pixel-for-pixel against blessed references: CPU/chip-bus timing rows plus DDF/DIW, sprite-position, blitter-pace, collision, and audio-enable probes. Intentional timing-model changes must re-bless the renders, so every chipset timing diff is reviewed as an image diff.
Hardware accuracy fixes
- Copper. A post-WAIT wake-up must land on a colour clock free of fixed DMA; copper-sourced sprite repositions carry the WAIT-comparator lookahead; the closed-DIW border repaint follows per-pixel COLOR00 writes (fixes raced copper-chunky effects).
- Agnus DMA and blitter. Fixed DMA slots are aligned with the hardware DAS table, BLS pressure is gated by the blitter micro-cycle, line blitter startup timing was shortened, and VHPOSR readback lead was tuned against the probe rows.
- Denise display path. Bitplane scroll-in starts from empty line state; a BPLCON1 scroll covering an off-grid DDFSTRT catches the floor reload slot; hi-res bitplane content flushes at the 2H-196 window edge; AGA border sprites are suppressed during border blank; sprite DMA owns same-line reuse data.
- Renderer and presentation. The renderer no longer synthesizes a picture for a line whose fetch never ran (phantom-line artifacts in overscan scrollers), and the TV aperture is black-padded past the framebuffer edge instead of repeating the last column.
- Floppy. DSKLEN arming no longer waits for drive-ready: a spinning-up drive arms disk DMA normally, as on real hardware (fixes trackloader disk swaps that double-write DSKLEN right after motor-on, e.g. Shadow of the Beast disk 2). Step-click sound is gated on the /TRK0 sensor and the stepper mechanism floor.
- Save states. Mid-blit state serializes deterministically (two saves of the same machine are byte-identical), backed by a new regression test that resumes a mid-blit save under live Copper and interrupt load and compares the continued timeline byte-for-byte.
External contributions
- Bernie Innocenti (@codewiz) contributed the host-directory HOSTFS filesystem (services board, guest handler, DOS ABI layer, and boot support), the serial PTY sink (
mode = "pty"), the unified[scsi]controller selection with its launcher picker, A4091 CTEST8.CLF FIFO clearing, and 68040 write-fault reporting in writeback slot 3.
Other improvements
timing-test/gained the ddfprobe suite, manual/DMA sprite position probes, blitter-pace and audio-enable probes, and a 96-sector boot loader;tools/rowphase.pyperforms content-anchored per-beam-row comparison across Copperline, vAmiga, and FS-UAE output.- The debugger gained headless exception catchpoints, address filtering for CPU read traces, and low-memory blit crash diagnostics.
- CI now runs the golden-render suite in parallel, boots DiagROM as a smoke test, and keeps the Windows/macOS/Linux packaging workflows as release build checks.
- Documentation covers the
[[filesys]]mounts, the unified SCSI configuration, and the expanded timing-probe workflow.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlinemacOS (DMG): download Copperline-0.11.0-macos-universal.dmg below, open it, and drag Copperline.app to Applications. The app is ad-hoc signed but not notarized, so first launch may require right-clicking the app and choosing Open.
Linux (AppImage): download Copperline-0.11.0-x86_64.AppImage below, then:
chmod +x Copperline-0.11.0-*.AppImage
./Copperline-0.11.0-*.AppImageWindows: download and extract the portable Copperline-0.11.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk, hard-disk, or CD images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.10.0...v0.11.0
Copperline 0.10.0
Copperline 0.10.0 is the largest release so far: 68060 support, expanded 68030/68040 MMU and cache behaviour, a much richer debugger, A4091 SCSI board emulation, host MIDI/TCP serial bridges, selectable audio output, zipped floppy images, and another broad pass over CPU, Copper, Agnus, Denise, Paula, CIA, blitter, floppy, and display timing. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.
Required config changes
None for existing valid config files. New CPU, cache, display, audio, MIDI, TCP serial, and debugger-facing options are optional, and omitted configs continue to parse.
CPU cache defaults are now closer to shipped 68020+ systems: Copperline enables the on-chip instruction/data caches by default on CPU models that have them. If you need the older cache-off behaviour for a local setup, set the relevant [cpu] icache = false and/or dcache = false override.
Save states are versioned, and 0.10.0 uses a new state format for CPU/MMU/cache state, A4091 state, serial host resources, debugger-visible machine shape, and other expanded hardware snapshots. Older state files are refused with the usual version error instead of being loaded across incompatible layouts.
Known issues
This release has known visual regressions in some display paths. These will be addressed in the next release.
Highlights
- 68060 CPU model. Copperline now exposes a 68060 CPU profile with control registers, supervisor-stack behaviour, scalar timing, branch-cache modelling, LPSTOP, 68060 MMU specifics, the reduced 060 FPU surface, unimplemented-instruction traps, 060 exception frames, superscalar pairing, and launcher/config/docs support.
- Deeper 68030/68040 MMU and cache coverage. The m68k core now models 030/040 translation, TTRs, access-error frames, ATC behaviour, write-protect and permission faults, MOVE16 alignment behaviour, and 68040 instruction/data caches, backed by expanded CPU fixture tests.
- Debugger console and frame-analysis workflow. The debugger gained a command console with clipboard paste, memory/register inspection and mutation, HUNT, TRACE START/STOP, AmigaOS task/segment introspection, catchpoints, recent-PC history, heuristic call-stack walking, reverse-run targets, richer watchpoint attribution, IO Map, Video, Break, Memory, Frame Analyzer, a Paula audio debugger tab with per-channel mutes and scopes, Copper stepping, and beam-scrubbing improvements.
- A4091 Zorro III SCSI board. A new board model covers nibble-wide autoboot ROM exposure, DMA and SCSI FIFOs, NCR/Symbios SCRIPTS register moves, memory moves, interrupts, looped SCSI pins, bus reset, drive scan/mount, and diagnostics under
COPPERLINE_DIAG_A4091. - Host I/O improvements. Paula serial can bridge to host MIDI or a bidirectional TCP sink, live audio can select output devices and mono/stereo shaping,
Cmd/Alt+Shift+Acycles audio output, and ZIP-wrapped floppy images are supported.
Hardware accuracy fixes
- CPU timing and interrupt delivery. 68000/68010 IPL poll placement, interrupt-dispatch idle clocks, STOP wake timing, 68010 prefetch/refill behaviour, MOVES timing, MOVE-from-CCR timing, and Class 2 MOVE-to-absolute-long prefetch order were tightened against microcode and cputest coverage.
- Copper pipeline and write landing. WAIT/SKIP/COPJMP execution now follows the fetch pipeline more closely, dormant COPxLC writes retarget the Copper PC, skipped MOVEs still pass illegal-register decode, vertical-blank COP1LC restart happens at the hardware position, and CPU/Copper custom-register write effects are referenced from their carrying chip-bus slot.
- Agnus/Denise fetch, display, and sprite timing. The DDF sequencer now models start/stop flip-flops, raw below-hard-start fetch origins, FMODE=0 placement, DIW comparator anchoring, BPLCON0 propagation, overprogrammed BPU suppression, sprite DMA slots/register state, HAM/dual-playfield invalid priority cases, and collision over enabled planes.
- Blitter micro-cycles. Normal and line-mode blits now follow a per-slot micro-cycle protocol, including BLTPRI/CPU starvation interactions, fixed DMA slot contention, line micro-programs, startup cycles, and completion/IRQ prediction with active Copper DMA.
- Paula, CIA, and floppy behaviour. Paula audio moved to the HRM channel state machine, AUDxEN disable is deferred to the word boundary, POTxDAT counters tick at H-sync, CIA accesses synchronize to the E clock, CIA IRQ pins and TOD alarm/TOD bug behaviour were refined, floppy step pulses observe a mechanism floor, and empty drives stay in no-media state.
External contributions
- Bernie Innocenti (@codewiz) contributed the A4091 board work, bidirectional TCP serial sink, side-effect-free debugger board peeks, debugger address masking, MOVEC disassembly, MMU reset/control-register fixes, and Zorro warm-reset behaviour.
- Lee Hobson (@hobbo91) contributed host audio-device selection, mono/stereo audio controls, the live audio-output shortcut, and the Paula serial-to-MIDI bridge.
- jbl007 (@sonnenscheinchen) contributed ZIP-wrapped floppy image support.
Other improvements
- The project now has a
copperlinelibrary crate, split bus/video/window submodules, reusable render-frame buffers,--version, and clearer unknown-option/config-validation errors. - Regression coverage grew with WinUAE cputest runner infrastructure, TomHarte SingleStepTests in CI, 68000-68060 CPU fixtures, vAmigaTS comparator tooling, image-regression hooks, and additional hardware-behaviour unit tests.
- Documentation covers the expanded CPU/MMU/cache model, debugger console/workflows, MIDI/audio configuration, headless test workflows, A4091 and Zorro behaviour, timing details, and the reorganized source layout.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlinemacOS (DMG): download Copperline-0.10.0-macos-universal.dmg below, open it, and drag Copperline.app to Applications. The app is ad-hoc signed but not notarized, so first launch may require right-clicking the app and choosing Open.
Linux (AppImage): download Copperline-0.10.0-x86_64.AppImage below, then:
chmod +x Copperline-0.10.0-*.AppImage
./Copperline-0.10.0-*.AppImageWindows: download and extract the portable Copperline-0.10.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk, hard-disk, or CD images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.9.0...v0.10.0
Copperline 0.9.0
Copperline 0.9.0 brings a large 68881/68882 FPU accuracy pass, explicit joystick input selection, no-ROM save-state startup, hard-disk volume-name overrides, and another round of CIA, Paula, keyboard, Denise, sprite, bitplane, RTC, and display-timing fixes. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.
Required config changes
None for existing valid config files. The new joystick input setting and hard-disk volume-name fields are optional; omitted configs keep the existing defaults.
Save states are versioned, and 0.9.0 uses a new state format for 80-bit extended FPU register snapshots. Older state files are refused with the usual version error instead of being loaded across incompatible layouts.
Highlights
- 68881/68882 FPU accuracy. The in-tree m68k core now has an 80-bit extended register file, pure-Rust softfloat paths, packed-decimal real support, exact FMOVECR constants, memory/immediate-source monadic operations, extended-precision exp/log/trig/inverse-trig/hyperbolic kernels, FPCR rounding propagation, FPSR exception bytes, and exact FMOD/FREM quotient handling.
- Explicit joystick input mode. Copperline now has a status-bar toggle, menu entry, launcher control, and
[input] joystick = "gamepad" | "keyboard"config setting so keyboard joystick emulation and physical gamepad input are selected deliberately. - No-ROM save-state startup.
--load-statecan restore a snapshot without opening the original ROM file first, using a placeholder only long enough to let the state replace the machine. Loading a state over the configuration screen now installs live host audio instead of keeping the silent placeholder sink. - Hard-disk volume-name overrides. Directory and generated hard-disk images can now expose configured AmigaDOS volume names, with launcher and TOML round-tripping for IDE and SCSI drives.
- Local-time RTC reporting. The battery-backed RTC now reports host local time where the platform exposes it, while
COPPERLINE_RTC_FIXED_SECSremains deterministic for replay and debugging.
Hardware accuracy fixes
- CIA timer one-shot behavior. CIA one-shot timers now keep the START bit visible through the auto-started interval, matching software that polls the running state to time the one-shot.
- Floppy motor timing. Drive motor spin-up/spin-down state is now forwarded through the controller path used by disk DMA and status reporting.
- Keyboard KDAT handshake. The emulated keyboard MCU now accepts short but real Amiga-side KDAT-low handshake pulses after a byte, instead of requiring the longer nominal HRM pulse width.
- Paula POTxDAT counters. POTGO-driven high pins now hold the matching POTxDAT counter at zero, matching the way software reads fully charged paddle/fire-button lines.
- Display fetch origin and latches. Early hi-res DDFSTRT output is word-aligned, late-DDF first words sample complete plane latches, manual sprite data latches survive position retiming, and per-frame collision accumulation is gated by CLXDAT observation.
Other improvements
- The vendored m68k fork moved from
vendor/m68ktocrates/m68kand is packaged ascopperline-m68k, making the local dependency boundary explicit. - Menu popups size themselves to the widest visible label.
- Documentation covers joystick input selection, drive volume-name overrides, FPU model details, KDAT handshake timing, POTxDAT behavior, and the updated m68k crate layout.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlinemacOS (DMG): download Copperline-0.9.0-macos-universal.dmg below, open it, and drag Copperline.app to Applications. The app is ad-hoc signed but not notarized, so first launch may require right-clicking the app and choosing Open.
Linux (AppImage): download Copperline-0.9.0-x86_64.AppImage below, then:
chmod +x Copperline-0.9.0-*.AppImage
./Copperline-0.9.0-*.AppImageWindows: download and extract the portable Copperline-0.9.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk, hard-disk, or CD images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.8.0...v0.9.0
Copperline 0.8.0
Copperline 0.8.0 adds the no-config machine launcher, external Zorro board plugins, A2065 networking, directory hard-disk filename encoding fixes, startup state-load fixes, and another round of Denise, Agnus, sprite, bitplane, display-window, and save-state render timing improvements. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.
Required config changes
None for existing valid config files. Starting Copperline with no machine, config, ROM, override, or headless/scripted option now opens the machine-configuration launcher instead of immediately booting the default A500 setup. To boot directly, pass a machine option such as --model A500, provide a config, or use the headless/scripted path you already use.
Base A500, A500OCS, A600, A1200, A1000, and CD32 profiles now default to no battery-backed RTC, matching the shipped machines. If you relied on the older fitted-clock default, set [machine] rtc = true.
Save states are versioned, and 0.8.0 uses a new state format for functional Zorro device snapshots. Older state files are refused with the usual version error instead of being loaded across incompatible layouts.
Highlights
- Machine-configuration launcher. A no-options launch now opens a full configuration screen, also available from the menu. It can edit machine profile, chipset, CPU, memory, ROM, floppy, hard-disk, CD, Zorro, audio/video, and emulation settings, then run, load, save, or reset them through the same TOML schema as hand-written configs.
- External Zorro board plugins. Functional Zorro boards now sit behind a
ZorroDeviceboundary, and WASM plugin boards can expose deterministic read/write/tick/interrupt behavior with optional DMA, config, file-resource, and networking capabilities. - A2065 networking. Copperline includes an in-tree Commodore A2065 Ethernet board with Am7990 LANCE programming-model coverage and a loopback backend. Networking remains a host resource and is documented as non-deterministic while traffic is active.
- Schema-driven plugin settings. WASM board manifests can declare string, bool, int, file, and enum options. The launcher renders those schemas as editable controls and writes per-board config overrides.
- Startup state loading. Loading a save state from the launcher now replaces the powered-off placeholder timeline cleanly, closes the launcher, wakes the event loop, and reanchors pacing before the first restored frame.
Hardware accuracy fixes
- Sprite DMA and pointer timing. Agnus sprite DMA frontiers now carry across the frame boundary, sprite pointer retargeting distinguishes same-line descriptor restarts from pending-data retargets, and vertical blank inhibition prevents pre-fetch SPRxPT writes from retargeting descriptors that hardware has not fetched.
- Denise sprite and palette latches. Active sprite POS writes retime horizontal starts without cancelling the latched data stream, manual SPRxDATA/SPRxDATB writes run in the sprite comparator domain, and OCS/ECS COLORxx replay lands in Denise final palette/output timing.
- Bitplane fetch and shifter handoff. Late DDF rows start output at the first fetched word, per-plane output waits for each plane fetch slot, BPL1DAT handoff no longer leaks stale shifter tails, and manually written BPL1DAT data stops when real DMA replaces the shifter contents.
- Display-edge replay. HAM display-window history, overscan COLOR00 handling, AGA BPLCON1 delay replay, and display-window edge pixels were tightened so stale palette or shifter state does not leak across row boundaries.
- Restored-frame rendering. Loading a state mid-field preserves the hardware timeline while withholding partial render-capture buffers until a complete field is available for screenshots, frame dumps, and presentation.
Other improvements
- Directory-as-hard-disk filename handling now preserves host-path encoding more robustly.
- The offline Flatpak cargo source list was regenerated for the new WASM runtime dependency set.
- Documentation covers the launcher, Zorro/WASM plugin ABI, A2065 config, networking determinism caveats, save-state device snapshots, and the updated display timing model.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlinemacOS (DMG): download Copperline-0.8.0-macos-universal.dmg below, open it, and drag Copperline.app to Applications. The app is ad-hoc signed but not notarized, so first launch may require right-clicking the app and choosing Open.
Linux (AppImage): download Copperline-0.8.0-x86_64.AppImage below, then:
chmod +x Copperline-0.8.0-*.AppImage
./Copperline-0.8.0-*.AppImageWindows: download and extract the portable Copperline-0.8.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk, hard-disk, or CD images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.7.0...v0.8.0
Copperline 0.7.0
Copperline 0.7.0 expands the machine model catalogue, improves the debugger workflow, adds controllable warp-speed frame skipping, wires up macOS DMG release builds, and tightens another set of Copper, Agnus, Denise, blitter, sprite, floppy, and display-timing edge cases. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.
Required config changes
None for existing valid config files. Bare/no-config runs now use the A500 Rev 6A default: ECS 8372A Agnus with OCS 8362 Denise, 512 KiB chip RAM, and 512 KiB trapdoor slow RAM. If you depended on the older plain OCS A500-like default, set --model A500OCS or [chipset] revision = "OCS".
Highlights
- Expanded machine profiles. The default
A500profile now models the common Rev 6A board,A500OCScovers early OCS A500/A2000-style hardware,A500Plususes the 8375 Agnus and RTC, and a newA1000profile models the bootstrap ROM plus writable control store Kickstart load path. - Debugger workflow improvements. The debugger and frame analyzer are independent tool windows, breakpoints can be conditional and counted, the UI can step over/out and poke memory or CPU registers, and the GDB monitor gained
stepoverandfinishhelpers. - Warp-speed controls. Warp mode can now retire multiple emulated frames per presented frame, with
2x,4x,8x,16x, andMaxlimits available from config, menu, and keyboard shortcuts. - Distribution improvements. A macOS workflow now builds and attaches a universal
.dmgwith the app bundle and bundled AROS ROM. Homebrew remains the source-build install path for macOS users who prefer it. - Floppy-drive wiring controls. Config and CLI options can connect one to four floppy mechanisms, including empty external drives for scripted or delayed disk insertion.
Hardware accuracy fixes
- Copper and custom-register behavior. Copper lists can live at chip RAM address zero, COPCON byte writes mirror onto the word latch so byte bit operations can set CDANG, and Copper/manual sprite palette timing is aligned with the display beam.
- Agnus and Denise display timing. DDF register precision is now derived from the Agnus revision, low-res DDFSTOP/DDFSTRT edge cases use the correct fetch origin, same-line DIW start writes update the display origin, and CPU palette writes replay at their beam-time positions.
- Sprites and bitplanes. Manual BPL1DAT writes can enable sprites on scanlines outside the vertical DIW, direct sprite data writes are not clipped by the DMA vertical window, and Copper colour writes stay phase-aligned with the bitplane pixels they recolour.
- Blitter datapath. Normal-mode A/B barrel-shifter carry is initialized at the start of a new blit while still carrying across rows within that blit.
- Machine-specific behavior. A1000 reset and LED/audio-filter behavior now follow the writable-control-store machine model, and external floppy drive connection/reset behavior is exposed through the hardware model instead of inferred only from inserted media.
Other improvements
- Untagged UI builds show the short git commit in the window title and About panel.
- The frame analyzer can keep the debugger open beside it and supports drag/cursor navigation of selected beam slots.
- Documentation and example configs cover A1000 booting, A500 Rev 6A defaults, floppy-drive wiring, warp limits, debugger controls, and the macOS DMG install path.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlinemacOS (DMG): download Copperline-0.7.0-macos-universal.dmg below, open it, and drag Copperline.app to Applications. The app is ad-hoc signed but not notarized, so first launch may require right-clicking the app and choosing Open.
Linux (AppImage): download Copperline-0.7.0-x86_64.AppImage below, then:
chmod +x Copperline-0.7.0-*.AppImage
./Copperline-0.7.0-*.AppImageWindows: download and extract the portable Copperline-0.7.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk or hard-disk images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.6.0...v0.7.0
Copperline 0.6.0
Copperline 0.6.0 adds a chip-bus frame analyzer, a remote GDB debugger frontend, Zorro identification metadata, Linux Vulkan presentation checks, and another pass over display, sprite, floppy, and live-audio timing. It is still a hardware-behavior release: the fixes model the underlying Amiga subsystems rather than individual titles.
Required config changes
None. Existing configs should continue to load. Linux windowed presentation now requires a Vulkan-capable driver stack; headless runs are unaffected.
Highlights
- Chip-bus frame analyzer. A new debugger tool window visualizes per-frame chip-bus ownership, DMA spans, CPU waits, blitter pressure, and display fetch activity for timing investigations.
- Remote GDB debugging. Copperline can now expose the emulated CPU to a GDB frontend for source-level and machine-level debugging outside the built-in UI.
- Zorro board identification. Autoconfig metadata can now identify Copperline boards using the registered manufacturer ID, board ID, and a version-derived serial number.
- Linux presentation hardening. Linux GUI presentation now requires Vulkan explicitly, with CI smoke coverage for the required X11/Vulkan runtime libraries.
Hardware accuracy fixes
- Agnus and Denise display timing. TV-visible horizontal overscan is modelled, bitplane pre-fetch no longer scrolls into the first line of a DMA block, and sprite pointer/fetch timing is tightened around DMA descriptor updates.
- Chip-bus and audio pacing. Bitplane ownership planning avoids redundant work, pending sprite descriptor origins are preserved, and live audio starvation during heavy display effects is reduced.
- Floppy media. Padded UAE-1ADF AmigaDOS tracks are accepted without treating the padding as part of the logical track payload.
- Zorro Autoconfig. The built-in identification board reports Copperline metadata through hardware-derived Autoconfig fields.
Other improvements
- The debugger documentation now covers the chip-bus analyzer and remote GDB flow.
- Homebrew release documentation was refreshed around formula checksum and tap validation steps.
- The README and guide now document the Linux Vulkan presentation requirement.
- Documentation credits and internals notes were updated for the new timing and diagnostic workflows.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlineLinux (AppImage): download Copperline-0.6.0-x86_64.AppImage below, then:
chmod +x Copperline-0.6.0-*.AppImage
./Copperline-0.6.0-*.AppImageWindows: download and extract the portable Copperline-0.6.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk or hard-disk images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.5.0...v0.6.0
Copperline 0.5.0
Copperline 0.5.0 is a compatibility-focused release with a broad pass over OCS/ECS and AGA display timing, sprite replay, HAM rendering, floppy image handling, and live-audio pacing. It also includes the first external contribution: thanks to @sonnenscheinchen (jbl007) for improving directory scans by filtering UAE metadata files.
Required config changes
None. Existing configs should continue to load. The built-in A500 profile now defaults to the common 512K chip / 512K slow RAM setup; explicit config values are unchanged.
Highlights
- OCS/ECS and AGA display compatibility. Copper-driven palette changes, wide and clipped DIW/DDF windows, bitplane fetch timing, and AGA sprite palette timing are modelled more closely.
- HAM rendering fixes. HAM hold state now advances through hidden DMA samples, lo-res edge fetches stay aligned at the right edge, and palette timing no longer smears copper-gradient scenes.
- Sprite replay fixes. Manual sprite data/control writes, SPRxPOS comparator timing, sprite DMA rewrites, sprite reuse, and zero-height DMA descriptors now follow the hardware timing more closely.
- Better media defaults and scans. The default A500 memory profile is now 512K chip / 512K slow RAM, PAL-sized ADF images get matching track gaps, and directory scans ignore UAE metadata files.
Hardware accuracy fixes
- Denise and Agnus display timing. OCS DIW/DDF edge cases, per-block bitplane DMA, DDF-start plane count latching, BPLCON1 scroll retiming at the DIW edge, and separate COLORxx vs AGA BPLCON4 sprite-palette timing are tightened.
- HAM and palette replay. Hidden DMA samples advance HAM colour history, early lo-res DDF fetches expose complete groups without leaking stale right-edge pixels, and same-line COLOR writes use the Denise palette-output phase.
- Sprites. SPRxPOS writes use the Denise comparator domain, manual sprite writes preserve compare-boundary output, sprite DMA pointer rewrites seed the next descriptor fetch, and zero-height descriptors stop cleanly.
- Blitter and bus timing. Per-block bitplane DMA, blitter carry/latch behaviour, and interrupt unmask handling are more accurate across fixed-DMA and copper-heavy scenes.
- Floppy media. PAL-length ADF track gaps are represented more accurately.
Other improvements
- Reverse-frame debugger controls were added to the UI.
- Headless diagnostics now include cached HAM, manual bitplane, frame-pixel, palette-row, sprite-capture, and sprite-pixel tools for timing investigations.
- Live audio prebuffer pacing was improved.
- Documentation and example configuration comments were refreshed around machine profiles, diagnostics, save-state behavior, and timing internals.
- All
COPPERLINE_*test and utility environment reads now go through the cachedenvcfgsnapshot helper.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlineLinux (AppImage): download Copperline-0.5.0-x86_64.AppImage below, then:
chmod +x Copperline-0.5.0-*.AppImage
./Copperline-0.5.0-*.AppImageWindows: download and extract the portable Copperline-0.5.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk or hard-disk images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.4.0...v0.5.0
Copperline 0.4.0
Copperline 0.4.0 adds reverse debugging, keyboard joystick control, optional realtime-like scheduling for latency-sensitive threads, and a broad hardware-timing pass across AGA display, 68020/68030 chip-bus behavior, Paula disk DMA, and save-state resume.
Required config changes
None. Existing configs should continue to load. New settings are optional.
Highlights
- Reverse debugging. A deterministic snapshot/input replay ring now powers reverse-step support in the debugger and a headless last-writer reverse watchpoint for memory corruption investigations.
- Keyboard joystick input.
Cmd+J/Alt+Jcycles joystick input mode between auto, keyboard, and gamepad. The default now derives from available host input, with keyboard as the auto fallback. - Opt-in realtime-like scheduling.
[emulation] realtime_priority = trueraises the pacer and audio callback priority where the host OS allows it, while leaving the renderer at normal priority. - Save-state resume follows the saved machine. Loading a state now reconfigures the host-facing emulator around the saved machine descriptor before continuing.
Hardware accuracy fixes
- 68020/68030 cache and chip-bus timing. On-chip caches are modelled by default, 020 instruction timing is recalibrated, 68020+ chip-bus writes use the three-clock write-posted cycle, and chip/custom reads account for data-return waits.
- AGA blitter and display timing. AGA blitter/chip-bus timing, Denise captured-playfield timing, wide-FMODE bitplane fetch counts, and wide-open DIW presentation are tightened.
- Sprite timing. Copper-repositioned held sprites, SPREN-off held display, attached sprite presentation, manual sprite position writes, BPLCON4 sprite page nibbles, and BPLCON4 sprite timing are modelled more closely.
- AGA scroll decode. BPLCON1 AGA scroll fields are decoded separately.
- Paula disk DMA. Disk-read DMA now preserves the correct word phase through Paula.
- Video presentation. The TV lower crop is tightened by one row.
Other improvements
- Auto-generated filenames now use local
YYYYMMDDHHmmSStimestamps. - The example config is easier to scan and documents TOML escaping for Windows paths.
- Reverse debugging, savestate determinism, realtime priority, AGA sprite diagnostics, and the timing-test workflow are documented.
- The Homebrew formula is updated to v0.4.0 with the final tag tarball checksum.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlineLinux (AppImage): download Copperline-0.4.0-x86_64.AppImage below, then:
chmod +x Copperline-0.4.0-*.AppImage
./Copperline-0.4.0-*.AppImageWindows: download and extract the portable Copperline-0.4.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk or hard-disk images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.3.0...v0.4.0
Copperline 0.3.0
Copperline 0.3.0 brings threaded rendering on by default, a round of host-CPU optimisations, and several hardware-accuracy fixes (AGA dual playfield, floating bus, ECS DIWHIGH). It also adds a portable Windows build.
Required config changes
Existing configs keep working, but two keys have changed and you should update yours:
-
[machine] modelis now[machine] profile. Rename the key:[machine] profile = "A1200" # was: model = "A1200"
The old
modelkey is still accepted as a deprecated alias, but it can be confused with[cpu] model(and triggers a "duplicate key model" parse error if the[machine]header is commented out while its value line is not). -
[emulation] speedis gone. "real" was the only timing model, so the key carried no information. It is still accepted and ignored (with a warning), but you can delete it.[emulation] # speed = "real" # remove this line; it is now ignored
Highlights
- Threaded rendering by default. The framebuffer paint runs on its own thread, fed by an owned
RenderInputbundle, while the deterministic core keeps cycle-stepping. The emulated result is unchanged and still byte-identical. - Host-CPU optimisations. Idle floppy/keyboard device ticks are skipped, timed-device ticks are deferred to observation/instruction boundaries, the bitplane fetch pattern is memoised into a per-plan slot bitmask, background fill is chunked, and collision/Paula hot paths were tightened. Live playfield collision is now memoised.
- Portable Windows build. A portable Windows x64 zip is now produced by CI and attached to releases.
Hardware accuracy fixes
- AGA dual playfield decoded as four bits per field. Lisa adds plane 7 to playfield 1 and plane 8 to playfield 2; the previous 3-bit decode collapsed colours (e.g. Zool's black body rendered orange).
- Floating bus. Unmapped CPU reads now float to the chip data bus instead of returning a fixed value.
- ECS DIWHIGH revert. A DIWSTRT/DIWSTOP write now reverts DIWHIGH to its OCS-implicit value in the renderer, matching ECS Agnus behaviour.
- 256 KiB Kickstart ROMs are accepted and mirrored across the full ROM window.
- CD32 runtime CD inserts notify
cd.devicevia a tray delay so games detect the new disc.
Other improvements
- Deterministic benchmark mode added for performance work.
- gilrs gamepad mapping warnings are quieted, and use of saved controller calibration is logged.
Documentation
- Documented the AGA dual-playfield decode, benchmark mode, and device-tick batching.
- Documented the floating-bus model, RTC determinism, and the ECS DIWHIGH revert.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlineLinux (AppImage): download Copperline-0.3.0-x86_64.AppImage below, then:
chmod +x Copperline-0.3.0-*.AppImage
./Copperline-0.3.0-*.AppImageWindows: download and extract the portable Copperline-0.3.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe bundled AROS boot ROM lets Copperline run out of the box. A real Kickstart ROM and disk or hard-disk images are still required to run commercial Amiga software; these are not included.
Full changelog: v0.2.0...v0.3.0
Copperline 0.2.0
Copperline 0.2.0 is the first release that boots out of the box and ships installable packages for macOS and Linux.
Highlights
- Boots with no ROM of your own. The open-source AROS Kickstart replacement is now bundled and booted by default, so Copperline runs immediately without a copyrighted Kickstart. A new menu lets you load your own Kickstart and extended ROMs at runtime.
- Installable everywhere.
- macOS: the repository is now a Homebrew tap (
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline && brew install copperline). It builds from source, so the binary is not subject to Gatekeeper quarantine. - Linux: distributed as a Flatpak (for Flathub) and as a portable AppImage attached to this release. Both bundle the AROS boot ROM.
- macOS: the repository is now a Homebrew tap (
Fixes and improvements
- Audio output (cpal) is now suspended while the host pauses the emulator, instead of looping the last buffer.
- Several fixes to the Linux build and runtime path.
Installation
macOS (Homebrew):
brew tap LinuxJedi/copperline https://github.com/LinuxJedi/Copperline
brew install copperlineLinux (AppImage): download Copperline-0.2.0-x86_64.AppImage below, then:
chmod +x Copperline-0.2.0-*.AppImage
./Copperline-0.2.0-*.AppImageLinux (Flatpak): the Flathub submission is in progress; until it lands you can build the bundle from packaging/flatpak/ (see that directory's README).
From source:
cargo build --release
./target/release/copperlineA real Kickstart ROM and disk or hard-disk images are still required to run commercial Amiga software; these are not included.
Internal / CI
- New CI workflows build and lint the Flatpak bundle and the AppImage, and audit the Homebrew formula.
- Documentation updates.
Full changelog: v0.1.0...v0.2.0