< all news

Copperline 0.18.0: The CD32 FMV module, calibrated drive timing, a modem on Paula, and import-uae

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 and FMV-aware games play on an emulated CD32 as they do with the real cartridge in the rear expansion bay. The CD32 drive model has been calibrated against a real PAL CD32 with a probe disc and a filmed cold boot. The emulated cold boot is now within 50 milliseconds of the real machine's, and Fightin' Spirit, which relies on the exact boot-time memory layout, boots from its unmodified disc for the first time.

CDXL video now plays from cooked ISOs, Nero NRG images mount directly, and cue sheets accept WAVE and MP3 audio tracks. A new copperline-import-uae tool converts WinUAE, Amiberry, and FS-UAE configurations, and a Hayes-compatible modem answers on the serial port. Run-ahead trims input latency, and AGA sprite, fetch, and palette emulation is pixel-exact against the vAmigaTS references. As always, compatibility fixes model the underlying Amiga subsystems rather than applying per-title hacks.

The CD32 Full Motion Video module

Setting [machine] fmv_rom fits Commodore's MPEG cartridge as the first Zorro II board in a CD32. We model the C-Cube CL450 video processor and LSI Logic L64111 audio decoder interfaces, and the module's onboard RAM and ROM. The analogue video keying path is modelled too: it mixes decoded MPEG video with the Amiga's own graphics output and scales Video CD frames across the full capture aperture.

MPEG-1 video is decoded by a safe pure-Rust port of plmpeg (CopperlineHQ/plmpeg) and MPEG Layer II audio by Symphonia. FMV titles run their full video sequences: Cannon Fodder's filmed intro plays before the game loads, and the sequence runs deterministically through to gameplay. MODE2/2336 and MODE2/2352 tracks are handled in CUE, NRG, and CHD images.

You supply the 256 KiB v40.30 cartridge ROM, as with a Kickstart ROM. For now, booting a CD with the module fitted needs a Commodore Kickstart ROM. The cartridge carries its own Kickstart-era cd.device, which takes over the boot path from the bundled AROS ROM. An upstream AROS update to handle this is in progress.

A CD32 drive calibrated against real hardware

Until now, CD32 drive timing in emulators has mostly been estimated. For this release, we built a probe disc (tools/cd32-probe, in the repository with the measurement tables in its README) and filmed cold boots on a real PAL CD32 to measure it.

The new drive model includes:

  • A measured spin-up gate on the first lead-in dump (8.8 seconds cold, 3.5 seconds warm).
  • TOC dumps that complete before subsequent queued commands can act.
  • A measured seek curve that replaces the old single-slot seek approximation.
  • TX DMA that folds to its 256-byte page the way Kickstart's producer expects.
  • 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 seconds filmed on real hardware. The boot animation never runs while a bootable disc is spinning up, so chip RAM is laid out as it is on the real machine. Fightin' Spirit boots unpatched to the credits, and discs inserted at the idle screen or mid-animation now boot as they do when the lid is closed on a real CD32.

CDXL from cooked ISOs and expanded CD formats

Reading from a bare .iso image now synthesizes complete raw Mode 1 sectors on the fly, including the EDC and P/Q parity bytes. CDXL video now streams from cooked ISO files, and CDTV-trademark boots work on the CD32 profile, with cached TOC transport paced independently of optical sector delivery.

Nero .nrg images can now be mounted anywhere a CUE sheet is accepted. CUE sheets can reference compressed WAVE and MP3 audio tracks, and the PREGAP and POSTGAP directives are supported. Ripped games with compressed soundtracks play without manual decompression or re-mastering.

Import UAE configurations: copperline-import-uae

Simon Dick (@sidick) contributed copperline-import-uae, a standalone tool that converts WinUAE, Amiberry, and FS-UAE configurations into native Copperline TOML.

It maps machine models, CPU and FPU choices, RAM layouts, chipsets, Kickstart ROMs, floppy drives (converting FS-UAE swap lists into playlists), hard drives, directory mounts, CD images, RTC, audio, joystick port mappings, and expansion boards such as [lide], [scsi], and [toccata].

Approximations are commented above the generated lines, and unsupported options are listed at the end of the output file, so you can see what was skipped on purpose and what might need manual attention. Copperline's own configuration loader validates the result before it is written. See docs/import-uae for usage.

A Hayes modem on Paula's serial port

[serial] mode = "modem" attaches a Hayes AT-command modem to Paula's serial port. Terminal software such as Term and NComm, and BBS doors, expect AT dial commands, result codes, carrier detection, and the +++ escape sequence. They now get modem responses rather than a raw byte pipe.

The modem handles inbound connections (RING, S0 auto-answer, ATA) and dials out using a config-file phonebook. It negotiates Telnet NVT to reach modern BBS servers over TCP, and saves AT&W profiles to a sidecar file. A WiModem232 compatibility layer, verified against the original hardware manual, lets published community setup guides work unchanged. For automated testing, a scripted-session transport (--serial-session) replays dial-out sessions byte for byte in headless runs. Contributed by Simon Dick (@sidick); see the modem documentation for details.

Run-ahead input latency reduction

[emulation] run_ahead_frames (0 to 4 frames, set with --run-ahead or under Emulation Settings → Run Ahead) trims perceived input latency below that of real CRT hardware. On each display refresh, Copperline commits one normal frame and takes an in-memory snapshot. It then silently runs the requested future frames with the latest controller inputs, presents the final result, and rolls back to the snapshot.

Run-ahead pauses itself whenever an emulated frame could touch host state that cannot be rewound, such as writable floppy or hard disk images, an active serial connection, session recording, or connected CCP clients. The menu shows the reason. If a speculative burst cannot restore its anchor, the feature disables itself rather than corrupting the timeline.

