This answer elaborates a bit on the answers by @Raffzahn and @thrust26. The answer by @thrust26 is correct. The alien sprites are not positioned by repeated RESP0
or RESP1
triggers as the code below shows. The book "Racing the beam" mentions the following in a section about sprites:
Rick Maurer, the programmer for the VCS port of Space Invaders, discovered that strobing HMOVE
while a line was being drawn would reposition objects immediately.
This suggests that this technique was used in Space Invaders. However, the only HMOVE
triggers that appear in the code occur directly after a WSYNC
, so definitely not multiple times per scan line.
The aliens are drawn using the two player sprites. Both NUSIZ0
and NUSIZ1
are set to $06
which means single pixel resolution and three copies each at a medium spacing. The copies of both sprites interlace to form a row of six in a pattern "A B A B A B". The appearance of each "copy" is changed by loading different sprite patterns in the GRP0
and GRP1
registers by carefully timed code:
lda ($f8),y ; Load pattern for alien six in X.
tax
lda ($ee),y ; Load pattern for alien one in GRP0
sta GRP0
lda ($f0),y ; Load pattern for alien two in GRP1
sta GRP1
lda ($f2),y ; Update pattern for alien three in GRP0
sta GRP0
lda ($f4),y ; Update pattern for alien four in GRP1
sta GRP1
lda ($f6),y ; Update pattern for alien five in GRP0
sta GRP0
txa ; Update pattern for alien six in GRP1
sta GRP1
The Y
register counts down from 9 to 0 (inclusive) to draw ten scan lines for each alien in a row. An alien pattern can easily be modified by adjusting the low byte of any of the pointers in $ee
to $f8
. Interestingly, these scan lines are drawn without any intermediate WSYNC
trigger, purely based on careful instruction timing.