User Tools

Site Tools


base:20-pixel_sprite_interleave

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
base:20-pixel_sprite_interleave [2020-10-15 14:43] raistlinbase:20-pixel_sprite_interleave [2020-10-15 15:02] raistlin
Line 4: Line 4:
 Original idea and help from Christopher Jam for 20-pixel interleave technique Original idea and help from Christopher Jam for 20-pixel interleave technique
  
-===== Intro =====+=== Intro ===
  
 When using large arrays of sprites, eg. an 8x10 array, it can be tricky to do this without having gaps or glitches. Annoyingly, C64 sprites are 21 pixels tall - so it's not possible to have this array without at least one row of sprites being around a bad line - where there simply aren't enough cycles to update all the sprite values. When using large arrays of sprites, eg. an 8x10 array, it can be tricky to do this without having gaps or glitches. Annoyingly, C64 sprites are 21 pixels tall - so it's not possible to have this array without at least one row of sprites being around a bad line - where there simply aren't enough cycles to update all the sprite values.
Line 69: Line 69:
 </code> </code>
  
-What matters to us here is the cycle count between our first write to the sprite values and our last. So that's 7x2 + 7x4 = 42. To reduce this, we can use the illegal opcode, SAX:-+What matters to us here is the cycle count between our first write to the sprite values and our last. So that's 7x2 + 7x4 = 42 cycles. To reduce this, we can use the illegal opcode, SAX:-
  
 <code> <code>
       LDA #64 + 4       LDA #64 + 4
       LDX #$fb       LDX #$fb
-      SAX ScreenAddr + $3f8 + 0; <-- SAX will write A&X .. ie. 64 in this case (we mask out bit 2)+      SAX ScreenAddr + $3f8 + 0; <-- SAX will write "A & X.. ie. 64 here
       STA ScreenAddr + $3f8 + 4       STA ScreenAddr + $3f8 + 4
       INX       INX