Hallo zusammen,
mit Hilfe der Seite retro-programming.de habe ich endlich einen stabilen Raster-IRQ hinbekommen und tatsächlich einige schöne Bars auf den Bildschirm gebracht. Soweit so gut, aber wie kann der Code funktionieren? Ich habe alle Taktzyklen mitgezählt und komme in der Schleife, die für Badlines zuständig ist, nur auf 19 Taktzyklen. Trotzdem sind die Bars gerade? Hier mal der Code-Teil, man "startet" in der stabilen Rasterzeile mit 3 verbrauchten Taktzyklen:
//*** RZ 171 (Badline), 3 TZ verbraucht.
irq2stable:
bit $ea //3 6
nop //2 8
nop //2 10
nop //2 12
nop //2 14
nop // 2 16
ldy #$00 // 2 18 ; Zähler für Farbwerte
charloop:
ldx #$08 // 2 20 ; Zähler für Badlines
//*** RZ 172 (Normale Scanline), 0 TZ verbraucht
colloop:
lda rasters1cols,y // 4 4
sta $d020 // 4 8
sta $d021 // 4 12
iny // 2 14
dex // 2 16
beq charloop // 3 19 ; bei Badline, sollten doch 20 sein?
// 2 20 ; Normale Scanline
nop // 2 22
nop // 2 24
jsr wait // 12 36
jsr wait // 12 48
bit $ea // 3 51
nop // 2 53
nop // 2 55
nop // 2 57
bit $ea // 3 60
cpy #42 // 2 62 ; Alle Farben gelesen?
bne colloop // 3 65 ; Nein? Dann nächste Farbe
Alles anzeigen
Abgesehen davon, daß die Schleife für eine normale Rasterzeile auch zu lang ist, sehen die Bars korrekt aus, alle gleich lang und die Umschaltstellen alle direkt untereinander. Liegt es irgendwie daran, daß der Sprung in der Schleife quasi über 2 Rasterzeilen geht?
Ist ja schön und gut, wenn man mehr oder weniger durch ausprobieren was hinbekommen hat, aber man will ja auch wissen, WARUM! ![]()