Skip to content

Copperline 1.1.0

Latest

Choose a tag to compare

@LinuxJedi LinuxJedi released this 31 Oct 06:38
· 70 commits to v1 since this release

Copperline 1.1.0 is the first feature release of the 1.x series. Hard drives can now run at the speed of the period drives each Amiga shipped with. The MMU-less 68EC030, 68EC040 and 68EC060 are new CPU choices. The JIT is much faster on fast-RAM code and heavy disk I/O, and has a new "fastest" speed. A500 CIA, interrupt and bus timing are corrected against measurements of a real A500. It also includes every fix made on the 1.x branch since 1.0.1.

Before upgrading

  • Netplay peers must all run 1.1.0. Players and spectators need the same build.
  • Recreate RetroArch save states after updating the core. The core's states carry a build fingerprint that includes the release version.
  • Desktop save states from 1.0.x still load. The CIA chunks are migrated to their new layout. A resumed 1.0.x state continues under the corrected timing, so it can drift from what 1.0.x would have produced (a factory A500 state from 1.0.1 still renders byte-identical frames). States saved by 1.1.0 do not load in 1.0.x, which reports that the state comes from a newer Copperline.
  • Emulated timing has moved. The CIA, interrupt and bus corrections change when some events happen on every machine. Headless scripts and --expect-screenshot images tuned to an exact frame may need new timestamps or new captures.
  • A copperline.toml beside the executable now boots on its own. Startup checks --config, then ./copperline.toml, then a copperline.toml beside the executable (or beside Copperline.app, or beside the .AppImage), then the saved default. If you keep a file with that name there, it now takes over from the saved default. --factory skips it.
  • Relative media paths are also looked for in the [paths] media folders. The working directory is still tried first, so every path that worked before finds the same file.
  • The bundled AROS ROM leaves 1,776 bytes less free memory when a program starts.
  • Going back to 1.0.x: 1.0.x refuses configuration files that use the new keys and values: [cpu] speed, the 68EC030, 68EC040 and 68EC060 models, the drive timing and spin_up keys, and [[drive_profile]] tables.

Period hard-drive timing

Until now every hard-disk transfer finished within the access that started it. timing = "period" on [ide], [scsi] or [lide] (or --hd-timing period) models the drive each machine shipped with instead, so a hard-disk Amiga loads, boots and benchmarks at that drive's speed:

Machine Drive
A600 Conner CP2024
A1200 Conner CP2064
A4000 Seagate ST3144A
A3000, and an A2091 in a big-box machine Quantum LPS 52S
A590 Seagate ST125N
A4091 Seagate Hawk 1LP
lide boards WD AC2120

The model covers command overhead, a seek curve fitted to each datasheet's track-to-track, average and full-stroke times, rotational latency from the platter's position, zoned media rates with track and cylinder skew, read-ahead, write caching, spin-up, standby and head parking. The 22 built-in profiles come from the manufacturers' manuals; --list-drive-profiles prints them, timing also takes a profile id, and [[drive_profile]] tables add your own, optionally based on a built-in one. spin_up = true also models the power-on spin-up. Each controller reports "not ready" the way its hardware does: IDE through BSY and DRQ, the WD33C93 (A2091, A590, A3000) through REQ, and the A4091's 53C710 by stalling its SCRIPTS processor. The launcher's Emulation page has Hard drive timing and Drive spin-up rows. The default stays instant, which behaves exactly as before. See drive timing.

68EC030, 68EC040 and 68EC060

The three MMU-less "EC" parts are selectable as [cpu] model / --cpu and in the launcher. They keep their family's caches, stock clock and 32-bit bus, and each answers the MMU instructions as its silicon does: the 68EC030's access control unit (AC0, AC1, ACUSR and PTEST matches), the 68EC040's access control registers, and the 68EC060's no-op MMU instructions. The 68EC040 and 68EC060 have no FPU, so fpu = true is refused for them; the 68EC030 can still take a 68881/68882.

