!

[AMIGA] Copperline 1.0.0 10/10/2026

[11] [www] !!! Sobota, 10 Października 2026 22:50 CET [21-06-2026 01:40 CET]

[AMIGA] Copperline 1.0.0 10/10/2026

Nowy emulator Amigi napisanego w Rust, ponoć eksperymentalnie i odpalanie z linii komend ale jeśli ktoś lubi pod górkę a nie z górki - to dobra okazja aby przyjrzeć się początkom emulacji tego naszego superkomputera;).

Copperline 1.0.0 10/10/2026

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.library without 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 .clstate files 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] title sets your own.
  • Guest writes to $BFFF00-$BFFF07 now print debug output (see below). This follows [emulation] uaelib, which is on by default; set it to false to 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-screenshots applies to --screenshot-after and --expect-screenshot.
  • Control protocol: capture.screenshot {"native": true}, also available as the MCP tool's native option.
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-screen and --windowed wins.
  • --monitor ([display] monitor) picks the display the window opens on and goes fullscreen on, by number or name. --list-monitors prints 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 $BFFF00 and a format-string pointer to $BFFF04, as under WinUAE. Messages appear in the terminal, the debugger console and the control protocol's event.debug stream. 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_write import, 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.resource now 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.device audio 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 .chd for new hard disks, which it writes as raw HDF images.
  • Standalone game bundles made with tools/publish now 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 m68k CPU 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.

Copperline 1.0.0 Release Candidate I 27/09/2026

This is the first release candidate for Copperline 1.0. If testing does not turn up problems that need a second candidate, the next release will be 1.0.0.

This cycle brings three- and four-player netplay on the desktop, debugger watchpoints on device registers with a timed trace of CD32 drive commands, a refreshed AROS ROM, and a review of the whole manual against the program, which also found and fixed a few mismatches in the program itself.

Please try your usual games, demos and configurations with it. Anything that worked in 0.21.0 and does not work here is exactly what a release candidate is for: open an issue with the configuration and the software involved.

Three and four players over netplay

Desktop netplay now seats two to four players. Players three and four use the parallel-port four-player adapter, just as they would sitting at one Amiga: two switch joysticks, no mouse and no CD32 buttons.

Player 1 hosts and everyone else connects to the host, which passes each player's input on to the others. Only the host needs to be reachable, and all players must be connected before the game starts. This works over direct IP and over the encrypted Internet connection, and spectators can still watch.

  • Launcher: the host sets Players, and Local player offers ports 3 and 4.
  • Command line: the host passes --netplay-players 3 or 4 and may repeat --netplay-peer once per guest, or leave it out to admit anyone with the session code.
  • The host's machine needs the adapter fitted with a joystick in each socket in use. A printer or sampler on the parallel port is still refused.

Browser games stay two-player, since a web page has no parallel port. See the netplay guide.

Watch device registers and trace the CD32 drive

The existing watchpoints compare memory before and after each instruction, which cannot work for a device register: reading one has side effects, such as popping a byte from Akiko's command port or clearing a CIA interrupt flag. MMIO watches are taken at the CPU's own bus access instead. Every data access to the watched range is recorded with its address, size, value, direction, PC, frame, beam position and colour clock. They work on Akiko, the CIAs, Gayle, Zorro boards, custom registers and RAM.

A new CD command trace records each packet the CD32 sends its drive: the decoded command, sector range, speed, reply and outcome, with emulated timestamps for when the host issued it and when the drive parsed, executed, answered, delivered its first sector and finished. It is a host-side record and never feeds back into the emulation.

Both are available everywhere the debugger is:

  • Debugger window: MMIO on the Break tab, and a new CD tab listing commands newest first.
  • Console: MWATCH (or MW) and CDTRACE.
  • Headless: COPPERLINE_DBG_MMIO=ADDR[:LEN[:CLASS]] and COPPERLINE_DBG_CD=1.
  • Control protocol and MCP: break.add {"kind": "mmio", ...}, a non-stopping mmio event stream, cd.trace and event.cd.

An armed MMIO watch switches the CPU to its precise loop and disables run-ahead, like the other debugger hooks. See the debugger window guide.

Bundled AROS ROM refresh

The bundled AROS ROM is rebuilt from upstream master f1ec64f45a with no local patches. Every part of the AROS pull request the previous refresh carried is now merged upstream. Changes that reach the ROM include:

  • Hires screens are no longer sheared by four bytes per line. AROS programmed DDFSTOP one fetch unit past the hardware stop at $D8.
  • Interrupt handlers restore INTENA's master bit, so a program that enables interrupts itself under Disable() no longer freezes at the first vertical blank.
  • DOS packets and loaded program hunks come from the top of free memory, keeping the low block contiguous for older software.
  • Screen user Copper lists, CD32 cd.device playback and reads, Kickstart-compatible OpenLibrary version handling, afs-handler read-ahead, ATAPI handling, and Shell and console fixes.

The ROM banks have more room: the extension bank had 682 bytes spare and now has about 15.5 KiB. Free memory at boot is 800 bytes lower than with the previous ROM.

The new memory placement exposed two Copperline bugs, both fixed: --coverage could count the next command's instructions as the program's, and the VS Code profiler command sometimes captured no frames.

Documentation checked against the program

Every chapter of the manual, all 238 custom-register pages and copperline.example.toml were checked against the source. Wrong defaults, labels, offsets and paths are corrected, and flags, configuration keys, control-protocol methods, console commands, launcher pages and environment variables that had never been documented now are. The manual also gains a table of built-in boards, the WASM socket ABI, a Cargo features table and the test-asset workflow. Linux instructions now say plainly that Copperline is not on Flathub: the AppImage is the download, and the Flatpak is something you build yourself.

The review also found places where the program disagreed with the hardware or with itself:

  • The debugger decoded ADKCON bit names one bit too high (WORDSYNC is bit 10), showed KILLEHB on bit 10 (that is ZDCTEN; KILLEHB is bit 9), and always hid bit 1 of DDFSTRT and DDFSTOP. The DDF decode now follows the fitted Agnus revision, using the same mask as the fetch sequencer.
  • --help lost duplicate MT-32 entries and has corrected screenshot, .zip, gamepad-mouse and lide entries.
  • The shortcuts panel no longer overflows and lists the filter, gain and sensitivity keys it was missing. The audio filter message now says On or Off, as the menu does.
  • The control protocol's MCP tool descriptions and schemas now match their handlers.
Other changes
  • Detaching a serial port could briefly show the guest a port asserting DSR, CTS and CD. The lines are now released before the port is marked detached.
  • The launcher's Create Floppy page still makes high-density images for other emulators and real Amigas, and now warns that Copperline's own drives will refuse them.
  • Dependency updates: toml, toml_edit, ringbuf, wasmtime 36.0.15, ureq and wat.

Copperline 0.21.0 19/09/2026

Copperline 0.21.0 adds spectators to Netplay, connects four local controllers on desktop and in RetroArch, and reduces the work needed to put each frame on screen. It also fixes file-picker crashes and changes two defaults that could upset otherwise working games.

Before upgrading
  • Clipboard sharing is now off by default. It fits an extra autoconfig board, which changes the Amiga's memory layout. That caused a hang in Lotus Esprit Turbo Challenge under 0.20. Enable it explicitly with --clipboard or [clipboard] share = true when you want it. An existing configuration that explicitly enables sharing keeps doing so.
  • The CD32 FMV cartridge is now optional. A stock CD32 starts with an empty cartridge slot. To use the bundled open FMV ROM, select Fit in the launcher's FMV row or set top-level fmv = true. A named fmv_rom still fits that ROM. Configurations that relied on the old implicit default need this setting for FMV playback; ordinary CD32 games no longer inherit the cartridge's changes to memory layout and boot timing.
  • Use matching builds for Netplay, including spectators. Desktop connects to desktop; browser connects to browser. There are still two active players. RetroArch uses its own Netplay system.
  • Recreate RetroArch save states after updating the core. The libretro payload now checks a fingerprint that includes the release version and rejects mismatched builds. Desktop states retain the chunked format introduced in 0.20; states from 0.19 and earlier still cannot load. Disk images and saves made inside games are unaffected.
Invite people to watch

Netplay hosts can admit up to eight spectators. They can join before the game begins or while it is running, receive the host's setup and media, and replay the confirmed input history to catch up. Watching runs a local emulated Amiga, so there is no video stream to encode. A long-running game takes longer to catch up with.

  • Desktop: choose the spectator count in the host's Netplay settings. Internet hosts generate a separate spectator invitation; watchers choose Watch and paste that code. Direct IP spectators connect to the host's existing UDP port with the session code.
  • Browser: Host game provides a separate spectator link with copy, share and QR controls. Open that link and choose Watch game. The host can continue using the local machine while waiting for player 2; the shared game cold-boots when that player connects.
  • Spectators follow the players a few frames behind, verify checkpoints, and receive synchronized floppy changes. They cannot send input or change disks. A spectator leaving or losing the connection does not stop the players.

See the Netplay guide for setup, supported configurations and limits. Mixed operating systems and browser engines still need qualification.

Four local controllers

The desktop now reads four independent gamepads through the two Amiga game ports and the parallel-port joystick adapter. Select Multitap (4 joysticks) in the launcher, set both native ports to Joystick, and use gamepad input mode. The cursor-key and numeric-keypad mappings can fill spare player slots. Unplugging a controller releases its input without moving the other players between ports.

The libretro core now exposes the adapter as controller ports 3 and 4. In RetroArch's Quick Menu → Controls, select Parallel-port joystick (multitap) for those ports. The adapter sockets start disconnected. This adds local four-player control for games such as Super Skidmarks; it does not expand Copperline's built-in Netplay beyond two players.

RetroArch's save-state buffers are also sized to the loaded machine instead of reserving 64 MiB for every session. Typical one-floppy A500 and A1200 sessions reserve about 14 MiB and 18 MiB respectively, reducing rollback memory use and checksum work. Larger configurations and WHDLoad volumes need more space.

Display and desktop fixes
  • Less presentation overhead. Repeated TV-aperture calculations and row copies have been removed, eligible pictures use a GPU drawing path, and a worker handles texture upload and presentation. Core changes avoid redundant DMA decoding and Copper WAIT checks while preserving the emulated timeline.
  • A VSync switch. Video Settings → VSync changes presentation live and is saved as [display] vsync. It defaults on. Turning it off can reduce latency where supported, at the cost of possible tearing; PAL output still has an uneven cadence on a mismatched display refresh rate.
  • An optional lower-resolution backing texture. [display] hidpi_texture = false reduces texture and copy work on high-density displays. Integer scaling keeps its appearance; smooth scaling can show differences in fine interlaced detail. Screenshots and recordings are unaffected.
  • Wayland presentation scheduling now accounts for pending frames and presentation feedback, with additional Linux smoke coverage.
  • Windows renderer selection tries accelerated OpenGL when automatic selection finds a CPU renderer. Explicit WGPU_BACKEND and WGPU_ADAPTER_NAME choices are respected.
  • Native file pickers: Windows dialogs keep the window responsive, and macOS uses sheets to avoid the event-loop crash when resizing a picker on macOS 27. Picker audio suspension and resume handling are consistent across the launcher and runtime menus.
  • Clean shutdown on macOS: closing the window or quitting no longer deadlocks while the presentation worker releases the window.
  • Windows Explorer launches no longer open an unwanted console; command-line use retains terminal output. The executable also gains its application icon and version resources.
  • Menu improvements: PCMCIA gets a dedicated submenu, Emulation and Cartridge settings move to more useful positions, and Netplay's enable control uses the same stepper style as neighbouring settings.
Other changes
  • New Kickstart 1.3 regression coverage for copperhf.device verifies FFS partitions with a period-compatible FastFileSystem. The reported crash came from using a newer filesystem binary that requires libraries absent from 1.3. The documentation now explains the mismatch and records the board's product ID.
  • Dependency updates include the rustls fix for RUSTSEC-2026-0285. The existing egui/pixels/wgpu renderer versions remain together.
  • Parallel directory-image tests now allocate unique temporary directories, avoiding collisions between tests.

Copperline 0.20.0 12/09/2026

Copperline 0.20.0 adds two-player Netplay, a rebuilt debugging workspace, and a libretro core for RetroArch. There are also new ways to save and share a session, more hardware to connect, and a substantial change to how save states survive future releases.

Play together
  • Desktop Netplay offers Internet invitations with encrypted connections, NAT traversal and relay fallback, as well as direct UDP connections. The host transfers the machine configuration, ROMs and supported game media to the joining player, and both machines cold-boot together. The host can change floppy disks during play: both peers pause, verify the replacement and resume at the same emulated frame. IPF protection-track timing is preserved during transfer. Display and volume preferences stay local.
  • Browser Netplay has invitation links, QR sharing and automatic setup transfer. Both players run the Amiga locally; WebRTC carries setup data and input, with TURN fallback on the hosted page. DF0 and DF1 swaps and ejections are synchronized. Two-mouse games are supported on desktop and in the browser, including two-player Lemmings.

