Rastersplit
Als Rastersplit bezeichnet man einen Split-Screen, bei dem mehrere Anzeigemodi des VIC parallel genutzt werden. Meist handelt es sich um horizontale Rastersplits; dann befinden sich die unterschiedlichen Anzeigebereiche untereinander. Mit zahlreichen Einschränkungen ist es aber auch möglich, diese nebeneinander zu platzieren.[1]
Die häufigste Anwendung dürfte darin bestehen, dass Grafik und Text gleichzeitig auf dem Bildschirm dargestellt werden. Aber auch in Spielen werden Rastersplits oft benutzt, so werden beispielsweise Scores und dergleichen oftmals als Text dargestellt, während das eigentliche Spielfeld Grafik ist oder einen Mehrfarben-Textmodus benutzt.
-
Splitscreen der Programmiersprache Commodore-Logo: Oben Grafik, unten Text.
-
Splitscreen mit Mehrfarben-Textmodus oben und normalem Textmodus unten im Spiel "Nippon".
-
Splitscreens waren auch typisch für die bekannten Grafik- und Point-and-Click-Adventure mit dem Spiel als Grafik oben und unten die Aktionswörter als Text (Beispiel aus "Zak McKracken and the Alien Mindbenders).
Beispiel[Bearbeiten | Quelltext bearbeiten]

Das nachfolgende Programm demonstriert dies mit allen fünf Anzeigemodi des VIC. Der Einfachheit halber, wird der Text-Bereich des Bildschirms fortlaufend mit den Zeichen von 0 bis 199 beschrieben und die Grafik besteht nur aus senkrechten Linien, die im Mehrfarbenmodus alle vier Farben zeigen.
*=$c000
jsr init ; Bildschirm und Grafik rudimentär initialisieren
sei ; vorübergehend Interrupt abschalten
lda #50 ; Raster-Interrupt auf Zeile 50 setzen
sta $d012
lda $d011
and #$7f
sta $d011
lda $d01a ; Raster-Interrupt anschalten
ora #$01
sta $d01a
lda #<irq50 ; Interrupt-Routine verbiegen
sta $0314
lda #>irq50
sta $0315
cli
rts
sys_irq lda $dc0d ; Timer-Interrupt bereits jetzt bestätigen
cli ; und neue Interrupts freigeben, damit
jmp $ea31 ; Raster-Interrupts nicht aufgehalten werden
irq50 lda $d019 ; Auf Raster-Interrupt testen
bpl sys_irq
lda 1023 ; 6 Taktzyklen warten
nop
ldy #%00010101 ; Text bei $0400
lda #%01011011 ; Bitmap-Grafik ausschalten und ECM anschalten
sta $d011
sty $d018
ldx #<irq90 ; Interrupt-Routine für Zeile 90
ldy #>irq90
lda #90
bne irq_ende
irq90 lda $d019 ; Auf Raster-Interrupt testen
bpl sys_irq
lda 1023 ; 8 Taktzyklen warten
lda 1023
lda #%00011011 ; ECM ausschalten
sta $d011
ldx #<irq130 ; Interrupt-Routine für Zeile 130
ldy #>irq130
lda #130
bne irq_ende
irq130 lda $d019 ; Auf Raster-Interrupt testen
bpl sys_irq
lda 1023 ; 8 Taktzyklen warten
lda 1023
lda #%00011000 ; Mehrfarben-Modus anschalten
sta $d016
ldx #<irq170 ; Interrupt-Routine für Zeile 170
ldy #>irq170
lda #170
bne irq_ende
irq170 lda $d019 ; Auf Raster-Interrupt testen
bpl sys_irq
lda 1023 ; 6 Taktzyklen warten
nop
ldy #%00011101 ; Bitmapgrafiken bei $8000
lda #%00111011 ; Bitmap-Grafik anschalten
sta $d011
sty $d018
ldx #<irq210 ; Interrupt-Routine für Zeile 210
ldy #>irq210
lda #210
bne irq_ende
irq210 lda $d019 ; Auf Raster-Interrupt testen
bpl sys_irq
lda 1023 ; 8 Taktzyklen warten
lda 1023
lda #%00001000 ; Mehrfarbenmodus ausschalten
sta $d016
ldx #<irq50 ; Interrupt-Routione für Zeile 50
ldy #>irq50
lda #50
bne irq_ende
irq_ende stx $0314 ; Interrupt verbiegen
sty $0315
sta $d012 ; Nächsten Rasterzeilen-Interrupt programmieren
lda $d019 ; Interrupt bestätigen
sta $d019
pla ; Interrupt geordnet beenden
tay
pla
tax
pla
rti
init lda #147 ; Bildschirm löschen
jsr $ffd2
ldy #0 ; Zeichen von 0 bis 199 in jeden Abschnitt schreiben
loop1 tya
sta $0400,y
sta $04C8,y
sta $0590,y
sta $0658,y
sta $0720,y
iny
cpy #$c8
bne loop1
lda #216 ; Bitmap-Grafik mit 216 füllen
ldy #0
loop2 sta $32c0,y
iny
bne loop2
inc loop2+2
lda loop2+2
cmp #$40
bne loop2
rts
Vertikale Rastersplits[Bearbeiten | Quelltext bearbeiten]


In der Praxis dürften vertikale Rastersplits kaum eine Rolle spielen, da diese sehr zeitkritisch und zudem nur mit zahlreichen Einschränkungen möglich sind. Das größte Problem stellen die Badlines dar, denn in diesen Zeilen ist der Prozessor abgeschaltet und es besteht von daher keine Möglichkeit, den Anzeigemodus zu ändern. Um dies zu umgehen, muss man die Badlines abschalten, was aber bedeutet, dass im Textmodus die Information, welcher Text angezeigt werden soll, nicht mehr vom VIC gelesen werden kann. Es wird dann immer wieder die selbe Zeile ausgegeben. Im Grafikmodus sorgen fehlende Badlines dafür, dass Farbinformationen verloren gehen, weshalb man hier geringere Möglichkeiten bei der Farbwahl hat.
Um überhaupt ein Ergebnis zu erhalten, muss demnach links der Grafikmodus zu sehen sein, bei dem die Farbinformationen fehlen, und rechts der Textmodus. Das funktioniert, weil man in der Mitte der Zeile die Badline wieder anschalten kann und dann die Text-Information wieder geladen wird.
Ein weiteres Problem stellen Artefakte dar, die direkt nach dem Umstellen des Grafikmodus angezeigt werden. Man kann diese Artefakte nicht unterdrücken, lediglich kaschieren. Dadurch entsteht aber ein mindestens 5 Zeichen breiter Bereich in der Mitte der Bildschirms der für keinen der beiden Modi genutzt werden kann. Es ist lediglich möglich, in diesem Bereich Sprites anzeigen zu lassen, wobei diese das Timing durcheinander bringen können...
Zuletzt stellt auch der Zeichensatz ein Problem dar, denn dieser muss sich aus Timing-Gründen an der selben Stelle befinden, wie die Bitmap-Informationen für die Grafiken. Da aber nur ein Teil der Bitmap-Informationen ausgegeben wird, kann man die verbleibenden Bereiche nutzen, um dort den Zeichensatz unterzubringen; ist dann aber natürlich in der Anzahl der Zeichen beschränkt.
Crest ist im Demo Ice Cream Castle von 1990 einen anderen Weg gegangen, um einen vertikalen Rastersplit zu ermöglichen: Dieser ist schlicht unvollständig: Von je acht Zeilen werden nur sechs gesplittet, in den anderen beiden Zeilen ist der Textbereich in Wirklichkeit schwarze Grafik. Die Badlines liegen hier alle in den ungesplitteten Zeilen, wodurch die oben geschilderten Probleme weitgehend wegfallen.