Here is the thing: The test case disables sprite DMA at cycle 12. The way how sprite DMA events are scheduled causes vAmiga to still execute the first sprite DMA cycle, but not the second. This causes sprite DMA to loose sync (visible by the change to blue color of the leftmost sprite).
I think it's best to replace the current scheduling code of the DAS slot (Disk, Audio, Sprite DMA) by code similar to the BPL slot (Bitplane DMA). Currently, bitplane DMA is managed by an event table whereas Disk, Audio, Sprite DMA is managed by a simple list storing successor events. Unfortunately, this is a bigger architectural change.
SAE: 👍
vAmiga: 🙈
Here is the thing: The test case disables sprite DMA at cycle 12. The way how sprite DMA events are scheduled causes vAmiga to still execute the first sprite DMA cycle, but not the second. This causes sprite DMA to loose sync (visible by the change to blue color of the leftmost sprite).
I think it's best to replace the current scheduling code of the DAS slot (Disk, Audio, Sprite DMA) by code similar to the BPL slot (Bitplane DMA). Currently, bitplane DMA is managed by an event table whereas Disk, Audio, Sprite DMA is managed by a simple list storing successor events. Unfortunately, this is a bigger architectural change.