Skip to content

Copperline 0.15.0

Latest

Choose a tag to compare

@LinuxJedi LinuxJedi released this 08 Aug 05:15
· 38 commits to main since this release

Copperline 0.15.0 is the release where the machine's peripherals arrive. A Roland MT-32 now answers on the MIDI port -- the whole module, front panel and all -- so the game soundtracks written for it finally play the way their composers heard them. The machine can be handed one of the host's real hard disks -- a CF card in a reader, a USB drive, a drive on a SATA port -- and reads the medium as its own, RDB, partitions and all. A new HostSocket board gives guest applications BSD sockets with no TCP/IP stack to install in the guest at all. And the physical floppy path is rebuilt on FluxBridge, CopperlineHQ's own pure-Rust library, so real drives no longer need a vendored C++ library behind them. Around the machine, the pop-up menu is redesigned as a proper tree, the display gains integer scaling, a performance overlay and a choice of monitor bezels including an authentic 1084, and the browser build grows a screen keyboard and serious performance work for phones and weak hosts. As always it is a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Compatibility notes

Save states from 0.14.0 do not load in 0.15.0. The serialized machine shape changed several times this cycle, so the state format version moves from 44 to 50. Re-create snapshots after upgrading.

Physical floppy configs may need a small edit. The move from the vendored FloppyBridge library to FluxBridge changes the bridge surface:

  • This build drives Greaseweazle controllers. A config asking for bridge = "drawbridge" or "supercardpro" is refused at parse time with an error naming what is available (FluxBridge carries those protocols for the future, but Copperline compiles in the drivers it supports and the launcher offers exactly those).
  • bridge_speed (a percentage) is replaced by replay_speed = "normal" | "fast". The old key is still accepted at 100 or 200 -- the only two values that ever meant something distinct, since a track's first read always streams at the platter's own pace -- and refused otherwise.
  • bridge_auto_cache is gone, and a config carrying it is refused. The bridge now serves a captured track while the platter is still turning it, which is what the cache was for.

One key changed shape, compatibly: [display] bezel is now a named choice -- "off", "1084" or "classic" -- because there is more than one frame to choose. The old boolean form is still accepted, and true means the 1084.

One default changed: an A4091 SCSI board with no ROM path now boots the bundled open-source A4091 ROM (v42.39) instead of requiring you to supply an EPROM image. Machines that set an explicit ROM path are unaffected.

The hosted copperline.dev/try page now fronts the picture with the 1084 monitor by default -- a display change only; the machine underneath is unchanged.

