Copperline v0.9.0 is released. An Amiga emulator written in Rust, built around a vendored copy of the pure-Rust m68k CPU core, with a pixels + winit window for video and stdout for serial. It started life with the modest goal of booting DiagROM far enough to show a menu; it now boots Kickstart and runs timing-sensitive OCS and AGA software from the regression set at real speed.Features:
Cycle-driven timing core. The chip bus is arbitrated per colour clock between refresh, display/sprite/disk/audio DMA, the Copper, the blitter, and CPU accesses; the Copper and blitter are scheduled per DMA slot with the hardware per-word bus sequences, and 68000 interrupt-recognition latency is modelled. Real-hardware reference numbers come from the cross-emulator disk in timing-test/.
OCS, ECS, and AGA, with independent Agnus/Denise revisions and machine profiles from the A500 to the A1200, plus CDTV and CD32. Boots the bundled AROS ROM out of the box, as well as Kickstart 1.3 / 2.05 / 3.1 and DiagROM v2.0, and runs the current timing-sensitive OCS and AGA regression set at real speed.
Configurable CPU (68000 / 68EC020 / 68020 / 68030 / 68040) and clock, with an optional 68881/68882 FPU (default-on for the 68040).
Peripherals: a bit-timed keyboard (6500/1 MCU), mouse, USB gamepad (via the pure-Rust gilrs, no SDL2), 4-channel Paula audio, floppy (ADF / ADZ / DMS, read-only SCP), Gayle IDE, A2091 SCSI, and CDTV/CD32 CD.
Tooling: an in-window debugger, an interactive chip-bus frame analyzer, remote GDB support, deterministic save states, input recording/replay, and headless screenshot/frame-dump capture -- the deterministic core makes every replay byte-identical.
Copperline changelog:
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.
Required config changes
None for existing valid config files. The new joystick input setting and hard-disk volume-name fields are optional; omitted configs keep the existing defaults.
Save states are versioned, and 0.9.0 uses a new state format for 80-bit extended FPU register snapshots. Older state files are refused with the usual version error instead of being loaded across incompatible layouts.
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.
Download: Copperline v0.9.0 x64
Source: Here
0 Comments
Post a Comment