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