You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
tools/compare_amitools_suite.py (PR #50) has been the single highest-value bug-finding tool this project has: across a handful of sessions it found and led to fixing real volamos bugs in dos.library (#45, #46, #47, #55), exec.library/formatting (#48), and the math libraries (#51, #53) -- more real bugs than fixtures/'s own hand-authored corpus (tools/compare_vamos.py, ~10 fixtures) has found in its entire history. It also correctly attributed several other differences to vamos's own divergences (#49, #52, #54) rather than volamos bugs.
But it's local-only, permanently -- amitools is GPLv2, volamos is MIT/Apache-2.0, so test/bin/test/src/test/data can never be vendored or run in CI (see that script's own module doc). Its bug-finding power comes from covering real library surface fixtures/ doesn't touch at all: AnchorPath/MatchFirst/MatchNext, ReadArgs/FindArg, Seek, RawDoFmt's less-common format specifiers, and all four math libraries (mathffp/mathtrans/mathieeedoubbas/mathieeedoubtrans). None of that is exercised by anything that runs in CI today.
Proposal
Grow fixtures/'s own corpus (hand-authored .s/vasm sources + gen_*.py, exactly the existing pattern in fixtures/README.md) to cover the same kinds of calls amitools' corpus exercises -- not by copying amitools' own test source (that would just re-import the GPL problem), but by writing new, project-owned equivalents from the NDK autodocs directly, the same way the existing fixtures were built. Candidates, roughly in the order amitools' corpus proved valuable this session:
Each new fixture should go through tools/compare_vamos.py (the existing CI-safe two-way harness) from day one, so growing this corpus directly grows CI coverage -- no separate promotion step needed, unlike compare_amitools_suite.py's GPL-blocked one.
Multi-version and multi-implementation verification (own harness, not GPL-blocked)
Because this corpus is volamos's own (not GPL-encumbered), it can be run against more than just vamos:
Multiple real Kickstart versions via Copperline -- 1.3, 2.0, 3.0, 3.1, and 3.2 -- not just the single 3.1 (40.72) ROM this session's investigations used. Use Copperline's [lide] device (a lide.device-compatible Zorro II IDE board) for this, not [ide]: [ide] needs a Gayle or A4000 IDE port, so it only works on the A600/A1200/A3000/A4000 models this session used, but [lide] "works on any machine model", explicitly including Kickstart 1.3, since it's a Zorro II expansion board rather than chipset-integrated IDE -- some of the target Kickstart versions predate Gayle IDE entirely. Same directory-mount-to-in-memory-FFS/OFS trick applies ([lide] drive0 = { path = "...", name = "...", bootpri = N, filesystem = "ffs"|"ofs" } -- a genuine in-memory volume with a real Rigid Disk Block, discarded on exit; see the MatchFirst/MatchNext's ap_Buf strips the device prefix entirely instead of only deduplicating a doubled one #46/MatchFirst/MatchNext: APF_DirChanged (bit 6) set by volamos but never by vamos -- needs real-hardware arbitration #58 fix commits for the [ide] version of this recipe), so the same fixture corpus can run against every Kickstart version through one consistent storage config. This would catch real version-skew bugs (a call behaving differently across OS versions, or a fixture that accidentally only passes on the one version it was written against) that a single-ROM check can't. Only Kickstart 3.1 (40.72) is confirmed available locally right now (~/src/amibake/assets/hyperion); 1.3/2.0/3.0/3.2 need sourcing before this dimension can run end-to-end -- not a blocker for starting the corpus itself (target 3.1 first, matching volamos's own stated Phase 1 compatibility target), but worth tracking as a follow-up once fixtures exist to run against them.
AROS as a further, zero-setup oracle -- Copperline bundles its own AROS Kickstart replacement by default (no ROM file needed, works out of the box), and as a free/open reimplementation it sidesteps any Kickstart-ROM redistribution question entirely, unlike the real Hyperion-copyrighted ROMs (which stay local-only, never bundled with volamos, same posture as this project's existing amitools/AmiBake assets).
Non-goals
Not a replacement for compare_amitools_suite.py -- keep running that locally too; it's still valuable for cross-checking against a second, independently-authored corpus and for the specific compiler-variety angle (gcc/sc/vc/agcc) fixtures/ doesn't have.
Not attempting to match every one of amitools' ~34 test programs one-for-one -- prioritize by what's found real bugs already (see the ordering above) over exhaustive parity.
Suggested first step
Start with the AnchorPath fixture -- it's the single area that's found the most real bugs (#14, #46, #58) and is completely unrepresented in fixtures/ today.
Motivation
tools/compare_amitools_suite.py(PR #50) has been the single highest-value bug-finding tool this project has: across a handful of sessions it found and led to fixing real volamos bugs indos.library(#45, #46, #47, #55),exec.library/formatting (#48), and the math libraries (#51, #53) -- more real bugs thanfixtures/'s own hand-authored corpus (tools/compare_vamos.py, ~10 fixtures) has found in its entire history. It also correctly attributed several other differences tovamos's own divergences (#49, #52, #54) rather than volamos bugs.But it's local-only, permanently -- amitools is GPLv2, volamos is MIT/Apache-2.0, so
test/bin/test/src/test/datacan never be vendored or run in CI (see that script's own module doc). Its bug-finding power comes from covering real library surfacefixtures/doesn't touch at all:AnchorPath/MatchFirst/MatchNext,ReadArgs/FindArg,Seek,RawDoFmt's less-common format specifiers, and all four math libraries (mathffp/mathtrans/mathieeedoubbas/mathieeedoubtrans). None of that is exercised by anything that runs in CI today.Proposal
Grow
fixtures/'s own corpus (hand-authored.s/vasm sources +gen_*.py, exactly the existing pattern infixtures/README.md) to cover the same kinds of calls amitools' corpus exercises -- not by copying amitools' own test source (that would just re-import the GPL problem), but by writing new, project-owned equivalents from the NDK autodocs directly, the same way the existing fixtures were built. Candidates, roughly in the order amitools' corpus proved valuable this session:AnchorPath/MatchFirst/MatchNext/MatchEnd-- a wildcard scan, a non-wildcard direct match, and at least oneAPF_DODIRrecursive descent (this is exactly the kind of test that would have caught MatchFirst/MatchNext's ap_Buf strips the device prefix entirely instead of only deduplicating a doubled one #46 and surfaced MatchFirst/MatchNext: APF_DirChanged (bit 6) set by volamos but never by vamos -- needs real-hardware arbitration #58's still-open root-report-ordering question in CI, rather than needing an ad hoc Copperline session to find it).ReadArgs/FreeArgs/FindArg-- template parsing,/M,NAME=ABBREValiasing.Seek/Read/Writeround-trip including an out-of-rangeSeek()(the exact Seek() doesn't reject a target position beyond end-of-file #47 regression).RawDoFmt's%b/%xpaths (the exact RawDoFmt's %b (BSTR) format doesn't convert the BPTR to a real address #45/Investigate: RawDoFmt/Printf %x hex digit case (lowercase in volamos, uppercase in vamos) -- needs real-hardware check #48 regressions).mathffp/mathtrans/mathieeedoubbas/mathieeedoubtrans-- at minimum the FFP encoding round-trip and the argument-order quirks (SPSub/SPDiv/SPPow) that mathffp.library/mathtrans.library (single-precision FFP): results diverge extensively from vamos -- needs dedicated investigation #53 covered.Each new fixture should go through
tools/compare_vamos.py(the existing CI-safe two-way harness) from day one, so growing this corpus directly grows CI coverage -- no separate promotion step needed, unlikecompare_amitools_suite.py's GPL-blocked one.Multi-version and multi-implementation verification (own harness, not GPL-blocked)
Because this corpus is volamos's own (not GPL-encumbered), it can be run against more than just
vamos:[lide]device (alide.device-compatible Zorro II IDE board) for this, not[ide]:[ide]needs a Gayle or A4000 IDE port, so it only works on the A600/A1200/A3000/A4000 models this session used, but[lide]"works on any machine model", explicitly including Kickstart 1.3, since it's a Zorro II expansion board rather than chipset-integrated IDE -- some of the target Kickstart versions predate Gayle IDE entirely. Same directory-mount-to-in-memory-FFS/OFS trick applies ([lide] drive0 = { path = "...", name = "...", bootpri = N, filesystem = "ffs"|"ofs" }-- a genuine in-memory volume with a real Rigid Disk Block, discarded on exit; see the MatchFirst/MatchNext's ap_Buf strips the device prefix entirely instead of only deduplicating a doubled one #46/MatchFirst/MatchNext: APF_DirChanged (bit 6) set by volamos but never by vamos -- needs real-hardware arbitration #58 fix commits for the[ide]version of this recipe), so the same fixture corpus can run against every Kickstart version through one consistent storage config. This would catch real version-skew bugs (a call behaving differently across OS versions, or a fixture that accidentally only passes on the one version it was written against) that a single-ROM check can't. Only Kickstart 3.1 (40.72) is confirmed available locally right now (~/src/amibake/assets/hyperion); 1.3/2.0/3.0/3.2 need sourcing before this dimension can run end-to-end -- not a blocker for starting the corpus itself (target 3.1 first, matching volamos's own stated Phase 1 compatibility target), but worth tracking as a follow-up once fixtures exist to run against them.Non-goals
compare_amitools_suite.py-- keep running that locally too; it's still valuable for cross-checking against a second, independently-authored corpus and for the specific compiler-variety angle (gcc/sc/vc/agcc)fixtures/doesn't have.Suggested first step
Start with the
AnchorPathfixture -- it's the single area that's found the most real bugs (#14, #46, #58) and is completely unrepresented infixtures/today.🤖 Filed by Claude Code at the user's request
https://claude.ai/code/session_0171vaHw8HbkiLzUph9bAA2p