Copperline 0.16.0 is the release where the machine meets the people who make and play its software. A WHDLoad-installed game now boots straight from its archive -- copperline --whdload Turrican.lha and nothing else -- and the launcher grows a proper game library around that, with details and cover art fetched from OpenRetro. On the other side of the same coin, --run warp-boots a freshly built Amiga executable from the host filesystem for people writing new Amiga software, and several of this cycle's accuracy fixes came out of exactly that use: Brazen Gameplay are developing Urb-X Warriors, a new commercial Amiga game, with Copperline on the desk beside real AGA hardware, and their field reports drove fixes from Agnus pointer semantics to floating-bus reads. Storage grows a built-in lide.device-compatible IDE board with ATAPI CD-ROM support, OFS directory mounts that boot Kickstart 1.3, a Create Image workshop for fresh ADFs and HDFs, and gzip-compressed hardfiles. Around the machine: configurable output paths with an opt-in portable mode, Kickstart ROM identification by checksum, an on-screen keyboard and picture centring on the desktop, bezel sticker decals, and IPF images in the browser build. 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.15.0 do not load in 0.16.0. The serialized machine shape changed several times this cycle, so the state format version moves from 50 to 54. Re-create snapshots after upgrading.
Output files move out of the working directory. Everything Copperline produces -- screenshots, save states, video and input recordings, NVRAM, traces, waveform captures -- now lands in named folders under the host-data directory instead of the process working directory, and a new optional [paths] section moves any of them (plus where empty file dialogs open). Explicit CLI paths (--screenshot-after and friends) are still used exactly as written, and legacy battmem.nvram / cd32-nvram.bin files in the working directory keep being used from there -- real game saves are never silently relocated.
A saved default configuration now auto-loads. The launcher's Save button offers Save As / Save default / Reset default; a saved default is what Copperline starts with when neither --config nor ./copperline.toml names one. For reproducible runs on a machine you do not control, pass --factory to ignore it.
Highlights
- Direct WHDLoad boot.
--whdload game.lhaboots a WHDLoad-installed game package directly -- no Workbench disk, no hand-built hard drive. The package is extracted once into a per-game library so savegames persist on the host, a boot volume is regenerated around the real WHDLoad program each launch, and the machine is derived from the slave header (the canonical A1200 with 8 MB fast RAM unless your config says otherwise). Kickstart images are identified by content using the same CRC WHDLoad itself uses -- byte-swapped dumps, doubled images and Cloanto-encrypted ROMs are all recognised -- and a slave demanding a missing image fails naming the exact file it wants. The WHDLoad and skick support archives are fetched with pinned checksums at packaging time (tools/fetch-whdload.sh); Kickstart ROMs remain yours to supply. - A game library. The launcher's WHDLoad page grows into a browsable collection: point it at a folder of games as
.lha,.zipor plain directories, and it lists them with details and cover art from OpenRetro, A-Z shortcuts to jump the list, and drag-and-drop of a package onto a running machine to reboot into it. Contributed by Lee Hobson. --run: a developer warp launch.copperline --run build/hellostages a minimal boot volume, mounts the executable's directory live, and warp-boots until the guest OS loads the program -- about one wall-clock second to reach your code on the bundled AROS ROM, in the spirit of the vscode-amiga-debug workflow. With--gdbthe session stops at the program's first instruction, and the control protocol gains aloadsegbreakpoint kind for scripted sessions. It composes with every headless flag, so a CI run can build an Amiga binary and screenshot it running.- A lide.device IDE board, and ATAPI everywhere. A new built-in Zorro II IDE board is compatible with LIV2's open-source
lide.device(RIPPLE, RIDE and AT-Bus 2008 personalities). On top of it, ATAPI CD-ROM support arrives across all three IDE surfaces -- Gayle, the A4000's motherboard port and the new board -- so a.cue/.iso/.chdpath on any IDE drive slot attaches a real IDE CD-ROM drive, and[[host_disk]]can hand a real host disk to a lide channel. Contributed by Simon Dick. - OFS directory mounts boot Kickstart 1.3. A hard-drive slot pointing at a host directory can now build its volume as OFS (
filesystem = "ofs"), the filesystem every Kickstart ROM since 1.2 carries -- so a directory mount boots a genuine 1.3 machine to Workbench with no FFS handler installed anywhere. Contributed by Simon Dick. - A Create Image workshop. Storage -> Create Image... makes fresh disk images from inside the launcher: DD or HD floppies, standard or extended ADF, any of the eight DOS types, boot code and volume name; hard-disk images to 9999 MB/GB with or without an RDB, custom geometry, boot priority and sparse allocation. Contributed by Lee Hobson.
- Configurable paths, portable mode and a default config. A new
[paths]section names where each kind of output lands, one launcher page edits it, relative entries follow a movable base -- and aportable.txtnext to the executable makes the whole installation self-contained, saves and all, for an emulator on a USB stick. Contributed by Lee Hobson. - Kickstart ROMs identified by checksum. A ROM file's name is whatever its dumper called it; Copperline now says which Kickstart it actually is -- 67 known images from 1.0 to 3.2.3, including betas, prototypes and the CD32/CDTV extended ROMs -- in the startup banner, the About panel, the ROM-load OSD and the launcher's ROM tab.
- The desktop grows an on-screen keyboard and picture controls. The A600 keyboard strip from the browser build arrives in the desktop window with a status-bar toggle, and H/V-centre controls nudge the TV picture the way a monitor's front-panel knobs did.
- Bezels, refined and yours. The 1084 front is rebuilt against fresh reference photography (contributed by Lee Hobson), the tube now shows the whole captured raster, and a bezel stickers folder puts your own decals on the case -- the same features on desktop and web alike.
- The browser build reads IPF images, offers both monitor fronts, and untangles Esc from fullscreen with the Keyboard Lock API -- tap Esc to release the mouse, hold it to leave fullscreen.
- Storage and capture odds. Gzip-compressed hardfiles (
.hdz) open directly with session-only writes; DMS archives with non-linear track layouts extract correctly; the launcher's Storage Browse dialog picks directories; serial TCP addresses are typed straight into the I/O Ports tab; and--screenshot-after/--save-state-afternow repeat, so one run can capture a whole sequence.
Hardware accuracy fixes
- BPLxPT is one live counter. Agnus bitplane pointers are never reloaded at vertical blank, and a CPU half-write merges into the DMA-advanced live value -- the behavior a display that rewrites its pointers mid-frame depends on.
- Wide-fetch origin. An AGA display fetching 64 pixels per gulp is placed from the absolute wide-fetch grid, so the first gulp sits left of the display window instead of leaking a seam onto it.
- Floating bus on write-only registers. Reading a write-only custom register returns the residue of the last driven chip-bus cycle, not a clean zero -- so guest code that reads BPLCON3 back and trusts the result now misbehaves exactly as it does on real silicon. Reported from real AGA hardware by Brazen Gameplay during Urb-X Warriors development.
- AGA palette banking. CPU palette writes resolve against the live BPLCON3 bank, and an out-of-range playfield priority blanks the playfield on Denise only, matching photographed real-chip behavior (the Bubble and Squeak and Alfred Chicken in-game graphics).
- IDE per-device registers. Each ATA device keeps its own cylinder registers, as on real hardware where the signature a driver probes belongs to the selected device.
- RAM power-on fill. Cold-boot RAM contents are configurable -- zero, seeded random or a fixed 16-bit pattern -- for software whose behavior depends on what a real machine's DRAM woke up holding.
- Volume labels in Latin-1. Host volume names are converted to the Amiga's own character set, so an accented label survives the trip into AmigaDOS (Volker Schwaberow).
Desktop, tooling and platform
- Deterministic control stepping. Stopping a session at an exact time through the control protocol no longer perturbs the timeline: a single
run_untiland the same span sampled in ten stops now end on the identical cycle, so an investigation can add observation points without changing what it observes.COPPERLINE_DBG_LISTCHECKaudits Exec list integrity as a bounded one-report diagnostic. - Tool windows no longer swallow input. Opening the debugger or another tool window leaves main-window Amiga input alive.
- WasmBoard fault isolation. A trapping WASM plugin board is isolated permanently instead of re-trapping every frame, and its DMA commits transactionally (Volker Schwaberow).
- Faster host-mounted volumes. A two-level case-insensitive LRU path cache speeds up directory-mounted filesystems (Volker Schwaberow).
- Debugger fixes. The memory-scan address is masked to the bus width and copper-list disassembly aligns to the list start (Volker Schwaberow), and the disassembler's ALU formatting is deduplicated (Volker Schwaberow).
- HostSocket. The
bsdsocket.libraryLVO table extends through the real end of the jump table, so software indexing deep LVOs finds them (Simon Dick). - Dependencies. The dependency tree moves to current releases; the
m68kcore at 0.10.14 fixes a real 68000MOVEM.Lbus-order bug that corruptedlide.devicesector reads under real Kickstart. - Homebrew installs from the release archive again (the v0.15.0 formula needed a fix).
External contributions
Copperline welcomes a new contributor this cycle: Volker Schwaberow (@vschwaberow), who arrived with five merged PRs -- WasmBoard fault isolation and transactional DMA, the host-filesystem path cache, two debugger fixes, Latin-1 volume labels and a disassembler cleanup. Welcome aboard.
- Lee Hobson (@hobbo91) again wrote more code this cycle than the maintainer did: the WHDLoad game library with OpenRetro details and cover art plus its A-Z navigation, the Create Image workshop, the configurable-paths system with portable mode and the saved default config, and the rebuilt 1084 bezel.
- Simon Dick (@sidick) contributed the lide.device-compatible IDE board with ATAPI CD-ROM and host-disk support, OFS for directory-mounted hard drives (booting real Kickstart 1.3 to Workbench), the launcher's directory picker, and the full-length bsdsocket LVO table.
- Brazen Gameplay, who are using Copperline to develop Urb-X Warriors: The Lost City, a new 16-bit Amiga game, fed back findings from running their work-in-progress on Copperline beside real AGA hardware. The floating-bus model, the BPLxPT live-counter fix, the wide-fetch origin fix and the deterministic control stepping all trace to that collaboration. If a new commercial Amiga platformer sounds like your thing, their Kickstarter page is the place to follow it.
Installation
Browser (no install): copperline.dev/try
macOS (Homebrew):
brew tap copperlinehq/copperline https://github.com/CopperlineHQ/Copperline
brew install copperlinemacOS (DMG): download Copperline-0.16.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.16.0-x86_64.AppImage below, then:
chmod +x Copperline-0.16.0-*.AppImage
./Copperline-0.16.0-*.AppImageWindows: download and extract the portable Copperline-0.16.0-win-x64.zip below.
From source:
cargo build --release
./target/release/copperlineThe 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. WHDLoad boot fetches its freeware support archives at packaging time, and the Kickstart images it stages are likewise yours to supply.
Full changelog: v0.15.0...v0.16.0