Copperline 1.1.0
v1.1.0
release
Release notes · 13 files
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-screenshotimages tuned to an exact frame may need new timestamps or new captures. - A
copperline.tomlbeside the executable now boots on its own. Startup checks--config, then./copperline.toml, then acopperline.tomlbeside the executable (or besideCopperline.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.--factoryskips 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, the68EC030,68EC040and68EC060models, the drivetimingandspin_upkeys, 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 belowclock_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.deviceand 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.tomlbeside the executable boots straight into its machine, skipping the launcher, much like WinUAE'sdefault.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,harddrivesorcds.rom = "KICK31.ROM"findsroms/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
RECbadge 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 DFNejects a floppy on schedule and leaves the drive empty, through the same path as the status-bar eject button. It works in--scriptfiles, and--record-inputnow 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
$18only 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
m68kCPU 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:
wasmtime36.0.20 (RUSTSEC-2026-0379, -0380 and -0424),rustls-webpki0.103.16 (RUSTSEC-2026-0382 and others),ctutils0.4.5 (RUSTSEC-2026-0385), and the build-timezstdcrates (RUSTSEC-2026-0391, -0398, -0403 and -0410).chdmoves 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:
m68k0.15.0,arboard,iroh,ccand 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.txtare 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.
- Copperline-1.1.0-libretro-Linux-X64.zip 7.4 MB
- Copperline-1.1.0-libretro-macOS-ARM64.zip 5.9 MB
- Copperline-1.1.0-libretro-Windows-X64.zip 6.0 MB
- Copperline-1.1.0-macos-universal.dmg 185.8 MB
- Copperline-1.1.0-manual.pdf 10.6 MB
- Copperline-1.1.0-SHA256SUMS.txt 1.2 KB
- Copperline-1.1.0-win-arm64-setup.exe 79.7 MB
- Copperline-1.1.0-win-arm64.zip 89.5 MB
- Copperline-1.1.0-win-x64-setup.exe 83.4 MB
- Copperline-1.1.0-win-x64.zip 94.2 MB
- Copperline-1.1.0-x86_64-net-helper.tar.gz 227.3 KB
- Copperline-1.1.0-x86_64-tools.tar.gz 39.2 MB
- Copperline-1.1.0-x86_64.AppImage 53.4 MB