Laufschrift hor. mit DL-Manipulation
Verfasst: 15.03.2026 13:17
Hallo,
ich wollte hier noch einmal ein paar Überlegungen reinstellen betreffend Laufschrift / bzw. Feinscrolling horizontal.
Der Profiprogrammierer kennt das sicherlich zur genüge und wir hatten hier im Forum auch schon auf sehr gut Seiten im Internet hingewiesen, wo man alles sehr gut nachlesen kann.
Hier an dieser Stelle kommt jetzt aber ein kleines Programm - wie üblich in Assembler unter MADS - wo ich eine einfache Laufschrift mit "unendlichem Text" in die obere Zeile des Bildschirmes anzeigen lassen werde. Die Schrift läuft feingescrollt von rechts nach links durch, der Grobscroll soll durch Displaylistmanipulation stattfinden. Das ist etwas komplizierter und aufwendiger, macht aber natürlich Sinn, wenn man das erweitert auf das Scrollen des gesamten Bildschirmes. Wenn es tatsächlich wie im Beispiel nur eine Zeile sein soll, dann kann man natürlich den Grobscroll auch durch umkopieren einfach durchführen, das belastet die CPU nicht nennenswert.
Zunächst nehmen wir ANTIC 2 und bauen die Displaylist entsprechend auf. Der Bildschirm startet nicht bei 40000 sondern bei 40040. Ich brauche eine Leerzeile von 40000 bis 40040.
Zeile 2 startet dann ab 40166 damit ich genügend Platz habe ... das erkläre ich später.
Das grobe Prinzip: Ich hole die Buchstaben vom Text und printe sie 2x auf den Bildschirm, einmal in den "sichtbaren" Bereich und einmal in einen unsichtbaren Bereich. Die Displaylist manipuliere ich nun bei jedem Grobscroll um 1 und schiebe somit den angezeigten Bereich über den Speicher.. nach 80 Verschiebungen wird die Displayliste wieder auf den Anfangswert geschrieben und alles startet von vorne.
Anbei der Code:
Jeder darf hier frei optimieren - bzw. gibt es einfachere Lösungen?
LG Peter
ich wollte hier noch einmal ein paar Überlegungen reinstellen betreffend Laufschrift / bzw. Feinscrolling horizontal.
Der Profiprogrammierer kennt das sicherlich zur genüge und wir hatten hier im Forum auch schon auf sehr gut Seiten im Internet hingewiesen, wo man alles sehr gut nachlesen kann.
Hier an dieser Stelle kommt jetzt aber ein kleines Programm - wie üblich in Assembler unter MADS - wo ich eine einfache Laufschrift mit "unendlichem Text" in die obere Zeile des Bildschirmes anzeigen lassen werde. Die Schrift läuft feingescrollt von rechts nach links durch, der Grobscroll soll durch Displaylistmanipulation stattfinden. Das ist etwas komplizierter und aufwendiger, macht aber natürlich Sinn, wenn man das erweitert auf das Scrollen des gesamten Bildschirmes. Wenn es tatsächlich wie im Beispiel nur eine Zeile sein soll, dann kann man natürlich den Grobscroll auch durch umkopieren einfach durchführen, das belastet die CPU nicht nennenswert.
Zunächst nehmen wir ANTIC 2 und bauen die Displaylist entsprechend auf. Der Bildschirm startet nicht bei 40000 sondern bei 40040. Ich brauche eine Leerzeile von 40000 bis 40040.
Zeile 2 startet dann ab 40166 damit ich genügend Platz habe ... das erkläre ich später.
Das grobe Prinzip: Ich hole die Buchstaben vom Text und printe sie 2x auf den Bildschirm, einmal in den "sichtbaren" Bereich und einmal in einen unsichtbaren Bereich. Die Displaylist manipuliere ich nun bei jedem Grobscroll um 1 und schiebe somit den angezeigten Bereich über den Speicher.. nach 80 Verschiebungen wird die Displayliste wieder auf den Anfangswert geschrieben und alles startet von vorne.
Anbei der Code:
Code: Alles auswählen
org $2000
hscrolx .by 00
laufschrx1 = 240
dlist
.by 112,112,112
.by 66+16
dl1 .by 104,156 ;40040
.by 66+16
dl2 .by 230,156 ;40166
:22 .by 2+16
.by 65
.wo dlist
start
mwa #dlist 560
mwa #copy1 laufschrx1
ldx #0
@
mva hscrolx $d404
jsr wartes
jsr wartes
jsr laufschrift
dec hscrolx
jmp @-
run start
.proc laufschrift
#if .byte hscrolx=#0
inc dl1
@
; ------ ab hier jeweils einen Buchstaben holen -------
ldy #0
lda (laufschrx1),y
cmp #3 ; # Text Ende
bne @+
mwa #copy1 laufschrx1
jmp @-
@
sta 40085,x
sta 40005,x
inx
cpx #80
bcc @+
ldx #0
mva #104 dl1
@
clc
lda laufschrx1
adc #1
sta laufschrx1
lda laufschrx1+1
adc #0
sta laufschrx1+1
mva #4 hscrolx
#end
rts
.endp
.proc wartes
lda 20
wa
cmp 20
beq wa
rts
.endp
;===============================================================
; Laufschrift Daten
copy1
.byte "Heute ist ein wirklich schoener Tag, die Sonne scheint und es wird endlich waermer. Der Fruehling kommt und bald ist Sommer, wo wir wieder mit T-Shirt rausgehen koennen.... "
.byte "hier kann jetzt noch ganz viel Text stehen. Die Grenze des Textes ist praktisch nicht limitiert und kann weit ueber die 255 Byte-Grenze hinausgehen. "
.byte "Die Textlimitation ergibt sich natuerlich aus dem Speicher ...... ;-) #"
;===============================================================
;===============================================================
LG Peter