Copperline 1.0.0 is the first stable release. It follows two weeks of testing of 1.0.0-rc.1 and is the 23rd release since the source went public on 14 June.
This release adds Smart framing and native 1:1 screenshots, more control over where and how the window opens, VHD hard-disk images, a fix for AGA sprites that use scan-doubling, and a Check for updates button that only contacts GitHub when you press it.
Copperline 1.0 at a glance
- Machines: A1000, A500, A500+, A600, A1200, A3000, A4000, CDTV and CD32, with OCS, ECS and AGA chipsets and 68000 to 68060 CPUs, FPUs and MMUs.
- Accuracy: the CPU and custom chips run on one colour-clock timeline, with the chip bus shared out cycle by cycle. Timing is checked against a real A1200, A4000 and CD32, and 45 test programs are compared pixel for pixel on every change.
- Ready to run: the open AROS ROM is bundled, as are ROMs for the A2091, A4091 and IDE boards, the CD32 FMV module and the HRTMon freezer. WHDLoad packages and Amiga programs boot directly.
- Media and expansion: floppy images including IPF and SCP, real drives through a Greaseweazle, IDE and SCSI hard disks, CDs, host folders, RTG graphics cards, Ethernet,
bsdsocket.librarywithout a TCP/IP stack, and built-in MT-32 (with your own ROMs) and General MIDI synthesizers. - Playing: save states, rewind, run-ahead, CRT shaders and a 1084 monitor front, gamepads, and rollback netplay for up to four players with up to eight spectators.
- Developing: a debugger beside the live display with reverse stepping, a frame analyzer, GDB, VS Code source debugging, profiling, a control protocol and an MCP server.
- Everywhere: macOS, Windows and Linux builds, a browser version and a RetroArch core.
The manual covers all of it.
Before upgrading
- macOS 14.2 or newer is required, and the app now says so. Copperline has needed macOS 14.2 since 0.16.0 because of the Core Audio functions it uses, but the app declared 11.0, so older systems launched it and it crashed. macOS now refuses to open it with the standard "requires a newer version of macOS" message. Homebrew requires Sonoma.
- Netplay peers must all run 1.0.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
.clstatefiles from 0.20.0, 0.21.0 and 1.0.0-rc.1 still load. - Volume is no longer saved in save states. Loading a state, rewinding, run-ahead and netplay rollback now keep your current volume, mono and stereo settings and audio filter choice.
- The window title has changed. By default it now shows the version, machine and boot ROM, and no longer includes the git commit. Window-manager rules that match the old title need updating;
[display] titlesets your own. - Guest writes to
$BFFF00-$BFFF07now print debug output (see below). This follows[emulation] uaelib, which is on by default; set it tofalseto turn off both the uaelib trap and the debug ports.
Upgrading from 0.21.0 or earlier? Also read the 1.0.0-rc.1 notes. The netplay protocol changed, high-density floppy images are refused, some command-line combinations are now errors, and --run PROG --exit-on-return on its own runs without a window.
Smart framing
The TV overscan setting crops the picture to roughly what a television showed, but software that placed its picture a little off-centre lost part of it at the edges. The CD32 boot logo is one example. The new Smart framing keeps the TV crop and moves it sideways to follow the display window the program sets up. It moves by at most eight lo-res pixels, only after the position has held for 25 frames, and stays put through blank frames, so the picture does not wander. Manual centring still works on top of it.
Combined with autocrop and integer scaling, Smart fits the whole detected display at the largest whole-pixel scale, using the full captured raster rather than the TV crop. Odd multiples are now possible: with the status bar hidden, a 320x200 PAL picture fits at 5x on a 1920x1080 screen.
[display]
overscan = "smart"
autocrop = true
scaling = "integer"Video Settings -> Framing switches between TV, Smart and Full overscan while a program runs, and the launcher's Overscan row offers the same choices. The browser version has Smart framing too. TV remains the default. See display settings.
Native 1:1 screenshots
Recording -> Save Native Screenshot (1:1) saves the Amiga's own pixels, cropped to the display window, before any scaling, aspect correction, shaders, deinterlacing or tint. A lo-res 320x256 screen saves as 320x256, and a hires screen at 640x256. Mixed-resolution frames keep the finest detail present, and RTG screens save at the board's resolution.
- Camera button: Video Settings -> Native Screenshot Button (
[recording] native_screenshot_button) makes the status-bar camera and Cmd+S / Alt+S save native screenshots. - Headless:
--native-screenshotsapplies to--screenshot-afterand--expect-screenshot. - Control protocol:
capture.screenshot {"native": true}, also available as the MCP tool'snativeoption.
Window size, position and monitor
--window-scale([display] window_scale) opens the window at 0.5 to 4 times its normal size.--maximized([display] maximized) opens a normal window maximized. The last of--maximized,--full-screenand--windowedwins.--monitor([display] monitor) picks the display the window opens on and goes fullscreen on, by number or name.--list-monitorsprints the choices. The launcher has a Host monitor row.--window-position X Y([display] position) places the window relative to that monitor. The launcher has a Window position field.
On Wayland the compositor decides where windows go, so only the fullscreen monitor can be chosen there. See the configuration guide.
The window title now shows the machine and the boot ROM, identified by name for known Kickstarts. [display] title takes a template with {app}, {version}, {machine}, {rom} and {hash} placeholders. On macOS, About Copperline in the application menu opens Copperline's own About panel.
VHD hard disks
Fixed and dynamic VHD images, the format WinUAE and Virtual PC create, now attach read/write on every hard-disk controller: IDE, SCSI, lide, copperhf, PCMCIA and SF2000. Before, a .vhd was opened as a raw image, so a fixed VHD showed its footer to the Amiga as an extra sector and a dynamic one read as garbage. Writes to a dynamic VHD allocate blocks the way qemu and WinUAE do.
Images are recognised by their contents rather than their name. Differencing VHDs are refused with instructions for merging them into their parent, and VHDX is not supported. Thanks to @boingball for the report.
Bundled A2091 ROM 42.41
The bundled open A2091/A590 ROM uses Fast RAM that the controller can reach for its bounce buffers, falling back to Chip RAM, and overlaps the next read with copying the previous one. Bounce buffers are needed when the destination is odd-aligned or above 16 MB, such as accelerator or Zorro III memory. Before, they always came from Chip RAM. A transfer that runs past the block-number limit of the shorter SCSI commands now uses a longer command instead of wrapping around to the start of the disk. Thanks to @luvwagn for the report.
AGA sprite scan-doubling
With SSCAN2 set in FMODE, Lisa ignores the top bit of a sprite's horizontal start, so its comparator matches twice on each line, 256 lo-res pixels apart. A sprite appears at each match that comes after its DMA data has arrived: at the second match only if the data was late for the first, or at both. Copperline showed every such sprite once, at the first match, whether or not its data had arrived. It now models both matches, using the FMODE value and sprite state at each beam position, and collision detection sees the same positions. This fixes the corrupted first-stage background in Castlevania AGA on the CD32. Thanks to @warpdesign for the report.
For developers
- WinUAE debug ports. Guest code can print formatted messages by writing arguments to
$BFFF00and a format-string pointer to$BFFF04, as under WinUAE. Messages appear in the terminal, the debugger console and the control protocol'sevent.debugstream. Emulated timing does not change. See memory-mapped debug output. - Debugger console. The console keeps the last 500 guest debug lines from before it was opened, and shows new lines straight away while the machine is paused.
- Profiling. The buffer of pending instruction samples is capped at 262,144 entries. Dropped samples are reported, and a Bartman profile export refuses to write an incomplete capture.
- WASM board plugins can write back to their own file resources through a new
resource_writeimport, enabled in the board manifest. Thanks to @sidick.
Check for updates
The About panel has a Check for updates button. Pressing it sends one request to GitHub's latest-release API with a Copperline/<version> user agent, and offers to open the release page if a newer version is out. Nothing is checked at startup or in the background, and nothing is stored. The privacy policy describes it.
Bundled AROS ROM refresh
The bundled AROS ROM is rebuilt from upstream master 949d6834f8 with no local patches. A program started with --run on a 1 MB A500 or a 2 MB A1200 has about 35 KB more free memory than with rc.1. Other upstream changes that reach the ROM include:
cia.resourcenow lays out its base like Kickstart, so programs that patch CIA interrupt vectors in place work.- Exec honours
SetFunction()patches of its scheduler entry points. - CD32 pad reading and
cd.deviceaudio playback are fixed. - Graphics, Intuition, DOS, file system and console fixes.
Other changes
- Click the speaker icon in the status bar to mute and unmute. Thanks to @warpdesign.
[input] middle_click_release, also on the launcher's Input page, lets the middle mouse button release a captured mouse. It is off by default, so middle clicks still reach the Amiga.- The launcher explains greyed-out IDE and CD rows more clearly. Thanks to @sidick.
- Create Image no longer offers
.chdfor new hard disks, which it writes as raw HDF images. - Standalone game bundles made with
tools/publishnow remember their Framing and Autocrop choices between launches, and declare macOS 14.2 as their minimum. - wasmtime 36.0.16 fixes RUSTSEC-2026-0316. This affects only WebAssembly plugin boards on the desktop.
- The
m68kCPU core is updated to 0.14.3, with an interpreter fix and faster JIT code. - Dependency updates: iroh 1.3.0, wat, cc, syn and zerocopy.
Thanks to the patrons whose support pays for the hardware used to check the emulation, to @mmoroca, @boingball, @luvwagn and @warpdesign for this cycle's reports, to @sidick and @warpdesign for code, and to everyone who has tested, reported problems and contributed on the way to 1.0 (listed in CREDITS.md).
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: 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.0.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 install copperlineSource 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.