Es läuft schon, nach der erwähnten Änderung, aber es läuft viel zu schnell ab!
Bei $6200 scheint der IRQ für die Musik und das Blinken zu liegen.
Dort wird anscheinend (nach der Musik) gleich 4x zur Blink-Routine gesprungen.
.C:620d 20 03 10 JSR $1003
.C:6210 20 00 82 JSR $8200
.C:6213 20 00 82 JSR $8200
.C:6216 20 00 82 JSR $8200
.C:6219 20 00 82 JSR $8200
Damit wird diese also bei PAL 200x in der Sekunde aufgerufen. Selbst wenn sie nur 1x aufgerufen wird, würde das Blinken in ca. 0,25 Sek durchlaufen.
Setze mal unter VICE einen Breakpoint bei $8225 (müsste die BPL-Prüfung für die Farben sein), dann kannst zu sehen, dass alle Farben verwendet werden.
Wenn du das Blinken anders 'timest', sollte es eher deinen Vorstellungen entsprechen.
Außerdem gibt es noch ein zweites Problem:
Hier setzt du spr_ColorPointers zwar auf 0...
lda #$00 // Sonst
sta spr_ColorPointers,y // Color-Pointer und
sta spr_FlashActive,y // Blink-Flag auf 0 setzen
...läufst dann aber direkt weiter in den folgenden Abschnitt...
spr_SetColor:
sta $d027,y // Farbe setzen
inx // Color-Pointer +1
txa // X -> A
sta spr_ColorPointers,y // Neuen Color-Pointer speichern
...hier wird spr_ColorPointers dann auf einen ungültigen Wert gesetzt! Da X immer noch aufs Tabellenende zeigt und nun auch noch um 1 erhöht wird.