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
BPLCON2priority 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:
CDINTREQreads 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 forcd.deviceinterrupts,ciab.resourcehandshakes, 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 denychecks 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