AGA and display fidelity

Lisa's sprite serializer is now modelled in 35 ns clock samples. SuperHires (SHRES) sprites (SPRES=11) are now handled separately from hires sprites, reproducing the 4:4:2:1 width staircase photographed on a real Amiga 1200. Both SHRES playfield halves also survive priority sorting and pixel composition.

Alice's wide-fetch address phases are now modelled, including FMODE 10 page-mode duplication and unaligned aliasing. So are per-resolution DMA bandwidth ceilings, Lisa's banked BPLCON2.RDRAM palette readback, and the one-hires-pixel COLOR write delay. In the vAmigaTS test sweep, the two worst AGA test cases dropped from 16.179% and 70.931% mismatch to 0.000%. All AGA golden probe tests in the repository are now cross-validated against vAmiga 5.0b1.

The browser build grows a second writable drive

The WebAssembly build at copperline.dev/try now has DF1 alongside DF0, and floppy images are writable in browser memory. Multi-disk installations and disk-to-disk saves work client-side in the browser session, and modified disk images can be downloaded at any time.

Hardware accuracy fixes

  • Vertical display window set/reset flop: DIWSTRT.V sets the window, DIWSTOP.V clears it, and the last raster line resets it against standard line limits. Empty windows (DIWSTRT.V == DIWSTOP.V) never open, and flop state survives save states and frame wraps. Kang Fu's interlaced CD32 menus and Nexus 7's scene transitions now render correctly.
  • AGA sprite palette banks: Corrected a transposition where even sprites read colours through BPLCON4's ESPRM nibble and odd/attached pairs through OSPRM. Copper fetches can now use the line-end refresh slot, and the blitter deadline predictor mirrors the refresh carve-out (verified against Nexus 7).
  • DDFSTRT rewrite timing: Moving DDFSTRT behind the beam mid-line now stops the comparator matching, so the line's fetch is dropped. This fixes plane desyncs in Microcosm's control panel.
  • Dual-playfield sprite priority: Sprites are judged against the winning playfield's BPLCON2 priority code rather than a fixed field, fixing the bin Junior hides behind in Chuck Rock II.
  • COPJMP strobe reads: Strobe reads now fire and return floating-bus residue, smoothing animations in Sleepwalker. First-line BPLCON1 scrolling fills bitplane DMA blocks from pre-window fetches, removing the corner notches in Super Skidmarks on CD32.
  • HAM8 resolver: Preserved the history-dependent resolver, fixing a 0.17.0 regression where an indexed-cache shortcut broke HAM8 scenes.
  • Paula disk sync: WORDSYNC reads re-frame on every DSKSYNC match. Disk DMA armed with no disk inserted stays pending until real flux transitions arrive, rather than completing on phantom data.
  • Akiko & AROS: CDINTREQ reads return raw latches, RX DMA wraps within its 256-byte page, and data-track audio plays return real firmware errors. The bundled AROS ROM was updated with upstream fixes for cd.device interrupts, ciab.resource handshakes, and stale IORequest handling.
  • Picasso II BitBLT: Corrected transposed NOR and NAND raster op encodings, BLT address counter stopping positions, and source-end derivation (contributed by Bernie Innocenti).

Desktop, tooling and platform

  • Fuzzing & parser hardening: New fuzz targets for untrusted media headers (CHD) and save-state streams prevent unbounded allocations and validate compressed maps.
  • Supply-chain CI: Added cargo deny checks for dependency licences and advisories, automated MSRV builds, and scheduled workspace dependency updates.
  • cputest conformance: Nightly WinUAE CPU test suites now propagate their verdict directly to CI exit codes.
  • m68k 0.11.6: Core update with driveless machine smoke testing in CI.
  • Launcher improvements: Reorganized Storage, Video/Display, and Serial tabs (boot priorities grouped with drives, dedicated host and port inputs for serial).
  • Gamepad & UI: Added a Quit entry to the main menu, hold-Select to quit on standard pads, and alternate directional bindings during calibration.

Contributed this cycle

Simon Dick (@sidick) built two of this release's headline features: the copperline-import-uae configuration converter and the Hayes/WiModem232 serial modem. He also bundled the open-source lide.device boot ROMs and added per-slot drive settings.

Lee Hobson (@hobbo91) overhauled the launcher's Storage, Video/Display, and Serial pages, aligning SCSI rows, separating window and picture controls, and improving gamepad navigation.

Bernie Innocenti (@codewiz) fixed the Picasso II RTG BitBLT NOR/NAND raster operations and address-counter semantics.

Compatibility notes

Save states from 0.17.0 do not load in 0.18.0. The FMV module, calibrated drive timing, and display window flip-flop all changed the serialized machine state, and the state version moves from 61 to 70. Re-create your snapshots after upgrading.

CD32 and CDTV default to zero floppy drives ([floppy] drives = 0), matching the original hardware. To fit a floppy drive on these models, add drives = 1 to your config or pass --floppy-drives 1.

lide.device IDE boards now autoboot out of the box. Fitted boards default to the bundled open-source ROMs by Matt Harlum (LIV2). Each drive slot now has its own drive0..drive3 key with its own boot priority.

Configuration changes are additive. No existing keys were removed or renamed. New options include [machine] fmv_rom, [emulation] run_ahead_frames, [serial] mode = "modem", and .nrg / WAVE / MP3 cue audio tracks.

Get it

Pre-built packages for macOS, Linux, and Windows (including Windows on ARM) are on the GitHub release page, and the Homebrew tap has been updated. You can also run the emulator in your browser at copperline.dev/try.

If you enjoy Copperline and want to support its development, test hardware, and benchmarking discs, consider backing the project on Patreon.

- Andrew Hutchings (LinuxJedi) · linuxjedi.co.uk