< all news

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" (and Cmd+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 m68k crate: 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