copperline-import-uae now imports these parts and the 68EC020, and three older bugs in its CPU mapping are fixed: WinUAE and Amiberry 68030 and 68060 configurations no longer import as a 68020 or 68040, FS-UAE configurations import their CPU at all, and FS-UAE's A1200 preset imports as the 68EC020 it is.

JIT speed

  • A "fastest" CPU speed. [cpu] speed = "fastest" (--cpu-speed fastest) with the JIT lets the CPU clock rise while the host has time to spare, keeping the chipset and emulated time in step with real time, like WinUAE's "Fastest possible". It never drops below clock_mhz. It trades determinism for speed, so runs with it are not reproducible; the default, fixed, is unchanged.
  • Fast RAM and ROM code runs much faster. The JIT's direct memory window now works with the 68020-68060 cache models on, follows the bank the code is running from, and covers every RAM and ROM region rather than one bank. Code in fast RAM and ROM runs in batches up to the next hardware event. On an Intel MacBook Pro in fastest mode, the batching change alone took benchwork-040 on an A4000/040 from 1.95x to 2.43x the speed of a real 25 MHz 68040.
  • Heavy hard-disk I/O no longer slows the machine down. copperhf.device and the SCSI disk commands move each request's sectors in one host read or write, and copy the buffer into guest memory in one go. 40 emulated seconds of 512 KB reads under Kickstart 3.2 took 154 seconds before and 20 after; under the JIT, AROS writes went from 502 seconds to 42.
  • Cache control instructions (MOVEC to CACR, CINV, CPUSH) now take effect before the next instruction fetch under the JIT, not at the end of the batch, so code rewritten in place and then cleared from the cache no longer runs stale instructions.

#796 has the details. Thanks to @dlundqvist for the report and for testing the changes as they landed.

A500 timing

@HakatomOy measured a PAL A500 with test ROMs on OneROM and a logic analyzer, and corrected Copperline against the results:

  • CIA timer start, reload and readback, the serial port, the timer outputs on port B, and interrupt latching, which now holds until the ICR is read.
  • How the CPU samples interrupts, and its clock while stopped in STOP.
  • When a CPU write to chip RAM lands relative to the DMA that follows it in the same bus cycle.
  • Playfield collision masks and visibility.

Each change comes with the measurements and new test programs (timing-test/a500-*.asm, cia-movem-irq) that check it on every build.

Configuration and launcher

  • A copperline.toml beside the executable boots straight into its machine, skipping the launcher, much like WinUAE's default.uae. An installation can carry its own default machine. See configuration.
  • A relative ROM, disk or CD path that is not in the working directory is looked for in the matching [paths] folder: roms, floppies, harddrives or cds. rom = "KICK31.ROM" finds roms/KICK31.ROM.
  • The launcher's Save dialog has a Save button that writes back to the file you last loaded or saved, alongside Save As, Save default and Reset default. Save As and Load open in that file's folder.
  • File dialogs remember the folder they were last used in for each kind of file (configurations, floppies, hard drives, CDs, ROMs, save states, WHDLoad games and so on), for the session.

