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.Code.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.
Verdammt, du hast recht, ich hatte vollkommen vergessen, daß ich die Routine pro IRQ viermal aufrufe, damit die Animation der Sprites schneller abläuft. Die Blink-Routine habe ich erst danach hinzugefügt und nicht mehr an den Aufruf gedacht. Danke, darauf wäre ich nie gekommen.
Außerdem gibt es noch ein zweites Problem:
Hier setzt du spr_ColorPointers zwar auf 0...Codelda #$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...
Codespr_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.
Stimmt, der nachfolgende Code wird ja trotzdem ausgeführt... habe das jetzt mal wie folgt angepaßt.
...
lda #$00 // Sonst
sta spr_ColorPointers,y // Color-Pointer und
sta spr_FlashActive,y // Blink-Flag auf 0 setzen
beq spr_NoFlashing // Sprung...
spr_SetColor:
sta $d027,y // Farbe setzen
inx // Color-Pointer +1
txa // X -> A
sta spr_ColorPointers,y // Neuen Color-Pointer speichern
spr_NoFlashing:
lda ZP_TMP_1
clc
adc spr_SinusOffset
tax
...
Alles anzeigen
Jedenfalls funktioniert es jetzt erstmal, wie es soll. Das Timing zwischen Bewegung und Blinkfrequenz anzupassen, ist dann der nächste Schritt.
Kiri, ich sehe gerade deine Signatur, bist du derjenige, der für die Seite retro-programming.de verantwortlich ist? Falls ja, möchte ich dir an dieser Stelle ein großes Lob aussprechen. Die Seite hat mir beim Einstieg in Assembler sehr geholfen.
![]()