vAmigaTS comparator: correct horizontal anchor, un-mask the dumps#104
Merged
Conversation
The sweep comparator was calibrated with X_SHIFT=16, derived from cases that turned out to be blank screens (shift-invariant) or periodic test patterns (which alias modulo their stripe period). The real reason 16 scored well on the remaining cases was that Copperline's dumps were saved through the default TV-bezel presentation, which blanks the first 16 framebuffer columns (and the deep vertical overscan rows): the shift dodged the mask instead of aligning the frames. vAmiga's regression cutout starts at colour clock 0x31 (RegressionTester X1 = 4 * 0x31), the same beam position as Copperline's framebuffer origin, so aligned frames need no x shift at all. Verified against mid-line copper COLOR00 write steps, which land on identical raw x in both dumps, and against aperiodic bitmap/text content. - tools/vamigats-compare.py: X_SHIFT 16 -> 0 (with a --xshift override for isolating placement classes; DDFSTRT $30 lores pictures currently sit 2 px right of vAmiga's, a real divergence tracked separately). - tests/vamiga_ts.rs: run the emulator with [display] overscan="full" and COPPERLINE_HCENTER=0 so the raw dump carries neither the TV mask nor the content recentring shift. With both fixes a copper-bar case (CIA/TOD/tod/latch2) compares pixel-perfect (0.000%), and bucket averages drop across the sweep (Copper/Wait 14.9 -> 1.0, Blitter/sblit 10.9 -> 1.1, Copper/oldJump 25.9 -> 9.2, sprite buckets 4-18 -> 1-6); the remaining large scores are real divergences.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two calibration fixes for the vAmigaTS sweep pipeline (PR #100):
tools/vamigats-compare.py: X_SHIFT 16 -> 0. vAmiga's regression cutout starts at colour clock 0x31 (RegressionTester::X1 = 4 * 0x31), which is the same beam position as Copperline's framebuffer origin - aligned frames need no horizontal shift. The old value of 16 came from calibration cases that turned out to be blank screens (shift-invariant) or striped patterns (which alias modulo their period). Verified with mid-line copper COLOR00 write steps: they land on identical raw x in both emulators' dumps.tests/vamiga_ts.rs: dump the full unmasked field. The harness saved screenshots through the default TV-bezel presentation, which blanks the first 16 framebuffer columns and the deep vertical overscan rows. That mask is what made X_SHIFT=16 look right - it dodged the blanked columns instead of aligning frames. The harness now runs with[display] overscan="full"andCOPPERLINE_HCENTER=0, so the dump carries neither the TV mask nor the content-recentring shift.A
--xshift Noverride was added to the comparator for isolating placement classes.Impact
--xshift 2to isolate; tracked separately).Full sweep regeneration with the fixed harness is running; the updated triage will inform the next round of fixes.