Both implementations use rollback: predict late input, restore an earlier machine snapshot when necessary, then replay to catch up. See the Netplay guide for setup and supported configurations, or watch two-player Lemmings over the Internet.

A new debugging workspace

The Amiga display, debugger, Frame Analyzer and Console now share the main window. Use the Play / Debug switch, or Cmd+B on macOS and Alt+B on Linux/Windows. Drag the divider to resize the display and inspectors; CPU registers, disassembly and memory panes also resize independently.

The inspectors use a shared GPU-rendered UI with selectable text, normal copy/paste, scrollbars and a bundled Hack font. Memory can be edited in place in either hex or ASCII. Tabs indicate which inspectors are open and which are capturing, keep their state when hidden, and can be closed individually. Following an address from the Frame Analyzer opens the corresponding memory or disassembly view. Returning to Play keeps the workspace ready for the next visit.

Stepping now advances a CPU parked in STOP to the interrupt that wakes it. The disassembler also fixes opcode collisions, instruction lengths, model-specific opcodes and absolute-word address formatting.

Copperline in RetroArch

The new libretro core supports A500, A1200 and CD32 machines; PAL and NTSC; floppy and CD playlists; WHDLoad packages; keyboard, mouse, joystick and CD32-pad input; and portable save states. AROS is embedded, so the core boots without additional ROM files.

RetroArch disk controls handle swapping. Floppy writes are kept in the frontend's save directory, and CD32 EEPROM is exposed as save RAM. The memory map supports RetroArch's memory viewer and cheat search. Two-gamepad rollback Netplay uses RetroArch's own session controls.

Download the platform's libretro ZIP below and install the core manually. It is not yet in RetroArch's Online Updater. The prebuilt cores cover Linux x86-64, macOS Apple Silicon and Windows x86-64; other targets can be built from source. See the libretro guide.

Saves, clips and automation
  • Save-state thumbnails. The Load State browser shows the picture, machine, media and emulated time for each snapshot. The menu and Cmd/Alt+Shift+L both open it. copperline-ctl state-info reads that metadata without restoring the machine and can extract its thumbnail.
  • GIF clips. Save the last few seconds from the desktop's recording ring, or schedule a reproducible clip with --gif-after and --gif-seconds.
  • Typed input and screenshot checks. --type-after types text into the guest. --expect-screenshot compares a scheduled frame against a PNG, writes actual and difference images on failure, and returns a failing exit status.
  • Guest return codes and coverage. --run --exit-on-return returns the AmigaDOS result to the host shell. --coverage writes lcov line and function coverage from the guest's debug information. Guest code can also end a run through uaelib ExitEmu.
  • Find the first divergence. copperline-ctl diverge compares two builds or configurations, narrows a mismatch to its first frame, then steps through it to locate a differing instruction, memory byte or timing result.
  • CLI tools in the downloads. copperline-ctl and copperline-import-uae now ship in the desktop release packages alongside the emulator.
Hardware, audio and fixes
  • A parallel-port four-player joystick adapter, with ports 3 and 4 available to scripted input as well as local controllers.
  • Light pen and light gun input, with beam-position latching through the board's Agnus connection.
  • An A600/A1200 PCMCIA slot with SRAM and CompactFlash/IDE cards, card insertion/ejection and the Gayle register interface.
  • CHD hard-disk images, extending compressed-image support beyond CDs.
  • Real host serial ports connected to Paula's UART.
  • The SF2000 accelerator's Zorro II SD controller, contributed by Matt Harlum, with SD-over-SPI command handling and a boot-ROM interface.
  • Cleaner Paula audio. Output transitions are band-limited onto the host mixer grid; mixer phase follows the emulated clock, and mix headroom follows the reconstruction kernel.
  • Storage and display fixes. copperhf.device DMA now keeps the CPU's data cache coherent. Intel Mac fullscreen border corruption and desktop Netplay display stalls during continuous mouse motion are fixed. Redundant blitter overlay and indexed-colour table work has been removed.
  • Updated CPU and boot ROM. m68k 0.13.0 and AROS master 311afcc057 plus the memory-footprint reduction from AROS PR 1179. The former local 8 KiB process-stack patch is now upstream.

Copperline 0.19.0 6/09/2026

  • Source-level debugging in VS Code. copperline-ctl --dap is a Debug Adapter Protocol server built on the control protocol, and tools/vscode-copperline packages it as a VS Code extension (debug type copperline). A launch.json names the Amiga executable and the machine (model, chip, slow, rom, factory...); F5 boots the bundled AROS ROM or a Kickstart from 1.3 up, warp-boots to the program and stops at main. From there: source, function, instruction, data and exception breakpoints with machine-evaluated conditions (d0 == 5, [$DFF006] != 0); Step Over/Into/Out at statement or instruction granularity; Step Back and Reverse Continue from the snapshot ring; Registers (FPU included), Locals, Globals and a Chipset scope with every custom register; hovers and watch expressions; Memory and Disassembly views with per-instruction cycle counts and live ROM names such as [exec] AllocMem+$12; a Debug Console that carries KPrintF and serial output and accepts raw !method {json} control-protocol calls. The toolbar opens Copperline's native Debugger, Console and Frame Analyzer windows, a Custom Registers tree documents every register's bits and access rules, and Profile captures one or more frames as a source-mapped .cpuprofile with a [Bus wait] child separating chip-DMA contention from CPU work. Debug information comes from vasm LINE hunks, amiga-gcc 6.5's DWARF hunk, or an ELF sibling from Bartman's m68k-amiga-elf-gcc (DWARF 4/5, including relocatable -r multi-file builds, whose debug-section relocations the reader applies itself). nvim-dap and any other DAP client work the same way over stdio or --dap-listen. Command palette extras: Init Amiga Project (vasm, amiga-gcc, vbcc or Bartman toolchains), Convert EXE to ADF and Profile File Size. See docs/debugger/vscode.md and docs/debugger/dap.md.
  • Bartman's Amiga C/C++ extension runs on Copperline. A public fork of the extension (LinuxJedi/vscode-amiga-debug, branch copperline-backend; upstream PR 307) adds amiga.emulator = "copperline". Copperline supplies the other half: --gdb-gui attaches the GDB stub to the interactive window, --gdb-dialect bartman speaks the patched GDB's wire contract (qOffsets per hunk, the $FFFFFFFF return-from-ROM breakpoint, monitor reset, DBG: output), monitor profile writes the extension's binary profile format from the precise sampler and full bus trace, and a windowed launch waits paused until GDB connects so the guest cannot outrun its debugger. The result is Bartman's visual profiler on a cycle-driven machine: the CPU call-stack and DMA/blitter timeline, the displayed bitmap inferred from the recorded Copper writes (or a bitmap the guest registered by name), the Copper list, blitter A/B/C/D channel previews per blit, and the per-function profiler tree. Six real captures are in docs/debugger/vscode-bartman.md, with a pinned, reproducible install of the fork.
  • Profiling and chip-bus tracing. profile.start/profile.stop/profile.status stream one JSON record per committed frame: chip-bus ownership per Agnus owner, blit records, the guest's idle clocks, optionally the per-colour-clock owner grid in vAmiga's DMA-debugger letter code and a screenshot per frame. "samples": true records every retired instruction with its PC, colour-clock cost and optional registers, plus live call stacks from a client-supplied unwind table; copperline-ctl profile-report converts a capture to a Chrome .cpuprofile or Bartman annotations. frame.slots and the bus event family expose a full 24-byte record per raster colour clock (register, DMA kind and subtype, size, IPL, CIA E-clock phase, address, data, and a hardware-event mask: blitter start/finish, Copper WAIT wake, DDF strobes, VB/VS/LOF, CIA IRQ pins, STOP entry and wake). The Frame Analyzer's Beam tab gains a CPU wait view (W) that attributes every colour clock the 68000 lost to the DMA class that held the bus, with a per-line stall gutter and the top stalled PCs; CPUWAIT prints the same in the console. blit.render reconstructs any channel of any blit from the captured DMA words, the new Blits tab shows sources and result side by side, Copper MOVE slots are drawn on the beam, and capture.screenshot can overlay blit destinations, chip-RAM overdraw heat or Denise pixel provenance. copperline-ctl profile profiles a saved .clstate or WinUAE .uss offline.
  • Live Kickstart symbols. ROM addresses in call stacks, disassembly, stalled-PC lists and profiles are resolved from the running guest -- Exec's library and device lists, their LVO jump tables and the resident list -- against a table of public AmigaOS LVO names, so names follow SetFunction() patches and work on any Kickstart or AROS revision without a per-ROM address database (WHO ADDR, symbols.resolve, symbols.rom).
  • A WinUAE-compatible uaelib trap. $F0FF60 answers the calls Bartman's template makes: warpmode() unpaces the window, KPrintF lands on stdout and in the debugger console as DBG: lines, debug_register_bitmap/_palette/_copperlist feed a new Frame Analyzer Resources tab (decoded bitmap previews, palette swatches, disassembled Copper lists, heat-map presets per resource, PNG export) and the debug control-protocol events, debug_start_idle/stop_idle account the guest's idle time per frame, and the overlay commands (debug_rect, debug_text...) are drawn on the windowed presentation without ever reaching screenshots or captures. debug_load/debug_save are available behind [emulation] uaelib_files, sandboxed below the program's directory. The trap is 32 bytes of real 68k code decoded on the bus; there is no A-line or TRAP hook.
  • An MCP server. copperline-ctl --mcp exposes every control-protocol method as an MCP tool (95 tools, one per method with dots mapped to underscores) plus session_launch, session_attach, events_next and friends, so Claude Code, Cursor or any MCP client can boot a machine, set breakpoints, step, read memory and receive screenshots as image blocks. claude mcp add copperline -- copperline-ctl --mcp is the whole setup.
  • HRTMon freezer cartridge. [cartridge] model = "hrtmon" (or --cartridge hrtmon) fits an Action Replay-style cartridge with HRTMon 2.39 built reproducibly from the upstream GPL source: a 1 MiB bank at $A10000, a configuration block written from the fitted boards at reset, a shadow of every custom and CIA register copied into the bank on a freeze, and the freeze itself as a level-7 NMI through the current VBR that the 68000 takes at the next instruction boundary whatever the SR mask. Tools > Freeze or Cmd/Alt+Shift+B in the window, --freeze-after SECS headless, cartridge.freeze over the protocol; x in the monitor returns to the interrupted program.
  • Warp boot and auto-launch. --warp-boot runs any configuration unpaced from power-on until its floppy and hard-disk activity has been idle for warp_boot_idle seconds (10 by default; CD audio deliberately does not count), then re-paces with audio; --warp-until SECS warps to an absolute emulated time. Both have launcher rows, and Lee Hobson's [emulation] auto_launch makes a saved default boot straight past the launcher screen, so a double-click lands on a settled Workbench.
  • Open ROM replacements. The CD32 FMV cartridge now works without Commodore's image: a clean-room GPL ROM (fmv-rom/) installs cd32mpeg.device, whose worker reads Mode-2 sectors through the host cd.device and feeds the CL450 and L64111 ports (no proprietary microcode is copied), plus a videocd.library and version-41 cdstrap that cold-boot a White Book Video CD into a track player under Kickstart; under AROS the matching driver merged upstream in AROS PR 1089. Cannon Fodder's filmed intro plays on both paths. The A2091/A590 gets a clean-room 64 KiB autoboot ROM (a2091-rom/): scsi.device 42.40 derived from the A4091 software, an RDB automounter with Kickstart 1.3 support, a WD33C93 transport that uses the DMAC for even-aligned chip-side buffers and a chip-RAM bounce buffer otherwise, and a build that also emits split U13/U12 EPROM halves for a real board.
  • copperhf.device. Copperline's own zero-cost hard-disk controller, the analogue of uaehf.device: a Zorro II board with a doorbell/completion-queue register block, an autoboot ROM with an RDB mounter that autoboots on Kickstart 1.3 as well as 2.0+ and AROS, the full trackdisk family (TD64, NSD, HD_SCSICMD with autosense, disk-change interrupts and TD_EJECT), and a completion time that is a pure function of emulated time so host disk speed never reaches the guest. [copperhf] unit0..unit6 take RDB hardfiles, bare images, .hdz and host directories; copperhf.attach/copperhf.eject swap them live; the launcher's Storage page gains a Copperline HD sub-page; and copperline-import-uae now maps WinUAE uaeN drives onto it. Contributed by Simon Dick.
  • Display scaling and autocrop. A new WGSL scaler pass replaces the pixels crate's built-in draw, so integer scaling is no longer capped at 4x on a 5K or 6K display. Under the default tv pixel aspect, integer scaling now presents the unresampled square canvas with a separate whole-number factor per axis chosen to approximate the glass's pixel shape (a 200-line NTSC game with autocrop on a 1080p display is drawn at 2x5). [display] autocrop crops the presentation to the display window the hardware actually programs -- the renderer's own per-line DIW bounds over rows carrying fetched bitplane data, with a latch that adopts growth immediately and shrinks only after half a second of stability -- and works for programmable DblPAL/Multiscan/31 kHz scans too. Captures keep their aperture. The browser demo at copperline.dev/try gains the same Scaling and Autocrop controls.
  • WinUAE save-state import. --load-uss reads a WinUAE .uss AmigaStateFile, derives the machine from its chunks, verifies the ROM by CRC and restores CPU, custom, Copper, bitplane, blitter, CIA, palette, sprite and audio state. It is an approximate interchange for resident code, not cycle-exact resumption; docs/guide/winuae-state.md has the coverage table.
  • --run on a bare Kickstart 1.3. The staged boot volume now carries small GPL 68000 FailAt, CD, Stack, Echo and Execute commands, so a direct executable launch reaches LoadSeg on a 1.3 ROM with no Workbench files (detached launches still need 2.0+ or AROS). --run-stack, --run-detach and --video PAL|NTSC join the launch flags.
  • Smaller things. Every custom-chip register now has a documentation page under docs/reference/custom-registers/ -- bit fields, access side effects, AGA readback, Copperline's own limits -- compiled at build time into the IO Map, the console's CUSTOM REG, custom.dump, the DAP Chipset scope and the VS Code register tree; --gdb-gui and --control-gui can share one window, with warp holds released per client; regs.get reports FPU registers, run_until takes a pc_outside window, watchpoints can be read or read/write, and the GDB stub gains Z3/Z4; the About panel thanks patron Sphair.

