Copperline 0.11.0: boot from a host directory
0.11.0 is out, five days after 0.10.0. The most visible change is that host directories now mount, and boot, as native AmigaDOS volumes. The rest is fidelity and performance work. The blitter's BLTPRI bus fence and the 68000's microcode write ordering are modelled more closely. Sprite serialization was fixed against cross-emulator and real-hardware references. Worst-case frame times on slower hosts dropped by a factor of six, and a golden-render probe suite now guards chipset timing in CI.
This release fixes the display regressions listed as known issues in 0.10.0. As always, when something doesn't run, the fix models the underlying Amiga subsystem rather than special-casing the title.
Host directories as AmigaDOS volumes
A new [[filesys]] config section mounts a host directory as
an AmigaDOS volume, served live through an autoconfig services board and
a resident guest handler. No disk image is built, so the guest always
sees the current host contents. Protection bits, comments and datestamps
come from host permissions and UAE-style .uaem sidecars. The
volumes survive a warm reboot. A bootpri above the floppy's
puts them ahead in the boot-device vote, so a Workbench directory on the
host can boot the machine directly.
The volumes are read-only for now, and writes fail as they would on a write-protected disk. When the guest needs to write, the older IDE / SCSI directory route is still available, but it remains session-only.
Bernie Innocenti
(@codewiz)
contributed the filesystem: the services board, guest handler, typed DOS
ABI layer and boot support. Bernie also added a serial PTY sink
([serial] mode = "pty") and unified the SCSI configuration
(see the config note below).
The blitter fence
BLTPRI, the "blitter nasty" bit, 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, the fence pressure follows the blitter's per-slot micro-cycle, and a blit with no channels enabled asserts no fence. This matters for MFM-decoding trackloaders that rely on exact CPU / blitter interleaving. The regression example was a Jim Power boot crash.
68000 microcode write ordering
A long series of changes orders register writes, ALU and
address-calculation tails, and internal clocks against prefetch and bus
sync the way the microcode does. It covers EOR, EXG, the BCD ops, 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
divide internal clocks, the quick and bit ops, and 68020 Bcc
long-displacement gating. The external RESET instruction is
now modelled as a true warm reset.
Sprites, measured with a ruler
Two sprite serialization fixes. Denise now 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 they improve 180 of the 186 vAmigaTS sprite cases and fix long-standing demo sprite placement bugs.
Hunting frame spikes
Issue #99
reported audio underruns on an i5-class machine. Profiling found three
hot spots: per-colour-clock table copies in the bus hot path, per-pixel
palette copies in the renderer, and a quadratic sprite-multiplexer scan.
All three are gone, and --benchmark-until now reports
p50 / p90 / p99 / max frame times so spikes stay measurable. On the
profiled workload, worst-case core frame time dropped from 100.8 ms to
16.1 ms, and the underruns disappeared.
Golden renders in CI
Every cargo test --release run now boots the committed
timing-test/ probe binaries on the bundled AROS ROM and
compares their output pixel for pixel against blessed reference renders.
The probes cover CPU and chip-bus timing rows plus DDF / DIW,
sprite-position, blitter-pace, collision and audio-enable. An intentional
timing-model change has to re-bless the renders, so every chipset timing
change is reviewed as an image diff.
The smaller fixes
- A post-WAIT Copper wake-up lands on a colour clock free of fixed DMA, and the closed-DIW border repaint follows per-pixel COLOR00 writes. Together these fix raced copper-chunky effects.
- DSKLEN arming no longer waits for drive-ready: a spinning-up drive arms disk DMA normally, as on real hardware. This fixes trackloader disk swaps that double-write DSKLEN right after motor-on. Shadow of the Beast disk 2 was the example.
- The renderer no longer synthesizes a picture for a line whose fetch never ran (phantom lines in overscan scrollers). The TV aperture is black-padded past the framebuffer edge instead of repeating the last column.
- Mid-blit save states serialize deterministically: two saves of the same paused machine are byte-identical. A regression test resumes a mid-blit save under live Copper and interrupt load and compares the continued timeline byte for byte.
- Plus bitplane scroll-in from empty line state, the hi-res flush at the 2H-196 window edge, AGA border sprites suppressed during border blank, and more in the full notes.
Config changes
One breaking change: the experimental [a4091] section from
0.10.0 is gone. Both SCSI boards now live under [scsi],
selected with a controller key: "a2091" (the
default) or "a4091". An existing A2091 setup keeps working
unchanged. Save states are compatible with 0.10.0 in both directions,
because the format version did not change.
Get it
Builds for macOS, Linux and Windows are on the release page, and the Homebrew tap is updated.
- Andrew Hutchings (LinuxJedi) · linuxjedi.co.uk