< all news

Copperline 0.14.0: real drives, real networks, and a 1084 on your desk

In this release the emulator reaches outside the host machine. It drives real 3.5" floppy drives through DrawBridge, Greaseweazle and SupercardPro controllers, and it can put the guest's Ethernet card on the real LAN. RTG reaches the 24-bit machines through the Zorro II Picasso II and Picasso II+, so an A2000-class machine gets high-colour Workbench too.

The window gains CRT shaders, screen tints and a 1084-style front bezel, along with rewind, quick-save slots, autofire and input remapping. Underneath, an experimental JIT CPU mode runs at accelerator-class speeds, and a WinUAE-inspired debugging suite lands. As always, 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 cargo builds into Copperline, so there is 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, and drive mechanics stay real-time. 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.

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. As Zorro II cards they work with 24-bit CPUs, so RTG Workbench is no longer limited to the big boxes: a stock-CPU machine with Zorro slots gets high-colour screens too. [rtg] card = "picasso2plus" selects one and vram = "1M" or "2M" sizes it. 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 sits on the LAN like any other machine: DHCP from your router, static addressing, local servers. This works 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.

CRT shaders, tints and a bezel

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. Its power LED follows the guest's /LED line and burns brighter while the audio filter is engaged, and an 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. On a 512 KiB A500 that is minutes of history. Ten numbered quick-save slots sit alongside: Cmd/Alt plus a digit saves and Cmd/Alt+Shift plus a digit loads, with no dialog and no file to name.

Input

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. A mouse-capture policy chooses between click-to-grab, grab-on-focus and manual-only (Cmd+G / Alt+G), and the rework fixes three capture defects.

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, so a 50 MHz 68040 runs on the order of 50 MIPS. The launcher's clock presets now reach 100 and 200 MHz. The on-chip cache models stay active, and chip and slow RAM keep their shared-bus arbitration, as on a real accelerator. Cycle-counted chip-level effects no longer line up, which is why the JIT is off by default.

A debugging suite

The headless debugger and the debugger GUI gain a WinUAE-inspired set of tools. A custom-register access validator ([debug] validate_chipset), backed by a last-writer table, reports chipset misuse with the PC that caused it. There are also a self-modifying-code detector (detect_smc), bus-error injection, per-DMA-channel and PC-qualified watchpoints, and blitter, floppy and keyboard hardware-misuse checks. A memory heat map tab in the Frame Analyzer shows where the frame's traffic lands, and 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. 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. It 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 optimization pass over the render and chipset hot paths cuts host CPU cost. It covers DDF arbitration, planar row conversion, caching of stable display and DMA line work, and idle / repeated-frame presentation. 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. This fixes stale colours in HAM demos that switch mid-screen.
  • CPU- and Copper-written BPLxDAT batches snap to the serializer's word-load grid, fixing displays that hand-feed the serializer (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, so the picture no longer jumps for one frame 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, and hard disks gain a Boot Priority sub-page. Unavailable settings dim in place instead of vanishing, and the tabs get a round of cosmetic tidy-ups. In the config, a hard drive can be a table, such as 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, and 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, and Copperline builds against the published package. 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 artefacts. 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, along with the faster bridge serving speeds and a round of bridge-mode fixes. Lee also contributed 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, since 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: 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