I was too tired, obviously there is vpos accesses because main loop simply polls it.. So the logic is simple: last chipset data access gets copied to first 16 pixels of wide sprite.
$0144 is last copper access (first copper move cycle: load register number, second copper move cycle: write value to previously loaded register). It also explains why active bitplane makes difference in specific horizontal positions: if bitplane access is between two copper moves (copper uses only every other cycles): it becomes last cycle before copper does final write to $144. This is now emulated.
Remaining unknown: sometimes first two 16-pixel sprite "parts" contains duplicated chipset data.
EDIT: One correction in 32-pixel wide sprites: if FMODE has normal 32-bit sprite mode enabled (FMODE bit 2 set), both 16 pixel halves contain written data. Only if FMODE bit 3 is set (without bit 2 being set = sprite DMA mode works strangely) results in first 16 pixel having data bus contents and last 16 pixels contain written data.
Last edited by Toni Wilen; 07 October 2018 at 09:57.
|