Mann, berni, du bist echt ne große Hilfe. Vielen Dank! Das Schema ist super. So versteht man gut, was abgeht. Mir scheint, durch Abschalten des Kernals könnte man nochmal ca. 15 Zyklen sparen. Aber ich hab's jetzt so gemacht, wie du vorgeschlagen hast: ne eigene Routine für die 226. Die sieht jetzt so aus:
Raster226 ; Prepare Multicolor
lda $d016
ora #%00010000
tax
; Prepare char set
lda $d018
ora #TASKCHARSHI
; Write into registers
stx $d016
sta $d018
ldy #CL_LIGHTGRAY
sty BKGCOLOR
; Acknowledge IRQ
inc $d019
;
lda StartBtnPushed
beq +
jsr DrawSpritesDown
jmp ++
+ jsr DrawSpritesUp
++ lda #0
sta $d012
lda #<RasterIRQ
sta $0314
lda #>RasterIRQ
sta $0315
jmp $ea81
Alles anzeigen
Das Ändern der Hintergrundfarbe ist eh unkritisch, da in 227 sowieso nur ein weißer Streifen erscheinen soll. Daher hab ich das ans Ende gesetzt. Es flickert noch manchmal ganz rechts, wenn ich einen Eintrag im Startmenu highlighte. Da ist er nicht schnell genug mit dem Zeichensatz und flackert, weil ich die 6 Zeichen aus dem anderen Zeichensatz wieder gelöscht habe.
Ich verstehe aber noch nicht ganz, was das tax bringen soll. Warum nicht gleich sta $d016? Geht doch schneller. EDIT: Ich glaube, ich verstehe. So hat man mehr Kontrolle darüber, wann die echten Änderungen kommen. Die stx/sta's sollten genau zwischen den Zeitpunkten kommen, wo der Rasterstrahl das Innere von 226 verlässt und in das Innere von 227 eintritt. Wenn ich es richtig verstehe, wird das Badline-Verhalten so umgangen, weil ich schneller bin und das Fetchen erst nach den stx/sta's passiert.
Ich mach's jetzt noch mit festen Werten für $d016 und $d018. Dann sollte es klappen. Melde mich wieder mit nem Edit.
Edit: Puh, jetzt klappt es. Auch mit allen möglichen Sprites. Das ganze ist unheimlich zeitkritisch. Da kommt es auf jeden Zykel an. So sieht der Anfang er Routine jetzt aus:
byte !byte 0; Wird in Zeile 0 gefüllt
Raster226 ; Prepare Multicolor
lda $d016
ora #%00010000
tax
; Prepare char set
lda byte
; Write into registers
sta $d018
stx $d016
ldy #CL_LIGHTGRAY
sty BKGCOLOR
; Acknowledge IRQ
inc $d019
Alles anzeigen
Wenn ich ne Zeropage-Adresse statt "byte" verwende, bin ich zu früh. Dann flackert er am Ende von 226 bereits.
Ich habe hierbei eine Menge gelernt und danke dir nochmal dafür!