Benutzer:Berni/Rastertrick/Splitscreen mit Grafik

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Ein Klassiker unter den Rastertricks ist der geteilte Bildschirm, bei dem ein Teil des Bildschirms Grafik enthält und ein anderer Teil Text. Grafikmalprogramme können so einen Großteil der Grafik darstellen und gleichzeitig Informationen zur Grafik oder einen Eingabeprompt. Auch in vielen Computerspielen findet ein solcher Splitscreen Anwendung.

Hier wurde der Einfachheit halber, der Splitscreen in die Mitte gelegt (dort muss die Grafik nicht verschoben werden, weil weder Zeropage noch Zeichen-ROM im Weg sind). Wenn man mit dem Cursor unter den Grafikbereich geht und dort unterschiedliche Zeichen eintippt, kann man gut sehen, wie die Farben für die Grafik bestimmt werden.

Ausgabe des nebenstehenden Programms
*=$c000

         ldx #0        ; Grafik initialisieren
-        txa
         and #$07
         tay
         lda tab,y
         sta $08C0,x
         sta $09C0,x
         sta $0AC0,x
         sta $0BC0,x
         sta $0CC0,x
         inx
         bne -

         sei           ; Interrupt kurzfristig ausschalten

         lda #106      ; Rasterzeilen 106 programmieren
         sta $d012
         lda $d011
         and #$7f
         sta $d011

         lda $d01a     ; Rasterzeilen-Interrupt anschalten
         ora #$01
         sta $d01a

         lda #<irq     ; Interrupt auf eigene Routine umbiegen
         sta $0314
         lda #>irq
         sta $0315

         cli
         rts

irq      lda $d019     ; VIC-Interrupt?
         bmi vic_irq

         lda $dc0d     ; Nein, dann Timer-Interrupt bestätigen und
         cli           ; VIC-Interrupt freigeben
         jmp $ea31

vic_irq  lda $d012
         cmp #106
         bne +

         lda #59       ; In Zeile 106 Grafik anschalten
         sta $d011

         lda $d019     ; Interrupt bestätigen
         sta $d019
         lda #138      ; Nächsten Interrupt in Zeile 138
         bne ++

+        lda #27       ; Grafik abschalten
         sta $d011

         lda $d019     ; Interrupt bestätigen
         sta $d019
         lda #106      ; nächster Interrupt in Zeile 138
++       sta $d012

         pla           ; Geordnet beenden
         tay
         pla
         tax
         pla
         rti

; Einfaches Kreuz-Muster für Grafik
tab      !by 129,66,36,24,24,36,66,129