Copperline 0.14.0: real drives, real networks, and a 1084 on your desk
This is the release where the emulator reaches out of the host machine. It drives real 3.5" floppy drives through DrawBridge, Greaseweazle and SupercardPro controllers, so the machine in the window reads the disks on your desk; it attaches the guest's Ethernet card straight to a host network adapter, so the Amiga sits on the real LAN; and it brings RTG to the 24-bit machines with the Zorro II Picasso II and Picasso II+, so an A2000-class machine gets high-colour Workbench too.
Around the machine, the window learns to look like the monitor it deserves - CRT shaders, screen tints and a 1084-style front bezel - and picks up rewind, quick-save slots, autofire and input remapping. Underneath, an experimental JIT CPU mode runs accelerator-class speeds, and a WinUAE-inspired debugging suite lands. As always it is a hardware-behaviour release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.
Real floppy drives
Any drive bay can host a real 3.5" mechanism through Rob Smith's
FloppyBridge, which is built into Copperline by cargo - nothing to
install. [floppy.df1] bridge = "greaseweazle" (or
"drawbridge", "supercardpro") puts the
physical drive on the emulated bus: the guest reads, writes and steps
the real disk, drive mechanics stay real-time, and the port
auto-detects, with bridge_port, bridge_cable
and bridge_density as overrides. A per-bay launcher page
configures it, and the bridge serving speeds were tuned so loading
from a real drive is as quick as the mechanism allows.
This is the headline feature of the cycle, contributed by Lee Hobson (@hobbo91).
RTG for the 24-bit machines
The Village Tronic Picasso II (CL-GD5426) and Picasso II+ (CL-GD5428)
are emulated as Zorro II autoconfig boards driven by the unmodified
Picasso96 PicassoII.card driver. Because they are
Zorro II cards they work with 24-bit CPUs, so RTG Workbench is no
longer reserved for the big boxes - a stock-CPU machine with Zorro
slots gets high-colour screens too. [rtg] card =
"picasso2plus" selects one, vram = "1M" or
"2M" sizes it, and the Z3660 remains the default
Zorro III card on 32-bit-bus machines.
Bridged Ethernet
The A2065 gains [a2065] net = "bridge", which attaches
the guest's complete Ethernet frames directly to a named host adapter
(interface = "en0"; list the candidates with
--list-net-interfaces). The Amiga becomes a first-class
citizen of the LAN - DHCP from your router, static addressing, local
servers - on Linux, macOS and Windows, with Wi-Fi supported
best-effort. The user-mode NAT backend from 0.13.0 stays the
zero-setup default.
The window becomes a monitor
A GPU shader pass over the display offers three built-in CRT presets -
scanlines, mask and crt - or
loads your own WGSL file, mixed in by shader_strength.
[display] bezel (toggle live with Cmd+M /
Alt+M) frames the picture in a 1084-style monitor front,
with a Copperline badge and a power LED that follows the guest's /LED
line and burns brighter while the audio filter is engaged; a HDD LED
lights on host-folder filesystem access. [display] tint
filters the screen through black-and-white, green or amber monochrome
phosphor, or sepia.
All of it is window-only: screenshots, frame dumps and headless captures are never shader-processed, tinted or framed.
Rewind and quick-save slots
[emulation] rewind (or the Rewind menu item) records the
whole machine at an interval into a bounded memory budget, and
Cmd+Z / Alt+Z steps it back - a 512K A500
buys minutes of history. Ten numbered quick-save slots sit alongside:
Cmd/Alt plus a digit saves,
Cmd/Alt+Shift plus a digit loads - no dialog, no file to
name.
Input quality-of-life
Autofire pulses a held fire button at 3 to 30 Hz on emulated time -
scripted input is never gated, so replays stay exact. The new Input
Mapping window edits the keyboard-joystick and shortcut maps with
one-meaning-per-key validation. Host mouse sensitivity is adjustable
from quarter to quadruple speed, and a mouse-capture policy chooses
between click-to-grab, grab-on-focus and manual-only
(Cmd+G / Alt+G), fixing three capture
defects along the way.
An experimental JIT
[cpu] jit = true switches a 68020 or later to the m68k
core's batch/trace-JIT path: the machine behaves like an ideal
accelerator at clock_mhz, one instruction per CPU clock
with zero-wait fast RAM - a 50 MHz 68040 runs on the order of
50 MIPS, and the launcher's clock presets now reach 100 and 200 MHz.
The on-chip cache models stay active and chip / slow RAM keep their
shared-bus arbitration, as on a real accelerator; cycle-counted
chip-level effects no longer line up, which is why it is off by
default.
A debugging suite
The headless debugger and the debugger GUI gain a WinUAE-inspired
set: a custom-register access validator that reports chipset misuse
with the PC that caused it ([debug] validate_chipset)
backed by a last-writer table, a self-modifying-code detector
(detect_smc), bus-error injection, per-DMA-channel and
PC-qualified watchpoints, blitter / floppy / keyboard hardware-misuse
checks, and a memory heat map tab in the Frame Analyzer showing where
the frame's traffic lands. The console dumps ExecBase scheduler state
and struct Task.
Scripting gains absolute pointer positioning -
--mouse-to-after SECS X Y steers the pointer to a screen
pixel via a sprite-0 servo - and the control protocol adds
capture.region_digest, a run-until-stable-frame target,
watch qualifiers in break.list, and scheduled input that
survives session reconnects.
Host volumes under Kickstart 1.3
Host-directory volumes now mount under Kickstart 1.3, so a plain 1.3 machine can read and write a folder on the host. Contributed by Simon Dick (@sidick).
The browser build
copperline.dev/try gains PAL / NTSC machine selection with overscan and tint display controls, remembers the Kickstart across visits, names its save states alongside the quick slot, and holds a screen wake lock so a long demo does not dim the phone. The hosted page installs as a PWA and boots offline.
Performance
A four-part optimisation pass over the render and chipset hot paths - DDF arbitration, planar row conversion, caching of stable display and DMA line work, and idle / repeated-frame presentation - cuts host CPU cost across the board, and an idle launcher no longer spins a busy redraw loop.
Hardware accuracy fixes
- A mid-line write that flips HAM lands in Denise's colour-selection phase, not the bitplane phase, matching measured hardware - fixing stale colours in HAM demos that switch mid-screen.
- CPU- and Copper-written BPLxDAT batches snap to the serialiser's word-load grid, fixing displays that hand-feed the serialiser - the Hamazing Hexagon's left edge.
- The 68020 charges its pipeline refill on taken branches per the datasheet tables, with the DBcc refill folded into its table entry - Cubic Dream's 020 timing.
- A DMA sprite line disarmed by a CTL write before its HSTART is cancelled, as on real Denise - the Hybris status panel.
- A 68000 word write split across the services board's MMIO doorbell fires the doorbell correctly (Simon Dick).
- Z3660 planar blits honour their minterm, and P2D NOTSRC looks up the complemented pen (Bernie Innocenti).
- Presentation geometry latches across border-only frames - no more one-frame jumps when a loader blanks the screen - the live TV view centres on the captured aperture, and the NTSC TV-aperture crop extends to standard 60 Hz scans.
Desktop, tooling and platform
- In the launcher, CD folds into a Storage tab with footer sub-page
navigation, hard disks gain a Boot Priority sub-page, unavailable
settings dim in place instead of vanishing, and a pass of cosmetic
tidy-ups lands across the tabs. In the config, a hard drive can be
a table -
unit0 = { path = "wb.hdf", bootpri = 6 }- to set boot priority and directory-mount volume names. [audio] audio_filter = "auto" | "on" | "off"(andCmd+A/Alt+A) forces Paula's low-pass filter regardless of the guest, with the power LED reflecting it as on the real machine (Lee Hobson).- Fullscreen and status-bar visibility persist in the config, manual resizes survive status-bar toggles, tool windows resize correctly, Wayland resizes apply synchronously (Bernie Innocenti), and cursor hits map correctly under fractional display scaling.
- The 68k core is now the published
m68kcrate: the vendored fork moved to crates.io as m68k 0.3, so Copperline builds against the published package, and the Flatpak moves to Freedesktop SDK 25.08 (both Ben Letchford). - The bundled AROS ROM is refreshed to upstream, picking up an NTSC boot fix and an input-event buffering fix - NTSC configurations now boot the bundled ROM without the previous warning.
- Functional boot smokes now run in CI on Linux, macOS and Windows - including against the released artifacts - A2065 networking is exercised in CI, and the Windows checks fan out from a shared build.
Contributed this cycle
Lee Hobson (@hobbo91) contributed real floppy drive support through FloppyBridge - the headline feature of the cycle - plus the faster bridge serving speeds and a round of bridge-mode fixes, the Paula audio-filter override with the power-LED rework, adjustable mouse sensitivity, persisted window state, the status-bar resize fixes, and a series of launcher improvements: the Storage tab, the Boot Priority sub-page, dimmed unavailable settings and cosmetic tidy-ups.
Bernie Innocenti (@codewiz) fixed the Z3660's planar-blit minterms and P2D NOTSRC lookup, made Wayland window resizes apply synchronously, improved the console's task-state reporting, and let the OS helpers follow exec structures into A3000 / A4000 motherboard RAM.
Simon Dick (@sidick) made host-directory volumes mount under Kickstart 1.3 and fixed MMIO doorbells for the 68000's split word writes.
Nicolas Ramz (@warpdesign) lit the HDD LED on host-folder filesystem access and redesigned the reset button glyph.
Ben Letchford
(@benletchford)
moved the 68k core to the published crates.io m68k crate
and updated the Flatpak to Freedesktop SDK 25.08.
Compatibility notes
Save states from 0.13.0 do not load in 0.14.0. The serialized machine shape changed several times this cycle, so the state format version moves from 40 to 44. Re-create snapshots after upgrading.
No config file changes are required: no TOML key or CLI flag was removed or renamed, the new keys are all additive, and no existing default changed. Two behavioural notes:
- The bundled AROS boot ROM was refreshed, so machines booting the bundled ROM behave slightly differently out of the box - NTSC configurations now boot without the previous warning.
- A machine with a bridged (real) floppy drive is paced to wall-clock time - a real mechanism cannot warp - so headless runs against a bridge are no longer unthrottled. Image-backed machines are unaffected.
Get it
Builds for macOS, Linux and Windows are on the release page, and the Homebrew tap is updated. Or skip the download entirely: copperline.dev/try is the same emulator.
Copperline also has a Patreon now. Nothing there buys a feature or a place in the queue - monthly support goes towards development time, real hardware to measure the emulator against, and the code-signing subscriptions that would let the downloads open without a warning.
- Andrew Hutchings (LinuxJedi) · linuxjedi.co.uk