Hardware accuracy fixes

  • Every drive's motor latch clocks on its own /SEL edge. DF0 was modelled level-sensitive, so a loader that restored a stale CIA-B PRB shadow with MTR high while still selected stopped the motor it had just started; DF0's /RDY now also mirrors /TRK0 while its motor is off. Alongside it: the 68000 IPL recognition pipe keeps one deadline per interrupt source and bounds an idle STOP nap by an interrupt already latched in INTREQ, the pre-display sprite DMA lines are replayed slot by slot at their own beam time so a descriptor rewritten from the vertical-blank interrupt is seen when the hardware would see it, and a trackloader parked on DSKSYNC no longer costs a whole-revolution cell scan per idle slice (Spooky Town under Kickstart 1.3 was the witness, compared against a vAmiga 5 reference frame).
  • DSKBYTR is framed by the read shifter. Paula frames the byte with the shifter's bit counter, the one a WORDSYNC match resets, not the track's own byte grid, so bytes read off an IPF or flux track at an arbitrary sync phase were shifted; WORDEQUAL is now the comparator's live one-cell level, and IPF density models 3..9 (Copylock, Speedlock, Brierley) decode with the mastered variable cell timing instead of uniform 2 us cells. Lemmings' Copylock key-track check passes (issue #610).
  • Akiko delivers subcode frames during CD-DA play. The Q channel is regenerated from the TOC (control, track, index counting a pregap down, track-relative and absolute MSF in BCD, inverted CRC-16) at 75 Hz with the subcode interrupt, and the SubQ command reports the running position; Liberation's intro, which busy-waits on CD_ADDFRAMEINT, plays through. The TX DMA now drains the guest's 256-byte command ring into a drive-side buffer while a lead-in dump streams, instead of consuming one byte per delivered packet, so discs with more than about 25 tracks no longer lap the ring and produce checksum-error replies the real drive never sends (Pinball Illusions, 39 tracks).
  • Agnus cancels a fetch run carried past the last display line. The bitplane sequencer honours DDFSTOP only at the next fetch-unit boundary, so a hires window whose last unit overruns the line end carries BPRUN into the next line; Agnus drops it with the vertical flop on the DIWSTOP.V line, which Copperline did not, painting one phantom row below the display. A new ddfprobe-vspill golden pins it (45 goldens now).
  • 68030 and 68040 timing calibrated on a real A4000. A new bootable accelprobe measured exception round trips, jsr/rts, movem, cpushl, chip and fast RAM read/write rates and the SetPatch MMU table walk on a BFG9060, an A3640 and a Commodore 68030 board against the CIA E-clock. The scaled-68000 approximation over-billed plain 68040 execution about 2-2.5x while the real 68030's core figures matched the A1200's 68020; m68k 0.12.1 moves the 68030 onto the MC68020UM tables and gives the 68040 a single-issue pipeline model. The fast-RAM speed-class and CPU-slot bridge billing the probe also exposed remain open.
  • Toccata: the AD1848 mixer fallback held the last DAC sample forever after the codec stopped (a permanent DC offset), and disabling playback while capture stayed enabled left playback active; both fixed by Simon Dick.
  • Bundled AROS ROM refreshed to upstream master a3cfa659ed: the open cd32mpeg.device and CDXL work (PR 1089, carrying Copperline's sector-ordering fix), the CD32 chip-memory savings and CDXL presentation series (PRs 1109 and 1125), exec spinlocks, and a smaller ROM footprint. One local patch keeps the DOS process-stack floor at 8 KiB, because upstream's new 4 KiB floor overflowed the shell under --run.
Desktop, tooling and platform
  • Save-state persistence. A failed or interrupted save no longer truncates the previous snapshot, and expansion boards serialize with permanent wire IDs instead of feature-dependent enum indices.
  • Headless debugging is timeline-transparent. 
  • CI builds a lot faster. e and Flatpak cargo-sources list are generated on demand instead of tracked.
  • Documentation. New chapters for VS Code, the Bartman fork, the DAP adapter, profiling and WinUAE state import; the custom-register reference; a full refresh of the guide, debugger and internals chapters against the current implementation.
  • Guest code builds with the amiga-gcc:gcc-v16.2 image; m68k 0.12.1, toml_edit 0.25, syn 3 and routine dependency updates.

Copperline 0.18.0 29/08/2026

Copperline 0.18.0 is the CD release. The CD32's Full Motion Video module -- Commodore's MPEG cartridge -- is emulated end to end, so Video CDs play and FMV-aware titles run their MPEG sequences on an emulated CD32 exactly as they do with the real cartridge in the expansion bay. Underneath it, the CD32 drive model was calibrated against a real PAL CD32 with a purpose-built probe disc and a filmed cold boot: spin-up, seek times and command pacing are now measured quantities, and the emulated cold boot tracks the real machine's to within 50 milliseconds -- close enough that Fightin' Spirit, which depends on the exact boot-time memory layout, boots from the unmodified disc for the first time. Around the CD story: CDXL video plays from cooked ISOs, Nero NRG images mount, cue sheets take WAVE and MP3 audio tracks, a new copperline-import-uae tool converts WinUAE, Amiberry and FS-UAE configurations, a Hayes-compatible modem answers on the serial port, run-ahead trims input latency, and AGA sprite, fetch and palette fidelity was pushed to pixel-exact against the vAmigaTS references. 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.17.0 do not load in 0.18.0. The FMV module, the calibrated drive model and the vertical display-window flop all changed the serialized machine shape, so the state format version moves from 61 to 70. Re-create snapshots after upgrading.

CD32 and CDTV now default to no floppy drive, like the real machines. [floppy] drives accepts 0-4 mechanisms and puts one back (drives = 1, or --floppy-drives 1); every other profile keeps its DF0 default. The launcher understands driveless CD machines and now lists a mounted disc's tracks.

The lide.device IDE boards now autoboot out of the box. A fitted board defaults to a bundled build of LIV2's open-source ROM (lide.rom for ripple/ride, lide-atbus.rom for atbus2008, plus the CD-filesystem second bank where the board supports banking) instead of requiring a user-supplied download. rom = "" opts back into the old hardware-only mode, and an explicit path is still honored. Each drive slot also gets its own key -- drive0..drive3 in (channel, master/slave) order, the same shape as [ide] and [scsi] -- with each drive's boot priority under it; the older positional drives = [...] array is still read.

No configuration keys were removed or renamed. Everything else is additive: [machine] fmv_rom, [emulation] run_ahead_frames / --run-ahead, [serial] mode = "modem" with its telnet, session and [serial.phonebook] keys and --serial-session, the [lide] per-slot keys, .nrg images, and WAVE/MP3 cue tracks.

Highlights
  • The CD32 Full Motion Video module. [machine] fmv_rom fits Commodore's MPEG cartridge as the first Zorro II board in a CD32: the CL450 video processor and L64111 audio decoder interfaces, the module's RAM and ROM, and the analogue keying path that mixes decoded video with Denise's output, with Video CD frames scaled across the full capture aperture. MPEG-1 video decodes through CopperlineHQ's safe pure-Rust plmpeg port and MPEG Layer II audio through Symphonia. Video CDs play, and FMV titles run their MPEG sequences -- Cannon Fodder's filmed intro plays before the game loads and runs to gameplay deterministically. MODE2/2336 and MODE2/2352 tracks are read through cue, NRG and CHD images alike. The 256 KiB v40.30 cartridge ROM is yours to supply, like a Kickstart. One caveat: with the module fitted, booting a CD needs a real Kickstart for now -- the cartridge carries its own KS-era cd.device that takes over the bundled AROS ROM's boot path; an upstream AROS fix is in progress.
  • A CD32 drive calibrated against real hardware. A purpose-built probe disc (tools/cd32-probe, included, with the measured result tables in its README) and a filmed cold boot turned the drive model's guesses into measurements: a spin-up gate on the first lead-in dump (8.8 s cold, 3.5 s warm), TOC dumps that complete before the next queued command acts, a measured seek curve replacing the single-slot seek, TX DMA that folds to its 256-byte page the way Kickstart's producer expects, and unmapped address space billed at its measured bus cost. The emulated cold boot now enters the startup-sequence at 14.36 emulated seconds against 14.31 filmed -- and because the boot show never runs with a bootable disc spinning up, chip RAM is laid out as on the real machine: Fightin' Spirit boots unpatched to the credits, and discs inserted at the idle screen or mid-show now boot like a real lid close.
  • CDXL from cooked ISOs. Reads from a bare .iso now synthesize complete raw Mode 1 sectors -- EDC and P/Q parity included -- so CDXL video plays from cooked images and CDTV-trademark boots work on the CD32 profile; cached TOC transport is paced independently of optical sector delivery.
  • More CD image formats. Nero NRG images mount everywhere a cue sheet does, and cue sheets accept WAVE and MP3 audio tracks with PREGAP/POSTGAP lines honored -- a ripped game with compressed audio tracks plays its soundtrack without re-mastering.
  • copperline-import-uae. A converter that turns a WinUAE, Amiberry or FS-UAE configuration into Copperline TOML -- machine model, CPU/FPU, RAM sizes, chipset, Kickstart, floppies (FS-UAE swap lists become a playlist), hard drives and directory mounts, CDs, RTC, audio, joystick ports and the [lide]/[scsi]/[toccata] boards. It is honest about the rest: approximations are commented at the line they produced, and everything with no equivalent is listed at the end of the file it writes, so "considered and skipped" is distinguishable from "not yet handled". The output is validated exactly as copperline --config would load it. Contributed by Simon Dick. See docs/guide/import-uae.md.
  • A modem on the serial port. [serial] mode = "modem" puts a Hayes AT-command modem on Paula's serial port, so Term, NComm and BBS doors that expect dial commands, result codes, carrier semantics and the +++ escape get them, instead of the raw byte bridge of the tcp modes. It answers inbound calls (RING, S0 auto-answer, ATA), dials from a config-file phonebook, speaks enough telnet NVT for real BBS servers, persists AT&W profiles to a sidecar file, and carries a WiModem232 compatibility layer verified against the real unit's manual, so published community setup guides run verbatim. A scripted-session transport (--serial-session) replays a dial-out byte-for-byte for deterministic headless runs. Contributed by Simon Dick. See docs/guide/modem.md for the command set and a BBS quick-start.
  • Run-ahead. [emulation] run_ahead_frames (0-4, --run-ahead, or Emulation Settings > Run Ahead) trims perceived input latency: each refresh commits one ordinary frame, snapshots it, silently executes future frames, presents the last, and restores the snapshot. It is guarded rather than reckless -- whenever a frame could touch host state the snapshot cannot rewind (writable media, live serial, recording, control clients, and more), the setting goes inactive with the reason shown in the menu, and a burst that cannot restore its anchor disables the feature rather than let speculative frames become the timeline.
  • AGA fidelity. Lisa's sprite serializer is now modeled in 35 ns samples, so SHRES sprites (SPRES=11) are distinct from hires ones and render the 4:4:2:1 width staircase photographed on a real A1200; both SHRES playfield halves survive priority and composition. Alice's wide-fetch address phases are modeled -- FMODE 10 page-mode duplication and unaligned aliasing included -- along with the per-resolution DMA ceilings, Lisa's banked BPLCON2.RDRAM palette readback and the one-hires-pixel COLOR write delay. The sparse vAmigaTS AGA sweep's two worst cases went from 16.179% and 70.931% mismatch to 0.000%, and the repo's AGA golden probes are now cross-checked against vAmiga 5.0b1 (the comparer tool is included).
  • The browser demo grows a second, writable drive. copperline.dev/try now wires DF1 and keeps floppy images writable in memory, so two-disk software installs and saves within the session.
  • Smaller things. The full build's menu offers Quit as its last row, holding Select quits on the standard gamepad layout, and calibration takes alternate direction bindings; the launcher's Storage, Video/Display and Serial pages were restructured (boot priority lives with its drive, the serial address is proper host and port fields); the CCP honors at_seconds on input.joy/input.mouse/input.analogue and the debugger disassembles 68020+ full-format extension words; and the user guide and debugger docs got a full audit pass with a completed table of contents.
Hardware accuracy fixes
  • The vertical display window is a set/reset flop. DIWSTRT.V sets it, DIWSTOP.V clears it, the frame's last raster line resets it (judged against the fixed standard line, not the programmed height), an empty window (DIWSTRT.V == DIWSTOP.V) never opens, and the flop's state survives save states and the frame wrap. LOF holds steady outside interlace, and the deinterlacer detects field-blind weave phase. Kang Fu's interlaced CD32 menus and Nexus 7's scene transitions render correctly; three new golden probes pin the behavior.
  • AGA sprite palette banks were transposed. Even sprites read their colors through BPLCON4's ESPRM nibble and odd/attached pairs through OSPRM -- Copperline had them swapped. Alongside it, a Copper fetch may ride the line-end refresh slot (only the CPU and blitter stall on it), and the blitter's deadline predictor mirrors the refresh carve-out. Both fixes carry golden probes (Nexus 7's credits were the witness).
  • A DDFSTRT rewrite is judged at its comparator commit clock. Moving DDFSTRT behind the beam mid-line means the comparator never matches and the line's fetch is dropped -- restarting a wide-FMODE fetch mid-unit desynced the planes (Microcosm's control panel). Pinned against vAmiga 5.0b1.
  • Dual-playfield sprite priority follows the winning playfield. The playfield that wins the pixel judges the sprite against its own BPLCON2 priority code, not a fixed field (the bin Chuck Rock 2's Junior hides behind).
  • COPJMP strobes fire on reads too, returning the floating-bus residue (Sleepwalker's jerky animation). And BPLCON1 scroll fills a bitplane-DMA block's first line from its own pre-window fetch, exactly as on interior lines -- the old suppression modeled a shifter history real Denise does not have (the black notch in Super Skidmarks' CD32 menu corners).
  • HAM8 stays on the history-dependent resolver, fixing a 0.17.0 regression where an indexed-cache shortcut broke HAM8 scenes.
  • Paula re-frames WORDSYNC reads on every DSKSYNC match, not just the first, and disk DMA armed while the drive has no disk or a stopped motor stays pending until real cells arrive, instead of completing against phantom data. CLXCON2 joins live collision decoding on AGA.
  • Akiko fixes: CDINTREQ reads return the raw request latches rather than the masked value (Jim Power's CD32 loader polls them raw), RX DMA wraps within its 256-byte response page, and plays into data tracks are refused with the real firmware's error. The bundled AROS ROM was refreshed three times this cycle with upstream fixes Copperline contributed: a cd.device interrupt-service fix, a ciab.resource handshake fix, and a dosboot stale-IORequest fix.
  • Picasso II BitBLT: the NOR and NAND raster-op encodings were transposed, the BLT address counters are left where the transfer stopped, and the source end derives from the source the mode actually reads (Bernie Innocenti).
  • SHRES half-pixel composition on the classic canvas was corrected as part of the sprite work.
Desktop, tooling and platform
  • Hardened media and save-state parsers. New fuzz targets exercise the untrusted media and save-state parsers, and the campaign's findings are fixed: CHD headers and compressed maps are bounded before the decoder acts on them, and the save-state reader never sizes an allocation from the stream's own length prefix.
  • Supply-chain CI. cargo deny enforces the dependency advisory and license policy, the declared minimum Rust version is built in CI, and scheduled dependency updates cover every workspace in the repo.
  • cputest in the exit status. The nightly WinUAE cputest conformance run reports its verdict through the runner's exit code, so a regression fails the workflow instead of hiding in the log.
  • m68k 0.11.6, with the browser demo's CI smoke test extended to driveless machines.

Copperline 0.17.0 22/08/2026

Copperline 0.17.0 is the audio release. Coppersynth puts a General MIDI sound module on the other end of the Amiga's MIDI cable -- a sixteen-part SoundFont synthesizer in the style of a Roland Sound Canvas, with an SC-55-style front panel under the display and an MT-32 translation layer in front, so a game that talks to an MT-32 plays with no ROMs and no configuration. Beside it arrive two Zorro II sound boards: a MacroSystem Toccata, the AD1848 card the stock toccata.audio AHI driver expects, and an MHI MPEG audio decoder board that lets AmigaAMP play MP3 on a plain 68000. Every one of those sources -- and Paula's four channels, the drive noises, CD-DA and the MT-32 -- now flows through one mixer that can write each of them to its own WAV, and the debugger's Audio tab grows a row per source with state, oscilloscope and mute. Elsewhere, CD32 discs cold-boot on the bundled AROS ROM with no Kickstart at all, a publisher kit builds a launcher-free player for a single game, most gamepads work out of the box and can drive the whole UI, the About page got a makeover, and RTG gains the Graffity boards. 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.16.0 do not load in 0.17.0. Three new boards, the Akiko fixes and the gamepad mouse all changed the serialized machine shape, so the state format version moves from 54 to 61. Re-create snapshots after upgrading.
  • Gamepads no longer need calibrating first. A controller found in the bundled SDL_GameControllerDB (or identified by the platform driver) uses a fixed standard layout. A saved calibration for a pad always wins over the database, so existing setups are untouched -- but a calibration made before 0.17.0 for a pad the database also knows may have a stick reversed; Copperline logs a one-time hint, and recalibrating once fixes it.
  • No configuration keys were removed or renamed. Everything new this cycle is additive ([toccata], [mhi], [zz9k], the [serial] coppersynth_* keys, [audio] stem_granularity, [input] port1 = "gamepad-mouse", the Graffity [rtg] card values) and no default changed. Two new files to know about: Coppersynth keeps its battery-backed settings in coppersynth.nvram in the NVRAM folder, and the MHI board's guest library is not installed automatically -- copy guest/mhi/mhi_copperline.library into LIBS:mhi/ on the Amiga side.
  • Windows on ARM gets its own portable zip from this release, and the default build no longer needs a C compiler on any platform.
Highlights
  • Coppersynth. A built-in General MIDI sound module: sixteen parts, GS and NRPN handling, reverb and chorus, and an SC-55mkII-style front panel with the real unit's button grammar -- part and system menus, variation banks, GS init, the demo sequences, and the power-on combinations -- whose settings survive power cycles like the real unit's battery. The GeneralUser GS bank by S. Christian Collins is embedded, so it needs no files; any .sf2 (or a .zip holding one) loads in its place. An MT-32 translation layer (auto, on or off) turns a game's MT-32 instrument uploads and drum map into General MIDI as it plays, and its LCD shows the messages games send. Its audio is mixed beside Paula's, so MIDI music and Amiga sound effects play together. Select it with [serial] midi_out = "coppersynth", --midi-out coppersynth, the launcher's I/O Ports tab or the in-window MIDI Out menu, and switch between it and the bit-exact MT-32 without a restart. The synthesizer lives in its own crate, CopperlineHQ/Coppersynth. Contributed by Lee Hobson.
  • A Toccata sound board. [toccata] enabled = true fits a register-accurate MacroSystem Toccata: the AD1848 codec's indexed registers, the board's own 1024-byte FIFO with its half-empty interrupt and little-endian word quirk, all fourteen sample rates from 5512 to 48000 Hz, 8- and 16-bit mono and stereo. The stock open-source toccata.audio AHI driver runs unmodified, so AHI-aware software gets 16-bit sound with no Copperline-specific driver. Contributed by Simon Dick.
  • An MHI MPEG audio decoder board. [mhi] enabled = true fits a Copperline-native Zorro II board serving the Amiga MHI API -- the hardware-decode backend players such as AmigaAMP use -- through a ported mhi_copperline.library. MP3 decodes at essentially zero guest CPU cost on a stock 68000, with working volume, pan, bass, mid and treble, and the bitstream is consumed at the decoded audio's emulated-time rate so warp and replay stay deterministic. The board's register protocol is published as a bus-agnostic contract (docs/internals/mhi.md) that any emulator could implement; the decoder is the pure-Rust Symphonia. Contributed by Simon Dick.
  • Audio stems. An AudioMux now sits between every audio producer and the host, and --audio-stems DIR --audio-stems-mode master,source,channel writes the mixed master, one WAV per source (paula, drivesounds, cdda, mt32, coppersynth, toccata, mhi) and one per Paula channel -- driven by emulated time, so two runs of the same scenario produce byte-identical files that can serve as regression goldens. [audio] stem_granularity sets the default list. Contributed by Simon Dick.
  • The debugger hears every source. The Audio tab's four Paula channel rows gain a row for each line-mixed source the machine has: CD-DA, MIDI (the MT-32 with its control-ROM version, or Coppersynth), Toccata (playback state, latched rate and format, FIFO fill) and MHI (transport, native rate, queue depth, parameter latches), each with a status line, an oscilloscope of its mixed stereo level and a developer mute.
  • CD32 discs boot on the bundled AROS ROM. copperline --factory --model CD32 --insert-cd-after 0 game.cue now cold-boots a CD32 title with no Kickstart. On Copperline's side, Akiko's drive protocol was corrected against Kickstart's and AROS's cd.device -- TOC dump order, command execution paced in emulated time, masked interrupt-request reads, the media-status byte, and DMA that reaches every RAM bank in the low 16 MB rather than the chip-RAM slice -- and the bundled ROM picked up four upstream AROS series Copperline contributed: CD32 CD boot through CDVDFS, an appliance-quiet boot with no requesters on a pad-only machine, the Kickstart-private lowlevel.library requester-gate vectors CD32 titles call blind, and an m68k low-memory series that frees well over a megabyte of chip RAM at boot (a CD32 with a disc in the drive: 164 KiB free before, 1.48 MB after). Pinball Fantasies and Pinball Illusions cold-boot from CD to playable tables on a chip-only CD32.
  • A publisher kit. tools/publish --manifest game.toml builds a dedicated, launcher-free player for one game: a small binary (14.6 MB against the full build's 55) that boots straight into the title with the machine and RAM fixed at build time, no status bar, no debugger, and an in-game menu carrying only what an end user changes -- CRT shader and strength, bezel, fullscreen, controller setup, and save states if the publisher opts in. The distributable bundles the player, the game as a sidecar file, the AROS ROM pair and the license documents for macOS (an ad-hoc-signed .app), Linux and Windows; the game is never embedded in the binary, so publishing a commercial title needs no license exception. The same work gave the full build a gamepad Menu button and a Shader Strength menu row. See docs/guide/publishing.md.
  • Gamepads work out of the box. The bundled SDL_GameControllerDB identifies most pads and gives them a fixed layout -- d-pad and left stick for directions, the south face button for fire or CD32 red, east blue, west green, north yellow, Start for play/pause, shoulders and triggers for reverse and forward, Select/Back or the guide button for the menu -- with SDL_GAMECONTROLLERCONFIG honored for personal mappings and calibration kept as the override. An optional hold-to-quit hotkey quits after a 1.5-second hold with an on-screen countdown, and COPPERLINE_DIAG_GAMEPAD=1 logs every pad event and where its mapping came from.
  • Keyboard and controller navigation of the whole UI. 
  • An About page worth opening, and a launcher sweep. 
  • Graffity RTG boards. [rtg] card = "graffityz2" or "graffityz3" fits Ateo Concepts' Graffity, which reuses the Picasso II+'s CL-GD5428 core under its own manufacturer ID and window layout, with 1 or 2 MB of VRAM and the stock Graffity.card Picasso96 driver. Contributed by Simon Dick.
  • A ZZ9000 SDK crypto accelerator board. [zz9k] enabled = true fits a bundled WASM plugin board register-compatible with the MNT ZZ9000's 
  • Smaller things. 
Hardware accuracy fixes
  • Denise's horizontal window is a flip-flop. 
  • Fixed raster centring. 
  • Akiko drive protocol and DMA. 
  • CD32 pad shift register. d.
Desktop, tooling and platform
  • Windows ARM64 joins the CI matrix and the release assets (Copperline-0.17.0-win-arm64.zip).
  • No C compiler needed. The MHI decoder moved from minimp3 to the pure-Rust Symphonia, removing the last C compile from the default feature set.
  • macOS CoreMIDI. One CoreMIDI client per process lifetime, fixing an intermittent MIDIClientCreate failed that could block MIDI until relaunch (Lee Hobson).
  • Gamepad calibration binds on press with hold-to-skip, so pads that report a control held at rest calibrate correctly; the Open menu and Quit steps are optional (Lee Hobson).
  • A structural clean-up split the oversized window, config and floppy modules and the CLI parser into directories, with every golden render bit-identical before and after; the RTG texture path warns and skips a frame instead of panicking; diagnostic dumps are reproducible; a save-state round-trip test and a nightly WinUAE cputest 68000 conformance workflow join CI.
  • --gdb now sits behind a default-on gdb Cargo feature (the player kit builds without it), and the vAmigaTS harness asserts the 4:3 glass geometry.

Copperline 0.16.0 15/08/2026

  • Direct WHDLoad boot. --whdload game.lha boots 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 
  • A game library. The launcher's WHDLoad page grows into a browsable collection: point it at a folder of games as .lha, .zip or plain directories, and it lists them with details and cover art from OpenRetro, 
  • --run: a developer warp launch. copperline --run build/hello stages 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. .
  • A lide.device IDE board, and ATAPI everywhere. 
  • OFS directory mounts boot Kickstart 1.3. 
  • A Create Image workshop. 
  • Configurable paths, portable mode and a default config.
  • Kickstart ROMs identified by checksum. 
  • The desktop grows an on-screen keyboard and picture controls. 
  • 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
  • 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-after now repeat, so one run can capture a whole sequence.
Hardware accuracy fixes
  • BPLxPT is one live counter. 
  • Wide-fetch origin. 
  • Floating bus on write-only registers. 
  • AGA palette banking. 
  • IDE per-device registers.
  • RAM power-on fill. 
  • Volume labels in Latin-1. 
Desktop, tooling and platform
  • Deterministic control stepping. 
  • Tool windows no longer swallow input. .
  • WasmBoard fault isolation. 
  • Faster host-mounted volumes. 
  • Debugger fixes. 

Copperline 0.15.0 8/08/2026

Amiga Copperline Web GUI.

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.

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.

 

Copperline 0.14.0 1/08/2026

Copperline 0.14.0 is the release where the emulator reaches out of the host machine. It drives real 3.5" floppy drives through DrawBridge, Greaseweazle and SupercardPro controllers, so the machine in the window reads the disks on your desk; it attaches the guest's Ethernet card straight to a host network adapter, so the Amiga sits on the real LAN; and it brings RTG to the 24-bit machines with the Zorro II Picasso II and Picasso II+, so an A2000-class machine gets high-colour Workbench too. Around the machine, the window learns to look like the monitor it deserves -- CRT shaders, screen tints and a 1084-style front bezel -- and picks up rewind, quick-save slots, autofire and input remapping. Underneath, an experimental JIT CPU mode runs accelerator-class speeds, and a WinUAE-inspired debugging suite lands: a chipset-misuse validator, a self-modifying-code detector, per-DMA-channel watchpoints and a memory heat map. As always it is a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights
  • Real floppy drives. Any drive bay can host a real 3.5" mechanism through Rob Smith's FloppyBridge, which is built into Copperline by cargo -- nothing to install. [floppy.df1] bridge = "greaseweazle" (or "drawbridge", "supercardpro") puts the physical drive on the emulated bus: the guest reads, writes and steps the real disk, drive mechanics stay real-time, and the port auto-detects (bridge_port, bridge_cable and bridge_density override). A per-bay launcher page configures it, and bridge serving speeds were subsequently tuned so loading from a real drive is as quick as the mechanism allows. Contributed by Lee Hobson.
  • Picasso II and Picasso II+ RTG. The Village Tronic Picasso II (CL-GD5426) and Picasso II+ (CL-GD5428) are emulated as Zorro II autoconfig boards driven by the unmodified Picasso96 PicassoII.card driver. Because they are Zorro II cards they work with 24-bit CPUs, so RTG Workbench is no longer reserved for the big boxes -- a stock-CPU machine with Zorro slots gets high-colour screens too. [rtg] card = "picasso2plus" selects one, vram = "1M"|"2M" sizes it, and the Z3660 remains the default Zorro III card on 32-bit-bus machines.
  • Bridged Ethernet. The A2065 gains [a2065] net = "bridge", which attaches the guest's complete Ethernet frames directly to a named host adapter (interface = "en0"; list candidates with --list-net-interfaces). The Amiga becomes a first-class citizen of the LAN -- DHCP from your router, static addressing, local servers -- on Linux, macOS and Windows, with Wi-Fi supported best-effort. The user-mode NAT backend from 0.13.0 remains the zero-setup default.
  • Experimental JIT CPU mode. [cpu] jit = true switches a 68020 or later to the m68k core's batch/trace-JIT path: the machine behaves like an ideal accelerator at clock_mhz, one instruction per CPU clock with zero-wait fast RAM -- a 50 MHz 68040 runs on the order of 50 MIPS, and the launcher's clock presets now reach 100 and 200 MHz. The on-chip cache models stay active and chip/slow RAM keep their shared-bus arbitration, as on a real accelerator; cycle-counted chip-level effects no longer line up, which is why it is off by default.
  • Rewind and quick-save slots. [emulation] rewind (or the Rewind menu item) records the whole machine at an interval into a bounded memory budget, and Cmd+Z / Alt+Z steps it back -- a 512K A500 buys minutes of history. Ten numbered quick-save slots sit alongside: Cmd/Alt+<digit> saves, Cmd/Alt+Shift+<digit> loads, no dialog, no file to name.
  • The window becomes a monitor. A GPU shader pass over the display offers three built-in CRT presets -- scanlines, mask and crt -- or loads your own WGSL file, mixed in by shader_strength. [display] bezel (toggle live with Cmd+M / Alt+M) frames the picture in a 1084-style monitor front, with a Copperline badge and a power LED that follows the guest's /LED line and burns brighter while the audio filter is engaged; a HDD LED lights on host-folder filesystem access. [display] tint filters the screen through black-and-white, green or amber monochrome phosphor, or sepia. All of it is window-only: screenshots, frame dumps and headless captures are never shader-processed, tinted or framed.
  • Input quality-of-life. Autofire pulses a held fire button at 3-30 Hz on emulated time (scripted input is never gated, so replays stay exact). The new Input Mapping window edits the keyboard-joystick and shortcut maps with one-meaning-per-key validation. Host mouse sensitivity is adjustable from quarter to quadruple speed, and a mouse-capture policy chooses between click-to-grab, grab-on-focus and manual-only (Cmd+G / Alt+G), fixing three capture defects along the way.
  • A debugging suite. The headless debugger and debugger GUI gain a WinUAE-inspired set: a custom-register access validator that reports chipset misuse with the PC that caused it ([debug] validate_chipset) backed by a last-writer table, a self-modifying-code detector (detect_smc), bus-error injection, per-DMA-channel and PC-qualified watchpoints, blitter/floppy/keyboard hardware-misuse checks, and a memory heat map tab in the Frame Analyzer showing where the frame's traffic lands. The console dumps ExecBase scheduler state and struct Task. Scripting gains absolute pointer positioning -- --mouse-to-after SECS X Y steers the pointer to a screen pixel via a sprite-0 servo -- and the control protocol adds capture.region_digest, a run-until-stable-frame target, watch qualifiers in break.list, and scheduled input that survives session reconnects.
  • Host volumes under Kickstart 1.3. Host-directory (hostfs) volumes now mount under Kickstart 1.3, so a plain 1.3 machine can read and write a folder on the host. Contributed by Simon Dick.
  • Browser build. The web build gains PAL/NTSC machine selection with overscan and tint display controls, remembers the Kickstart across visits, names its save states alongside the quick slot, and holds a screen wake lock so a long game does not dim the phone. The hosted copperline.dev/try page installs as a PWA and boots offline.
  • Performance. A four-part optimisation pass over the render and chipset hot paths -- DDF arbitration, planar row conversion, caching of stable display and DMA line work, and idle/repeated-frame presentation -- cuts host CPU cost across the board, and an idle launcher no longer spins a busy redraw loop.
Hardware accuracy fixes
  • HAM select timing. A mid-line write that flips HAM lands in Denise's colour-selection phase, not the bitplane phase, matching measured hardware -- fixes stale colours in HAM demos that switch mid-screen.
  • Manual bitplane writes. CPU/Copper-written BPLxDAT batches snap to the serialiser's word-load grid, fixing displays that hand-feed the serialiser (the Hamazing Hexagon left edge).
  • 68020 pipeline. The 020 charges its pipeline refill on taken branches per the datasheet tables, with the DBcc refill folded into its table entry (Cubic Dream's 020 timing).
  • Sprite DMA. A DMA sprite line disarmed by a CTL write before its HSTART is cancelled, as on real Denise (the Hybris status panel).
  • 68000 split writes. A 68000's word write split across the services board's MMIO doorbell fires the doorbell correctly (Simon Dick).
  • Z3660 blitter. Planar blits honour their minterm, and P2D NOTSRC looks up the complemented pen (Bernie Innocenti).
  • Presentation. Geometry latches across border-only frames (no more one-frame jumps when a loader blanks the screen), and the live TV view centres on the captured aperture; the NTSC TV-aperture crop extends to standard 60 Hz scans.
Desktop, tooling and platform
  • Launcher. CD folds into a Storage tab with footer sub-page navigation, hard disks gain a Boot Priority sub-page, unavailable settings dim in place instead of vanishing, and a pass of cosmetic tidy-ups lands across the tabs. In the config, a hard drive can be a table -- unit0 = { path = "wb.hdf", bootpri = 6 } -- to set boot priority and directory-mount volume names.
  • Audio filter override. [audio] audio_filter = "auto"|"on"|"off" (and Cmd+A / Alt+A) forces Paula's low-pass filter regardless of the guest, with the power LED reflecting it as on the real machine (Lee Hobson).
  • Window state. Fullscreen and status-bar visibility persist in the config, manual resizes survive status-bar toggles, tool windows resize correctly, Wayland resizes apply synchronously (Bernie Innocenti), and cursor hits map correctly under fractional display scaling.
  • The 68k core is now the published m68k crate. The vendored fork moved to crates.io as m68k 0.3, so Copperline builds against the published package (Ben Letchford). The Flatpak moves to Freedesktop SDK 25.08 (Ben Letchford).
  • Bundled AROS ROM refreshed to upstream, picking up the NTSC boot fix and an input-event buffering fix.
  • CI. Functional boot smokes now run on Linux, macOS and Windows -- including the released artifacts -- A2065 networking is exercised in CI, and the Windows checks fan out from a shared build.

Copperline 0.13.0 25/07/2026

Copperline 0.13.0 is the release where the emulated machine grows past the classic chipset. It gains RTG graphics through the Z3660 Zorro III board, so Workbench runs in high-colour, high-resolution Picasso96 screens; it fills in the big-box memory maps with Ramsey motherboard fast RAM and CPU-slot accelerator RAM; it puts a real Ethernet card on the bus with a user-mode NAT backend that needs no privileges or setup; and it dials a telnet BBS from the browser over emulated serial. A deep pass on 68040/68030 exception dispatch under the MMU, together with a corrected 31 kHz programmable-scan display path, is enough to boot Debian Linux/m68k to a pixel-sharp login prompt. As always it is a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights
  • RTG graphics. The Z3660 accelerator's FPGA RTG core is emulated as a Zorro III autoconfig board with a 128 MB window, driven by the unmodified open-source Z3660.card Picasso96 driver: Workbench in 8, 16 and 32-bit RTG modes, blitter operations, DRAWLINE, planar-to-chunky and planar-to-direct blits, hardware-sprite compositing including wide and doubled sprites, native-resolution presentation with chipset fallback, and pixel-centre screenshot downscaling. The card is selected with [rtg] card or the launcher's System tab, and comes fitted by default wherever the machine can host one. Contributed by Bernie Innocenti.
  • Linux/m68k boots. A pass over the 68040/68030 core takes exception dispatch through the MMU the way real silicon does, and fixes the MOVES fault frame, writeback data, invalid-fetch faults, autovector handling, and FSAVE/FRESTORE across all control addressing modes. Together with the display work below, Debian 3.1 for m68k goes from dying in a Line-F handler to running a console at a login prompt on an A4000/68040.
  • Correct 31 kHz programmable-scan display. The Denise H counter restarts at 0, DIW-relative placement scales properly in super-hi-res, and presentation anchors at the HSYNC pulse like a real multisync monitor -- the Linux amifb console was losing about 22 characters off every line. Super-hi-res colour output is also fixed: each 35 ns sample resolves through the full palette instead of a two-bit pair encoding, which is what turned Tux green and fringed text red and cyan, and a double-width 35 ns canvas makes programmable SHRES pixel-sharp.
  • Big-box memory maps. Ramsey-controlled motherboard fast RAM sits in 32-bit local space on the A3000 and A4000, sized by Kickstart's own probe ([memory] motherboard, 1M-4M in 1M steps or 8M/12M/16M). The A4000 gains its $04000000-$06FFFFFF motherboard expansion space up to 64 MB, and any 32-bit-CPU profile -- including an accelerated A1200 -- gains CPU-slot accelerator fast RAM up to 128 MB ([memory] accelerator).
  • Ethernet that just works. The A2065 gains a slirp-style user-mode NAT backend ([a2065] net = "nat", --a2065-net nat, or the launcher's I/O Ports tab): outbound IPv4 for the guest with no privileges, no host drivers and no setup, identically on Linux, macOS and Windows. The guest sees 10.0.2.15/24 with a built-in BOOTP/DHCP server. The Am7990 LANCE model was hardened until a real SANA-II a2065.device works end to end.
  • Telnet BBS over emulated serial. A browser WebSocket bridge with a full telnet NVT layer runs a BBS from the browser build through plain serial.device, and the desktop dials out natively with [serial] mode = "tcp-connect" / --serial-connect HOST:PORT. Dialling is gated on the guest asserting DTR and going quiet, so boot chatter cannot leak into a session as phantom keypresses.
  • Configurable floppy speed. [floppy] speed / --floppy-speed runs drives at 100 (default), 200, 400 or 800 percent, or 0 for turbo. The percentage modes stay bit-identical per cell and turbo still runs through the ordinary bit engine; drive mechanics -- spin-up, stepping, settle -- always stay real-time, so the acceleration cannot break loaders that time the mechanism.
  • Authentic drive sounds. Step, seek and spin voices were re-synthesized against spectra measured from real A500 and A600 mechanisms: a step clack with its rebound cluster, seek buzz as a measured harmonic comb, and revolution-locked spin texture. No sample data ships; it is all synthesis.
  • The browser build became a real frontend. Machine model select (A500 or AGA A1200, live-switchable carrying ROM and disks across the rebuild), save states as downloadable .clstate files interchangeable with desktop builds plus an IndexedDB quick slot that survives a page reload, gamepads in both ports for two-player, pause and screenshot-to-clipboard, a front-panel status strip with LEDs and a track counter, a copperline.json site config file, a Kickstart list select for site-served ROMs, mono audio, and fullscreen that keeps 4:3 on any page shell.
Hardware accuracy fixes
  • AGA display. Alien Breed II's horizontal scroll jump is fixed by modelling how Agnus masks an off-grid DDFSTRT to the fetch grid on wide FMODE, folding BPLCON1 scroll taps into the early masked fetch start (band map corroborated against FS-UAE). The FMODE SSCAN2 high-bit mask is modelled in the rendered, manual and collision sprite paths, so sprite HSTART $165 correctly aliases $065.
  • 68020 timing. The MC68020 model now follows the datasheet Cache Case and Worst Case tables, requiring the whole instruction stream including extension words to be cached before it can claim the Cache Case, and models the A1200 Alice data-return phase.
  • Battery clock presence. The $DC0000 page's byte lanes are modelled -- the MSM6242 is a 4-bit part on the low lane, and the unfitted odd lane reads $40 as measured on real A500 hardware -- so Kickstart 1.3 stops inventing a date out of DMA noise.
  • Byte-swapped ROM images. ROMs stored in EPROM-programmer byte order are detected from the header and swapped on load, so they boot like their conventional twins. Hi/lo split chip pairs remain unsupported.
  • CD32 NVRAM. Saved games are no longer silently lost when the backing-file write fails: the dirty bit clears only after a successful write, so the flush retries on the next I2C STOP.
  • Machine profiles built directly rather than through the config pipeline now derive their Agnus and Denise revisions and CPU-implied FPU and cache defaults, which is why the browser A1200 was detecting only half its chip RAM.
  • Zorro bus-master DMA reaches motherboard and accelerator RAM, so an A4091 finds its SCSI units on the A4000 profile, and the host-filesystem services board decodes the new RAM banks.
Desktop, tooling and platform
  • Fullscreen and status bar. Borderless fullscreen toggles with Cmd+F / Alt+F, and the status bar hides with Cmd+Shift+F / Alt+Shift+F, the display scaling up into the reclaimed space.
  • Headless capture needs no display server. --screenshot-after and --dump-frames drive a windowless loop with no winit event loop or window at all, so capture runs work over SSH, in sandboxes, and from agent sessions where creating a window would abort or hang. Screenshots are byte-identical to the old path, and a run whose machine halts early now errors instead of hanging.
  • Crash reports. Panics write a copperline-crash.txt report next to the executable with version, host, timestamp, message and a forced backtrace -- Windows double-click launches previously lost the panic entirely.
  • Windows launcher fix. Pressing Run on the configuration screen no longer crashes Windows builds; the main thread is linked with an 8 MiB stack instead of the 1 MiB Windows reserves by default. This was the known issue that shipped with 0.12.0.
  • Launcher. Serial and Parallel merge into one I/O Ports tab, the printer becomes a selectable device with an output-file browser, Host Mounts moves under Hard Disk, the A2065 gains a picker, and a config's unreadable ROM keeps its underlying cause in the status line instead of reading like progress.
  • Security and dependencies. anyhow, memmap2 and quick-xml move for RUSTSEC advisories, and the WASM plugin host moves from an unmaintained wasmtime pin to the 36 LTS tip.
  • Bundled AROS ROM refreshed to upstream master, picking up m68k boot-time optimizations, the boot-animation rendering fix, Workbench and console speedups, and a fix for the Boot Options menu crashing on machines with RDB drives on an A4091.

 

Copperline 0.12.0 18/07/2026

Copperline 0.12.0 takes the emulator to new places: it now runs in the browser as a WebAssembly build, boots the big-box A3000 and A4000 with their onboard SCSI and IDE controllers, mounts host directories as fully writable AmigaDOS volumes, and grows a JSON-RPC control protocol for scripted live sessions. On the hardware side this release adds SCSI CD-ROM drives with CD audio, puts any controller device in either game port, plugs printers and audio samplers into the parallel port, and lands a round of chip-bus mirroring and display accuracy fixes. As always it is a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights

  • Copperline in the browser. A WebAssembly build of the emulator runs entirely client-side, and is live at copperline.dev/try: it boots the bundled AROS ROM out of the box, loads your own Kickstart and disk images from the page (or straight from URL query parameters), and supports drag-and-drop, a keyboard joystick, touch input with a trackpad-style mouse and an on-screen joystick, and fullscreen on iPhone Safari. A prefilled GitHub bug-report link captures the machine state when something goes wrong.
  • A3000 and A4000 machine profiles. The big-box Amigas boot, each off its own built-in disk controller: the A3000 brings the Super DMAC with the onboard WD33C93 SCSI bus, the A4000 the motherboard IDE port at $DD2020, and both the Ramsey memory controller, the Fat Gary bus controller, and a motherboard battery clock. The profiles are new and still incomplete, but both boot AmigaOS from their native controllers. A new rom_scsi_device_disable knob skips the ROM's scsi.device when its bus has no drives, saving the boot-time probe of an empty bus.
  • Writable host-directory mounts. The [[filesys]] HOSTFS volumes introduced in 0.11.0 are no longer read-only: the guest now reads and writes the host's files directly, with Amiga protection bits, comments, and datestamps persisted to .uaem metadata sidecars, host UTF-8 filenames mapped to AmigaDOS Latin-1, delete-protection honored, and ACTION_EXAMINE_ALL supported for modern directory scanners. The services board moved from A-line traps to MMIO registers, packets are routed by explicit mount unit, and the launcher gained a Host Mounts tab with per-mount read-write/read-only access control (readonly = true exports a directory write-protected).
  • Copperline Control Protocol. A JSON-RPC 2.0 interface over loopback TCP (--control, with the copperline-ctl client) drives live sessions from scripts and AI agents: breakpoints and stepping, input injection, media swaps, screenshots, save states, and streaming observability (frame, serial, interrupt, and media event subscriptions with bounded queues), plus runtime-bracketed instruction traces and waveform captures. --control-gui attaches the same server to a windowed session. See docs/debugger/control.md.
  • SCSI CD-ROM drives. A [scsi] unit path ending in .cue or .iso attaches a CD-ROM drive at that SCSI ID on any of the supported controllers. CD audio tracks play through the machine's audio output, and discs swap at runtime via the status-bar CD buttons, drag-and-drop, or --insert-cd-after.
  • Any controller in either game port. Both game ports now take any device, as on a real Amiga: mouse, joystick, cd32 pad, analogue paddles on the POT pins, or none ([input] port1/port2, --port1/--port2, hot-pluggable from the runtime menu). Scripted input flags aim at either port, --pot-after scripts analogue positions, and two-mouse and two-joystick setups get sensible host keyboard mappings.
  • Parallel-port peripherals. The Centronics port is now a modelled connector with pluggable devices: a printer that captures the raw strobed byte stream to a host file, and an 8-bit audio sampler fed from a host capture device -- the emulated equivalent of a classic parallel-port digitizer cartridge, usable from AudioMaster, ProTracker, OctaMED, and friends. The BUSY/POUT/SEL status lines are driven by the attached peripheral.
  • Deterministic guest clock. rtc_time seeds the battery clock to a fixed instant and ticks it in emulated time, so the guest boots to the same time on every run -- the way to test time-dependent guest software reproducibly. rtc_frozen pins the clock exactly, and the control protocol reads and sets it at runtime.

Hardware accuracy fixes

  • Chip bus. Chip RAM mirrors across the full chip window by Agnus address reach, so loaders that park the stack above the installed chip RAM see the mirror instead of a bus fault (an Action Replay-style boot guru was the regression example). Custom registers mirror into the empty chip-register decode space the way Gary resolves them, which un-sticks Kickstart 1.2's memory-sizing probe (yellow-screen boot).
  • Denise display path. OCS/ECS BPLCON1 scroll nibbles count lo-res pixels at every resolution, fixing a first-column wrap in hi-res Kickstart 2.05 boot screens; early hi-res DDF content renders inside an early display window (ECS overscan programs); and sprite DMA fetches land in a hardware-true display-latch view, so stale sprite rows can no longer leak into later frames.
  • Agnus identity. Every ECS Agnus reports the same chipset ID, matching real chips.
  • Filesystem/DOS ABI. ACTION_SEEK offsets are sign-extended, negative-offset seeks from big files now land where AmigaDOS expects.
  • POT circuit. The POT counter and pot-line models were finished alongside the analogue controller support.

Copperline 0.11.0 12/07/2026

Copperline 0.11.0 focuses on hardware fidelity and performance: host directories can now be mounted (and booted) as native AmigaDOS volumes, the blitter's BLTPRI bus fence and the 68000's microcode write ordering are modelled much more closely, sprite serialization and several display paths were fixed against cross-emulator and real-hardware references, frame-time spikes on slower hosts were eliminated, and a golden-render timing-probe suite now guards chipset timing in CI. As always it is a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

The display regressions noted as known issues in 0.10.0 are fixed in this release.

Highlights

  • Host directories as AmigaDOS volumes. New [[filesys]] config mounts host directories as HOSTFS volumes through an autoconfig services board and a resident guest handler: full file I/O with FFS path semantics, file attributes from host permissions and .uaem sidecars, optional write protection, host path-escape hardening, warm-reboot survival, and bootable volumes via bootpri — a Workbench directory on the host can now boot the machine directly.
  • Blitter BLTPRI bus fence. BLTPRI now asserts BLS against the CPU the way Agnus does: the CPU is fenced off the chip bus during a blit's warm-up window, BLS pressure follows the blitter's per-slot micro-cycle, a blit with no channels enabled asserts no fence, and line-blit startup was shortened. This class fixes MFM-decoding trackloaders that rely on exact CPU/blitter interleaving (a Jim Power boot crash was the regression example).
  • 68000/68010 microcode write-ordering pass. A long series ordering register writes, ALU and address-calculation tails, and internal clocks against prefetch and bus sync the way the microcode does: EOR/EXG/BCD/Scc/MOVEM/ADDX/SUBX/MOVE USP/MOVEA/MOVE from SR, delayed SR writes, 68010 SR read ordering and long shift timing, CHK trap timing, multiply and division internal clocks, quick and bit ops, and 68020 Bcc long-displacement gating. The external RESET instruction is now modelled as a true warm reset.
  • Sprite serialization fixes. Denise emits a sprite's first pixel one lo-res pixel after the horizontal comparator match (measured against FS-UAE and vAmiga with new ruler probes), and a DATA-armed sprite keeps serializing on every line — across frames — until SPRxCTL disarms it. Together these improve 180 of 186 vAmigaTS sprite cases and fix long-standing demo sprite placement bugs.
  • Frame-spike elimination. Profiling on an i5-class machine (issue #99) removed per-colour-clock table copies in the bus hot path, per-pixel palette copies and a quadratic sprite-multiplexer scan in the renderer, and added p50/p90/p99/max frame-time reporting to --benchmark-until. Worst-case core frame time on the profiled workload dropped from 100.8 ms to 16.1 ms and audio underruns disappeared.
  • Golden-render CI suite. Every cargo test --release run now boots the committed timing-test/ probe binaries on the bundled AROS ROM and compares their rendered output pixel-for-pixel against blessed references: CPU/chip-bus timing rows plus DDF/DIW, sprite-position, blitter-pace, collision, and audio-enable probes. Intentional timing-model changes must re-bless the renders, so every chipset timing diff is reviewed as an image diff.

Hardware accuracy fixes

  • Copper. A post-WAIT wake-up must land on a colour clock free of fixed DMA; copper-sourced sprite repositions carry the WAIT-comparator lookahead; the closed-DIW border repaint follows per-pixel COLOR00 writes (fixes raced copper-chunky effects).
  • Agnus DMA and blitter. Fixed DMA slots are aligned with the hardware DAS table, BLS pressure is gated by the blitter micro-cycle, line blitter startup timing was shortened, and VHPOSR readback lead was tuned against the probe rows.
  • Denise display path. Bitplane scroll-in starts from empty line state; a BPLCON1 scroll covering an off-grid DDFSTRT catches the floor reload slot; hi-res bitplane content flushes at the 2H-196 window edge; AGA border sprites are suppressed during border blank; sprite DMA owns same-line reuse data.
  • Renderer and presentation. The renderer no longer synthesizes a picture for a line whose fetch never ran (phantom-line artifacts in overscan scrollers), and the TV aperture is black-padded past the framebuffer edge instead of repeating the last column.
  • Floppy. DSKLEN arming no longer waits for drive-ready: a spinning-up drive arms disk DMA normally, as on real hardware (fixes trackloader disk swaps that double-write DSKLEN right after motor-on, e.g. Shadow of the Beast disk 2). Step-click sound is gated on the /TRK0 sensor and the stepper mechanism floor.
  • Save states. Mid-blit state serializes deterministically (two saves of the same machine are byte-identical), backed by a new regression test that resumes a mid-blit save under live Copper and interrupt load and compares the continued timeline byte-for-byte.

Other improvements

  • timing-test/ gained the ddfprobe suite, manual/DMA sprite position probes, blitter-pace and audio-enable probes, and a 96-sector boot loader; tools/rowphase.py performs content-anchored per-beam-row comparison across Copperline, vAmiga, and FS-UAE output.
  • The debugger gained headless exception catchpoints, address filtering for CPU read traces, and low-memory blit crash diagnostics.
  • CI now runs the golden-render suite in parallel, boots DiagROM as a smoke test, and keeps the Windows/macOS/Linux packaging workflows as release build checks.
  • Documentation covers the [[filesys]] mounts, the unified SCSI configuration, and the expanded timing-probe workflow.

Copperline 0.10.0 7/07/2026

Copperline 0.10.0 is the largest release so far: 68060 support, expanded 68030/68040 MMU and cache behaviour, a much richer debugger, A4091 SCSI board emulation, host MIDI/TCP serial bridges, selectable audio output, zipped floppy images, and another broad pass over CPU, Copper, Agnus, Denise, Paula, CIA, blitter, floppy, and display timing. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights

  • 68060 CPU model. Copperline now exposes a 68060 CPU profile with control registers, supervisor-stack behaviour, scalar timing, branch-cache modelling, LPSTOP, 68060 MMU specifics, the reduced 060 FPU surface, unimplemented-instruction traps, 060 exception frames, superscalar pairing, and launcher/config/docs support.
  • Deeper 68030/68040 MMU and cache coverage. The m68k core now models 030/040 translation, TTRs, access-error frames, ATC behaviour, write-protect and permission faults, MOVE16 alignment behaviour, and 68040 instruction/data caches, backed by expanded CPU fixture tests.
  • Debugger console and frame-analysis workflow. The debugger gained a command console with clipboard paste, memory/register inspection and mutation, HUNT, TRACE START/STOP, AmigaOS task/segment introspection, catchpoints, recent-PC history, heuristic call-stack walking, reverse-run targets, richer watchpoint attribution, IO Map, Video, Break, Memory, Frame Analyzer, a Paula audio debugger tab with per-channel mutes and scopes, Copper stepping, and beam-scrubbing improvements.
  • A4091 Zorro III SCSI board. A new board model covers nibble-wide autoboot ROM exposure, DMA and SCSI FIFOs, NCR/Symbios SCRIPTS register moves, memory moves, interrupts, looped SCSI pins, bus reset, drive scan/mount, and diagnostics under COPPERLINE_DIAG_A4091.
  • Host I/O improvements. Paula serial can bridge to host MIDI or a bidirectional TCP sink, live audio can select output devices and mono/stereo shaping, Cmd/Alt+Shift+A cycles audio output, and ZIP-wrapped floppy images are supported.

Hardware accuracy fixes

  • CPU timing and interrupt delivery. 68000/68010 IPL poll placement, interrupt-dispatch idle clocks, STOP wake timing, 68010 prefetch/refill behaviour, MOVES timing, MOVE-from-CCR timing, and Class 2 MOVE-to-absolute-long prefetch order were tightened against microcode and cputest coverage.
  • Copper pipeline and write landing. WAIT/SKIP/COPJMP execution now follows the fetch pipeline more closely, dormant COPxLC writes retarget the Copper PC, skipped MOVEs still pass illegal-register decode, vertical-blank COP1LC restart happens at the hardware position, and CPU/Copper custom-register write effects are referenced from their carrying chip-bus slot.
  • Agnus/Denise fetch, display, and sprite timing. The DDF sequencer now models start/stop flip-flops, raw below-hard-start fetch origins, FMODE=0 placement, DIW comparator anchoring, BPLCON0 propagation, overprogrammed BPU suppression, sprite DMA slots/register state, HAM/dual-playfield invalid priority cases, and collision over enabled planes.
  • Blitter micro-cycles. Normal and line-mode blits now follow a per-slot micro-cycle protocol, including BLTPRI/CPU starvation interactions, fixed DMA slot contention, line micro-programs, startup cycles, and completion/IRQ prediction with active Copper DMA.
  • Paula, CIA, and floppy behaviour. Paula audio moved to the HRM channel state machine, AUDxEN disable is deferred to the word boundary, POTxDAT counters tick at H-sync, CIA accesses synchronize to the E clock, CIA IRQ pins and TOD alarm/TOD bug behaviour were refined, floppy step pulses observe a mechanism floor, and empty drives stay in no-media state.

Other improvements

  • The project now has a copperline library crate, split bus/video/window submodules, reusable render-frame buffers, --version, and clearer unknown-option/config-validation errors.
  • Regression coverage grew with WinUAE cputest runner infrastructure, TomHarte SingleStepTests in CI, 68000-68060 CPU fixtures, vAmigaTS comparator tooling, image-regression hooks, and additional hardware-behaviour unit tests.
  • Documentation covers the expanded CPU/MMU/cache model, debugger console/workflows, MIDI/audio configuration, headless test workflows, A4091 and Zorro behaviour, timing details, and the reorganized source layout.

Copperline 0.9.0 29/06/2026

Copperline 0.9.0 brings a large 68881/68882 FPU accuracy pass, explicit joystick input selection, no-ROM save-state startup, hard-disk volume-name overrides, and another round of CIA, Paula, keyboard, Denise, sprite, bitplane, RTC, and display-timing fixes. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights

  • 68881/68882 FPU accuracy. The in-tree m68k core now has an 80-bit extended register file, pure-Rust softfloat paths, packed-decimal real support, exact FMOVECR constants, memory/immediate-source monadic operations, extended-precision exp/log/trig/inverse-trig/hyperbolic kernels, FPCR rounding propagation, FPSR exception bytes, and exact FMOD/FREM quotient handling.
  • Explicit joystick input mode. Copperline now has a status-bar toggle, menu entry, launcher control, and [input] joystick = "gamepad" | "keyboard" config setting so keyboard joystick emulation and physical gamepad input are selected deliberately.
  • No-ROM save-state startup. --load-state can restore a snapshot without opening the original ROM file first, using a placeholder only long enough to let the state replace the machine. Loading a state over the configuration screen now installs live host audio instead of keeping the silent placeholder sink.
  • Hard-disk volume-name overrides. Directory and generated hard-disk images can now expose configured AmigaDOS volume names, with launcher and TOML round-tripping for IDE and SCSI drives.
  • Local-time RTC reporting. The battery-backed RTC now reports host local time where the platform exposes it, while COPPERLINE_RTC_FIXED_SECS remains deterministic for replay and debugging.

Hardware accuracy fixes

  • CIA timer one-shot behavior. CIA one-shot timers now keep the START bit visible through the auto-started interval, matching software that polls the running state to time the one-shot.
  • Floppy motor timing. Drive motor spin-up/spin-down state is now forwarded through the controller path used by disk DMA and status reporting.
  • Keyboard KDAT handshake. The emulated keyboard MCU now accepts short but real Amiga-side KDAT-low handshake pulses after a byte, instead of requiring the longer nominal HRM pulse width.
  • Paula POTxDAT counters. POTGO-driven high pins now hold the matching POTxDAT counter at zero, matching the way software reads fully charged paddle/fire-button lines.
  • Display fetch origin and latches. Early hi-res DDFSTRT output is word-aligned, late-DDF first words sample complete plane latches, manual sprite data latches survive position retiming, and per-frame collision accumulation is gated by CLXDAT observation.

Other improvements

  • The vendored m68k fork moved from vendor/m68k to crates/m68k and is packaged as copperline-m68k, making the local dependency boundary explicit.
  • Menu popups size themselves to the widest visible label.
  • Documentation covers joystick input selection, drive volume-name overrides, FPU model details, KDAT handshake timing, POTxDAT behavior, and the updated m68k crate layout.

Copperline 0.8.0 27/06/2026

Copperline 0.8.0 adds the no-config machine launcher, external Zorro board plugins, A2065 networking, directory hard-disk filename encoding fixes, startup state-load fixes, and another round of Denise, Agnus, sprite, bitplane, display-window, and save-state render timing improvements. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights

  • Machine-configuration launcher. A no-options launch now opens a full configuration screen, also available from the menu. It can edit machine profile, chipset, CPU, memory, ROM, floppy, hard-disk, CD, Zorro, audio/video, and emulation settings, then run, load, save, or reset them through the same TOML schema as hand-written configs.
  • External Zorro board plugins. Functional Zorro boards now sit behind a ZorroDevice boundary, and WASM plugin boards can expose deterministic read/write/tick/interrupt behavior with optional DMA, config, file-resource, and networking capabilities.
  • A2065 networking. Copperline includes an in-tree Commodore A2065 Ethernet board with Am7990 LANCE programming-model coverage and a loopback backend. Networking remains a host resource and is documented as non-deterministic while traffic is active.
  • Schema-driven plugin settings. WASM board manifests can declare string, bool, int, file, and enum options. The launcher renders those schemas as editable controls and writes per-board config overrides.
  • Startup state loading. Loading a save state from the launcher now replaces the powered-off placeholder timeline cleanly, closes the launcher, wakes the event loop, and reanchors pacing before the first restored frame.

Hardware accuracy fixes

  • Sprite DMA and pointer timing. Agnus sprite DMA frontiers now carry across the frame boundary, sprite pointer retargeting distinguishes same-line descriptor restarts from pending-data retargets, and vertical blank inhibition prevents pre-fetch SPRxPT writes from retargeting descriptors that hardware has not fetched.
  • Denise sprite and palette latches. Active sprite POS writes retime horizontal starts without cancelling the latched data stream, manual SPRxDATA/SPRxDATB writes run in the sprite comparator domain, and OCS/ECS COLORxx replay lands in Denise final palette/output timing.
  • Bitplane fetch and shifter handoff. Late DDF rows start output at the first fetched word, per-plane output waits for each plane fetch slot, BPL1DAT handoff no longer leaks stale shifter tails, and manually written BPL1DAT data stops when real DMA replaces the shifter contents.
  • Display-edge replay. HAM display-window history, overscan COLOR00 handling, AGA BPLCON1 delay replay, and display-window edge pixels were tightened so stale palette or shifter state does not leak across row boundaries.
  • Restored-frame rendering. Loading a state mid-field preserves the hardware timeline while withholding partial render-capture buffers until a complete field is available for screenshots, frame dumps, and presentation.

Other improvements

  • Directory-as-hard-disk filename handling now preserves host-path encoding more robustly.
  • The offline Flatpak cargo source list was regenerated for the new WASM runtime dependency set.
  • Documentation covers the launcher, Zorro/WASM plugin ABI, A2065 config, networking determinism caveats, save-state device snapshots, and the updated display timing model.

Copperline 0.7.0 26/06/2026

Copperline 0.7.0 expands the machine model catalogue, improves the debugger workflow, adds controllable warp-speed frame skipping, wires up macOS DMG release builds, and tightens another set of Copper, Agnus, Denise, blitter, sprite, floppy, and display-timing edge cases. It remains a hardware-behavior release: compatibility fixes model the underlying Amiga subsystems rather than individual titles.

Highlights

  • Expanded machine profiles. The default A500 profile now models the common Rev 6A board, A500OCS covers early OCS A500/A2000-style hardware, A500Plus uses the 8375 Agnus and RTC, and a new A1000 profile models the bootstrap ROM plus writable control store Kickstart load path.
  • Debugger workflow improvements. The debugger and frame analyzer are independent tool windows, breakpoints can be conditional and counted, the UI can step over/out and poke memory or CPU registers, and the GDB monitor gained stepover and finish helpers.
  • Warp-speed controls. Warp mode can now retire multiple emulated frames per presented frame, with 2x, 4x, 8x, 16x, and Max limits available from config, menu, and keyboard shortcuts.
  • Distribution improvements. A macOS workflow now builds and attaches a universal .dmg with the app bundle and bundled AROS ROM. Homebrew remains the source-build install path for macOS users who prefer it.
  • Floppy-drive wiring controls. Config and CLI options can connect one to four floppy mechanisms, including empty external drives for scripted or delayed disk insertion.

Hardware accuracy fixes

  • Copper and custom-register behavior. Copper lists can live at chip RAM address zero, COPCON byte writes mirror onto the word latch so byte bit operations can set CDANG, and Copper/manual sprite palette timing is aligned with the display beam.
  • Agnus and Denise display timing. DDF register precision is now derived from the Agnus revision, low-res DDFSTOP/DDFSTRT edge cases use the correct fetch origin, same-line DIW start writes update the display origin, and CPU palette writes replay at their beam-time positions.
  • Sprites and bitplanes. Manual BPL1DAT writes can enable sprites on scanlines outside the vertical DIW, direct sprite data writes are not clipped by the DMA vertical window, and Copper colour writes stay phase-aligned with the bitplane pixels they recolour.
  • Blitter datapath. Normal-mode A/B barrel-shifter carry is initialized at the start of a new blit while still carrying across rows within that blit.
  • Machine-specific behavior. A1000 reset and LED/audio-filter behavior now follow the writable-control-store machine model, and external floppy drive connection/reset behavior is exposed through the hardware model instead of inferred only from inserted media.

Other improvements

  • Untagged UI builds show the short git commit in the window title and About panel.
  • The frame analyzer can keep the debugger open beside it and supports drag/cursor navigation of selected beam slots.
  • Documentation and example configs cover A1000 booting, A500 Rev 6A defaults, floppy-drive wiring, warp limits, debugger controls, and the macOS DMG install path.

Copperline 0.6.0 23/06/2026

Copperline 0.6.0 adds a chip-bus frame analyzer, a remote GDB debugger frontend, Zorro identification metadata, Linux Vulkan presentation checks, and another pass over display, sprite, floppy, and live-audio timing. It is still a hardware-behavior release: the fixes model the underlying Amiga subsystems rather than individual titles.

Highlights

  • Chip-bus frame analyzer. A new debugger tool window visualizes per-frame chip-bus ownership, DMA spans, CPU waits, blitter pressure, and display fetch activity for timing investigations.
  • Remote GDB debugging. Copperline can now expose the emulated CPU to a GDB frontend for source-level and machine-level debugging outside the built-in UI.
  • Zorro board identification. Autoconfig metadata can now identify Copperline boards using the registered manufacturer ID, board ID, and a version-derived serial number.
  • Linux presentation hardening. Linux GUI presentation now requires Vulkan explicitly, with CI smoke coverage for the required X11/Vulkan runtime libraries.

Hardware accuracy fixes

  • Agnus and Denise display timing. TV-visible horizontal overscan is modelled, bitplane pre-fetch no longer scrolls into the first line of a DMA block, and sprite pointer/fetch timing is tightened around DMA descriptor updates.
  • Chip-bus and audio pacing. Bitplane ownership planning avoids redundant work, pending sprite descriptor origins are preserved, and live audio starvation during heavy display effects is reduced.
  • Floppy media. Padded UAE-1ADF AmigaDOS tracks are accepted without treating the padding as part of the logical track payload.
  • Zorro Autoconfig. The built-in identification board reports Copperline metadata through hardware-derived Autoconfig fields.

Other improvements

  • The debugger documentation now covers the chip-bus analyzer and remote GDB flow.
  • Homebrew release documentation was refreshed around formula checksum and tap validation steps.
  • The README and guide now document the Linux Vulkan presentation requirement.
  • Documentation credits and internals notes were updated for the new timing and diagnostic workflows.

Copperline 0.5.0 21/06/2026

Copperline 0.5.0 is a compatibility-focused release with a broad pass over OCS/ECS and AGA display timing, sprite replay, HAM rendering, floppy image handling, and live-audio pacing. It also includes the first external contribution: thanks to @sonnenscheinchen (jbl007) for improving directory scans by filtering UAE metadata files.

Highlights

  • OCS/ECS and AGA display compatibility. Copper-driven palette changes, wide and clipped DIW/DDF windows, bitplane fetch timing, and AGA sprite palette timing are modelled more closely.
  • HAM rendering fixes. HAM hold state now advances through hidden DMA samples, lo-res edge fetches stay aligned at the right edge, and palette timing no longer smears copper-gradient scenes.
  • Sprite replay fixes. Manual sprite data/control writes, SPRxPOS comparator timing, sprite DMA rewrites, sprite reuse, and zero-height DMA descriptors now follow the hardware timing more closely.
  • Better media defaults and scans. The default A500 memory profile is now 512K chip / 512K slow RAM, PAL-sized ADF images get matching track gaps, and directory scans ignore UAE metadata files.

Hardware accuracy fixes

  • Denise and Agnus display timing. OCS DIW/DDF edge cases, per-block bitplane DMA, DDF-start plane count latching, BPLCON1 scroll retiming at the DIW edge, and separate COLORxx vs AGA BPLCON4 sprite-palette timing are tightened.
  • HAM and palette replay. Hidden DMA samples advance HAM colour history, early lo-res DDF fetches expose complete groups without leaking stale right-edge pixels, and same-line COLOR writes use the Denise palette-output phase.
  • Sprites. SPRxPOS writes use the Denise comparator domain, manual sprite writes preserve compare-boundary output, sprite DMA pointer rewrites seed the next descriptor fetch, and zero-height descriptors stop cleanly.
  • Blitter and bus timing. Per-block bitplane DMA, blitter carry/latch behaviour, and interrupt unmask handling are more accurate across fixed-DMA and copper-heavy scenes.
  • Floppy media. PAL-length ADF track gaps are represented more accurately.

Other improvements

  • Reverse-frame debugger controls were added to the UI.
  • Headless diagnostics now include cached HAM, manual bitplane, frame-pixel, palette-row, sprite-capture, and sprite-pixel tools for timing investigations.
  • Live audio prebuffer pacing was improved.
  • Documentation and example configuration comments were refreshed around machine profiles, diagnostics, save-state behavior, and timing internals.
  • All COPPERLINE_* test and utility environment reads now go through the cached envcfg snapshot helper.

 

Copperline 0.4.0 20/06/2026

Copperline 0.4.0 adds reverse debugging, keyboard joystick control, optional realtime-like scheduling for latency-sensitive threads, and a broad hardware-timing pass across AGA display, 68020/68030 chip-bus behavior, Paula disk DMA, and save-state resume.

Required config changes

None. Existing configs should continue to load. New settings are optional.

Highlights

  • Reverse debugging. A deterministic snapshot/input replay ring now powers reverse-step support in the debugger and a headless last-writer reverse watchpoint for memory corruption investigations.
  • Keyboard joystick input. Cmd+J / Alt+J cycles joystick input mode between auto, keyboard, and gamepad. The default now derives from available host input, with keyboard as the auto fallback.
  • Opt-in realtime-like scheduling. [emulation] realtime_priority = true raises the pacer and audio callback priority where the host OS allows it, while leaving the renderer at normal priority.
  • Save-state resume follows the saved machine. Loading a state now reconfigures the host-facing emulator around the saved machine descriptor before continuing.

Hardware accuracy fixes

  • 68020/68030 cache and chip-bus timing. On-chip caches are modelled by default, 020 instruction timing is recalibrated, 68020+ chip-bus writes use the three-clock write-posted cycle, and chip/custom reads account for data-return waits.
  • AGA blitter and display timing. AGA blitter/chip-bus timing, Denise captured-playfield timing, wide-FMODE bitplane fetch counts, and wide-open DIW presentation are tightened.
  • Sprite timing. Copper-repositioned held sprites, SPREN-off held display, attached sprite presentation, manual sprite position writes, BPLCON4 sprite page nibbles, and BPLCON4 sprite timing are modelled more closely.
  • AGA scroll decode. BPLCON1 AGA scroll fields are decoded separately.
  • Paula disk DMA. Disk-read DMA now preserves the correct word phase through Paula.
  • Video presentation. The TV lower crop is tightened by one row.

Other improvements

  • Auto-generated filenames now use local YYYYMMDDHHmmSS timestamps.
  • The example config is easier to scan and documents TOML escaping for Windows paths.
  • Reverse debugging, savestate determinism, realtime priority, AGA sprite diagnostics, and the timing-test workflow are documented.
  • The Homebrew formula is updated to v0.4.0 with the final tag tarball checksum.

 

Vox populi

Ten artykuł nie byl jeszcze komentowany:(

Dodaj komentarz!!!!

Nick
Email
Www
Komentarz
 
wstecz10/10/2026 22:50
Inne treści związane z tematem
[GameBase] GameBase AMIGA (Seya) Update 96.5 8/10/2026 [GameBase] GameBase AMIGA (Seya) Update 96.5 8/10/2026
Pojawiła się nowa aktualizacja gamebase dla Amigi autorstwa Sey'a (przy okazji wydaje on również dwujęzyczny magazyn REV'N'GE, więc raczej się nie nudzi). Jeśli ktoś decyduje się zacząć od nowa, pozostawić sobie dumpy obrazów kickstart - dla przyzwoitości odświeżone GameBase dla Amigi nie posiada w sobie kickstartów. I chyba nie trzeba przypominać, że ...
[Multi] Denise 2.9 28/08/2026 [Multi] Denise 2.9 28/08/2026
Denise jest emulatorem "cycle exact" mikrokomputera Commodore C64, a od poprzedniej wersji również i Amigi:). Dokładne odwzorowanie pracy C64, przejrzysta konfiguracja powinna ucieszyć każdego, komu z nieznanych mi przyczyn nie odpowiada czy to Hox64, czy też WinVice. Czy dogoni WinUAE? Wątpie, przy zapale Toni Willena to prawie niemożliwe;).
[AMIGA] Winuae 6.1.0 Beta 16 27/09/2026 [AMIGA] Winuae 6.1.0 Beta 16 27/09/2026
Nowa testowa wersja WinUAE. WinUAE to jeden z najpopularniejszych emulatorów komputerów Commodore Amiga na system Windows. Dzięki niemu możesz uruchamiać klasyczne gry, programy i demoscenę z modeli takich jak Amiga 500, 1200 czy 4000 bez posiadania oryginalnego sprzętu. Program oferuje bardzo dokładną emulację procesorów Motorola 68k, chipsetów OCS, ECS i ...
[AMIGA] WinUAE 6.0.3 Final 03/03/2026 [AMIGA] WinUAE 6.0.3 Final 03/03/2026
Kolejna pełna wersja WinUAE. Po bardzo szybkiej serii poprawek mamy kolejny kamień milowy w emulacji komputerów Amiga.
Do ściągnięcia
copperline-1.0.0-x86 64.appimage
copperline-1.0.0-x86 64-tools.tar.gz
copperline-1.0.0-x86 64-net-helper.tar.gz
copperline-1.0.0-win-x64.zip
copperline-1.0.0-win-arm64.zip
copperline-1.0.0-sha256sums.txt
copperline-1.0.0-manual.pdf
copperline-1.0.0-macos-universal.dmg
copperline-1.0.0-libretro-windows-x64.zip
copperline-1.0.0-libretro-macos-arm64.zip
copperline-1.0.0-libretro-linux-x64.zip
Ostatnio dodane pliki

Retro T-shirt

Retro T-Shirt Koronis Rift 61,10zł - męski podkoszulek
Retro T-Shirt The Goonies 58,75zł - męski podkoszulek
Dodatkowe informacje
W ramach wolnego czasu odtwarzam stare magazyny komputerowe i prowadzę serwis emulacyjny try2emu. Jeżeli uważasz, że moja publiczna działalność możesz postawić mi kawę, a kawę lubię;).
Postaw mi kawę na buycoffee.to
WhitePress Polska
Newsy Linkownia Emulatory na PC Wideoteka Screenshoty Bajtek Reduks Ready.Run Kreator okładek na kasety Kreator kalendarzy Alpha

© Try2emu 1999 - 2026 | Krzysztof 'Faust' Karkosza Kontakt Polityka Prywatności OWU