RTG display

  • RTG screens now scale to whole multiples of the host display under integer scaling. A 640x480 board screen reached only 1x on a 1920x1080 display, and now reaches 2x (#828).
  • Menus and panels open over RTG screens without dropping the board to a lower-resolution picture, and the performance overlay, on-screen messages and REC badge appear over RTG screens, at the picture's corners (#816).

Input

  • The captured mouse moves the pointer the same distance at any window size and display scale. Before, enlarging the picture made the pointer move further for the same hand movement (#830).
  • On X11 and Windows, switching to the window with a keyboard shortcut could leave the Amiga holding a key and repeating it. The key presses the system replays when a window gains the focus are now ignored (#817).

Windows installers

Windows downloads now include per-user installers for x64 and ARM64, alongside the portable ZIPs. The installer adds a Start menu shortcut and an optional desktop shortcut, updates an existing installation in place, and its uninstaller keeps your configurations, saves and media. Like the ZIPs, it is not code-signed.

Headless runs and debugging

  • --eject-disk-after SECS DFN ejects a floppy on schedule and leaves the drive empty, through the same path as the status-bar eject button. It works in --script files, and --record-input now records ejects made from the status bar or the control protocol. Thanks to @warpdesign.
  • The control protocol's new disk.fault.* methods inject deterministic faults into image-backed drives: dropped, torn or reordered writes, ignored flushes, stale or corrupt reads, media errors, delays and simulated power cuts. They cover copperhf, PCMCIA, IDE, SCSI, plain ADF floppies and (for reads) CDs, and the policies survive save states. See disk fault injection. Thanks to @sidick.

Fixes

  • Skeleton Krew on the CD32 jumped its scenery one 64-pixel step left, with black or wrapped columns at the right, while scrolling. On ECS and AGA a DDFSTRT below $18 only arms the fetch, which starts at $18; the wide-fetch scroll took its phase from the register instead (#836). Thanks to @warpdesign for the report.
  • HOSTFS volumes with the default boot priority and the HOSTCLIP clipboard device were offered as boot devices on Kickstart 3.x, so an A3000 with no disk booted to a shell instead of the insert-disk screen (#834). Thanks to @dlundqvist.
  • Old-format Nero (.nrg) CD images failed to mount or read the wrong lead-out, because their cue addresses are BCD-coded. UFO: Enemy Unknown on the CD32 now boots from one.
  • The A2065's LANCE sees the board's RAM only with address line 15 set, and the CSR3 byte-swap bit is applied to frame data, as on a real A3000 with an Ameristar A2065. Thanks to @tinic.
  • The m68k CPU core moves to 0.15.0. Its fixes include the 68030 MMU's address translation cache, MC68000 DIVU/DIVS timing and overflow, and extended-precision and FMOVE rounding.

AROS ROM

The bundled AROS ROM is rebuilt from upstream master 1fef6c415e. WaitTOF() works after a program takes over the hardware, OwnBlitter() and DisownBlitter() preserve their registers as Kickstart 3.1 does, more blits go through the blitter, CD32 cd.device keeps its read-ahead and takes word arguments for CD_PAUSE and CD_PLAYTRACK, PowerPacker and Imploder self-decrunching programs run from the Shell, and AROS no longer prints a boot trace to the serial port. See assets/aros/README.md for the full list.

Other changes

  • Security updates: wasmtime 36.0.20 (RUSTSEC-2026-0379, -0380 and -0424), rustls-webpki 0.103.16 (RUSTSEC-2026-0382 and others), ctutils 0.4.5 (RUSTSEC-2026-0385), and the build-time zstd crates (RUSTSEC-2026-0391, -0398, -0403 and -0410). chd moves from the patched fork to its 0.3.5 release, then to 0.4.0.
  • The PDF manual includes the new disk fault injection chapter.
  • Dependency updates: m68k 0.15.0, arboard, iroh, cc and others.

Thanks to the patrons whose support pays for the hardware used to check the emulation; to @HakatomOy, @sidick, @warpdesign and @tinic for code; to @dlundqvist and @warpdesign for reports and testing on GitHub; and to everyone who reported problems on Discord.

Downloads

  • macOS: universal DMG for Apple Silicon and Intel, macOS 14.2 or newer. It is ad-hoc signed, not notarized; see the included first-launch instructions.
  • Windows: installers and portable ZIPs for x64 and ARM64.
  • Linux: x86-64 AppImage, command-line tools archive and a separate bridged-network helper archive.
  • RetroArch: core ZIPs for Linux x86-64, macOS Apple Silicon and Windows x86-64. Install them manually using the libretro guide.
  • Manual and checksums: the PDF manual and Copperline-1.1.0-SHA256SUMS.txt are attached below.
  • Browser: try Copperline without installing it.

Homebrew users can run brew update followed by brew upgrade copperline. For a new installation:

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

Homebrew 7 and later load formulae only from taps you have trusted; on an older Homebrew, leave out the brew trust line.

Source builds require Rust 1.95 or newer: cargo build --release --locked.
The open AROS boot ROM is included; supply your own commercial game media and any required Kickstart ROMs.

Full changelog: v1.0.1...v1.1.0