Highlights

  • A Roland MT-32. [midi] midi_out = "mt32" routes the machine's MIDI port to an emulated MT-32 built into Copperline -- the synthesiser engine is mt32-rs, grown from Munt -- mixed beside Paula's output. It is the whole unit, not just the sound: a front panel under the display with the module's own buttons, the service screens when started holding them, ROM Play for the demo songs the control ROM carries, and a choice of display styles. midi_in = "mt32" wires the module's MIDI OUT back to the machine, which is what a patch editor or librarian needs. The control and PCM ROM images are yours to supply, like a Kickstart. Contributed by Lee Hobson.
  • Real hard disks. [[host_disk]] (and the launcher's new page) hands the machine one of the host's real disks on Linux, macOS and Windows -- the Amiga sees the medium exactly as it is: its own Rigid Disk Block, its own partitions, its own filesystem. Nothing is copied and no RDB is invented over a disk that has none. The safety model is strict: the disk the host is running from is never offered and never opened; the first open asks the host's permission (polkit, authopen, Administrator); the host's volumes on the disk are unmounted while the machine holds it; attaches are read-only unless writes are explicitly allowed; and a launcher-written fingerprint follows a disk to a changed device name only when the match is unambiguous. Attach points cover IDE master/slave and SCSI IDs 0-6; --list-disks shows what the host has. Contributed by Lee Hobson.
  • HostSocket networking. A new board gives guest applications a bsdsocket.library backed by a host-side TCP/IP stack -- the library autoboots from the board's ROM, so there is nothing to install or boot in the guest. It takes the same backends as the A2065 (nat, bridge, loopback, none) plus an Amiberry-style "host" backend that hands each socket operation straight to a real host OS socket: zero configuration, no interface address, no privileges, and the guest's sockets go out on the host's own network identity. gethostbyname() resolves through the host OS resolver by default. Contributed by Simon Dick.
  • FluxBridge. Physical floppy drives are now driven by FluxBridge, CopperlineHQ's own pure-Rust library, grown from a port of Rob Smith's FloppyDriveBridge -- nothing vendored, no C++ toolchain, Cargo.lock pins the exact revision. Reads stream each track as the platter turns it, a written track is not read back until the platter actually has it, and captured revolutions replay at real or double speed (replay_speed). Contributed by Lee Hobson.
  • Native IPF and CHD. IPF disk images are read by a direct CAPS decoder built into Copperline -- no external library -- and mount in any drive bay, always write-protected. CD-ROM drives (CD32, CDTV and the SCSI CD-ROM alike) now also take chdman v5 .chd images alongside BIN/CUE and ISO.
  • A redesigned menu. The pop-up menu is now a proper tree: walk it with keys or pointer through one cursor, categories open on hover, each level opens beside the row that opened it, ticks show what is on, and the trailing dots are reserved for rows that open something. It says the same words the launcher does, and menu_scale = "2x" draws it double size. Contributed by Lee Hobson.
  • The 1084 face. [display] bezel chooses a monitor front: the 1084 -- the monitor the Amiga shipped with, its moulding following the face at every strength -- or the plainer classic frame. The CRT shader preset's face geometry now matches the 1084 tube datasheet, the picture meets the bezel's moulded insert, and overscan fills the glass like a real raster. The 1084 bezel style and the choice of frames were contributed by Lee Hobson.
  • The browser build on phones. The copperline.dev/try page draws an on-screen A600 keyboard for phones and tablets (or summons the device's own keyboard beside it), presents on the 1084 monitor, and survives iOS killing the page's audio session by rebuilding the audio stack in place. Under the hood a weak-host performance pass -- render stride, identical-frame reuse, simd128 with a wasm-opt pass, fat LTO, and the removal of redundant render and presentation work -- buys real headroom on modest hardware, audio steps from its own clock when the browser starves animation frames, and under sustained load the picture degrades before the machine does.
  • Integer scaling and a performance overlay. [display] scaling = "integer" fits the largest whole-number multiple of the canvas, centred and point-sampled, in the spirit of WinUAE/Amiberry -- pair with pixel_aspect = "square" for a fully pixel-exact picture. perf_overlay (or Cmd/Alt+P) shows emulated fps, speed factor, per-frame cost, host utilisation, audio health and pacer slips in the corner of the display; captures never include it.
  • Booting from a host folder under Kickstart 1.3. 0.14.0 mounted host-directory volumes under Kickstart 1.3; 0.15.0 boots AmigaDOS from them, shaping the boot node the way 1.3-proven autoboot drivers do. A plain 1.3 machine now boots straight into a Workbench that lives in a folder on the host. Contributed by Simon Dick.

Hardware accuracy fixes

  • AGA lo-res fetch. Bitplanes 7 and 8 are fetched by the AGA lo-res fetch unit, so 8-bitplane lo-res displays get their full palette depth (the Pinball Fantasies CD32 table colours), and CPU palette pre-pass writes resolve against the live BPLCON3.
  • Wide-FMODE scroll. Scroll taps fold at the absolute-grid arrival phase in wide fetch modes, fixing the fold boundary (the Roots II AGA folder).
  • HAM at the left edge. The HAM hold colour is carried across the DIW left edge, so a HAM display that opens early no longer shows a wrong-colour fringe (Lemmings 2's green edge).
  • 68020+ chip access. The 020 and the chip bus now share one clock timeline, with posted chip writes and a read-return sync clock, calibrated against timing measured on a real A1200 -- and the earlier result-forwarding model is retracted on the same evidence. timing-test/ gains the real-A1200 ground-truth column, a chip-bus access-phase probe and bfprobe, a 68020 bit-field cost probe.
  • 68020 bit fields. A memory bit field transfers at the width it spans, and the three-byte operand is sized by the port that answers it.
  • Floppy writes. A track just written to a bridged real drive is not read back until the platter actually has it.
  • Serial. An undrained host pty no longer blocks the emulator (Bernie Innocenti).
  • Z3660 RTG. A rect copy honours its minterm (Bernie Innocenti).

Desktop, tooling and platform

  • A4091 boot ROM bundled. The A4091 defaults to the open-source v42.39 autoboot ROM, bundled with its full third-party notices -- an A4091 machine now boots SCSI out of the box (Bernie Innocenti).
  • Window robustness. The surface re-syncs to the host window before every draw (no more stale pictures after fullscreen transitions), the canvas follows a resize the platform adjusted, and the offscreen GPU tests serialize on one shared device helper, fixing a Windows access violation.
  • Dependencies. The 68k core moves to the published m68k 0.7 crate, and a pre-release hardening pass updates the dependency tree.
  • Bundled AROS ROM refreshed to upstream master.
  • CI. The web pipeline pins modern binaryen and smoke-loads the published bundle before it goes out; MIDI tests are isolated from the host's real devices.

External contributions

This cycle, for the first time, most of the new code came from outside the project -- external contributors wrote more lines than the maintainer did:

  • Lee Hobson (@hobbo91) contributed four of the cycle's headline features: the MT-32 module with its front panel (and the mt32-rs engine port that powers it), real host hard disks on all three desktop platforms, the FluxBridge rewrite that takes the physical-floppy path pure-Rust, and the menu redesign -- plus the 1084 bezel style and the frame choice.
  • Simon Dick (@sidick) contributed the HostSocket board and its Amiberry-style host backend (including real MSG_OOB handling), wired diag_vec through for WASM plugin boards so they can autoboot, and made hostfs volumes bootable under Kickstart 1.3.
  • Bernie Innocenti (@codewiz) bundled the open-source A4091 boot ROM as the default, fixed the Z3660's rect-copy minterm, and stopped an undrained pty from blocking the emulator.

Installation

Browser (no install): copperline.dev/try

macOS (Homebrew):

brew tap copperlinehq/copperline https://github.com/CopperlineHQ/Copperline
brew install copperline

macOS (DMG): download Copperline-0.15.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.15.0-x86_64.AppImage below, then:

chmod +x Copperline-0.15.0-*.AppImage
./Copperline-0.15.0-*.AppImage

Windows: download and extract the portable Copperline-0.15.0-win-x64.zip below.

From source:

cargo build --release
./target/release/copperline

The 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. The MT-32's control and PCM ROMs are likewise yours to supply.

Full changelog: v0.14.0...v0.15.0