Hallo.
Ich habe hier einen Code geschrieben mit 4 Rasterzeileninterrupts. Ziel des ganzen ist es, mit einem Interrupt die Musik aus zu lösen (kommt später), mit dem nächsten eine feststehende Überschirft dar zu stellen, mit dem dritten eine Grafik in die Mitte des Bildschirms dar zu stelle. Und der vierte soll unten eine Laufschrift vorbeiscrollen lassen. Wie ich letzten Ende die Laufschrift mache und die Musik einfüge, weiß ich. Aber ich kriege es nicht hin, dass die Überschrift stehen bleibt, wenn sich die Scrollschrift unten bewegt. Dabei dachte ich,ich hätte mit den Rasterinterupts quasi 4 Bildschirme auf einem. Was mache ich falsch ??
Vielen Dank !!
Gruß Jan
Code
- ;
- ;
- ; Übung Rasterzeilen-Interrupt
- ;
- ;
- ; 10 SYS (2304)
- ;
- ;
- startzeile1 =#0
- startzeile2 =#70
- startzeile3 =#120
- startzeile4 =#220
- ;
- ; 10 SYS (2304):REM : new
- *=$0801
- BYTE $16, $08, $0A, $00, $9E, $20, $28, $32, $33, $30, $34, $29, $3a, $8f, $20, $3A, $20, $4E, $45, $57, $00, $00, $00
- ;
- *=$0900
- ;
- lda #0
- tax
- tay
- jsr $e544
- ;
- main_interrupt
- ;
- lda #0
- tax
- tay
- sta $d020
- sei ; Interrupts sperren
- ;
- lda #<irq ; irq low byte
- sta $0314
- ;
- lda #>irq ; irq high byte
- sta $0315
- ;
- lda startzeile1 ; Startzeile 1 festlegen
- sta $d012
- ;
- lda $d011
- and #%01111111 ; Höchstes Bit in $d011 löschen
- sta $d011
- ;
- lda $d01a
- ora #%00000001 ; Niedrigstes Bit einschalten, um
- sta $d01a ; Interrupt durch Raster aus zu lösen
- ;
- cli ; Interrupts wieder zulassen
- ;
- rts
- ;
- ;
- irq
- lda $d019
- bmi do_it
- lda $dc0d ; ansonsten CIA IRQ bestätigen
- cli ; irq erlauben
- jmp $ea81 ; zur ROM Routine springen
- jmp raster_exit
- do_it
- sta $d019 ; Interrupt bestätigt.
- ;
- lda $d012 ; Aktuelle Rasterzeile laden
- bne zeile2 ; ungleich, dann Zeile2
- lda #5
- sta $d021
- ;
- lda startzeile2 ; Start der zweiten Zeile in Akku laden
- sta $d012 ; und in Register festlegen
- ;
- jmp raster_exit
- ;
- ;
- zeile2
- cmp startzeile2
- bne zeile3
- ;
- lda #1
- sta $d021
- ;
- jsr title ; ÜBERSCHRIFT
- ;
- lda startzeile3 ; Start der dritten Zeile in Akku laden
- sta $d012 ; und in Register festlegen
- ;
- jmp raster_exit
- ;
- zeile3
- cmp startzeile3
- bne zeile4
- lda #7
- sta $d021
- ;
- lda startzeile4
- sta $d012
- ;
- jmp raster_exit
- ;
- zeile4
- lda #6
- sta $d021
- ;
- jsr tscroller ; LAUFSCHRIFT UNTEN
- ;
- lda startzeile1
- sta $d012
- ;
- ;
- raster_exit
- pla
- tay
- pla
- tax
- pla
- rti
- rts
- ;
- ;
- title
- lda $d018 ; Auf "Schreibmodus" umschalten
- ora #%00000010 ; ""
- sta $d018 ; ""
- lda #0
- ldx #0
- tloop lda titletext,x
- sta $0432,x
- inx
- cpx #5
- bne tloop
- lda #1
- ldx #0
- tcloop sta $d832,x
- inx
- cpx #5
- bne tcloop
- rts
- ;
- ;
- tscroller
- lda $d019
- sta $d019
- ;
- lda $d018
- ora #%00000010
- sta $d018
- lda #0
- ldx #0
- scrtloop lda scrolltext,x
- sta $079d,x
- inx
- cpx #10
- bne scrtloop
- lda #1
- ldx #0
- scrtcloop sta $db9d,x
- inx
- cpx #10
- bne scrtcloop
- ;
- scrmain
- lda $d016
- and #%11111000
- ora scrollpos
- sta $d016
- ;
- inc scrollpos
- lda #%00000111
- and scrollpos
- sta scrollpos
- ;
- rts
- ;
- ;
- hauptprogramm
- jmp hauptprogramm
- ;
- ;
- ;
- titletext
- text "titel"
- byte 00
- ;
- scrolltext
- text "scrolltext"
- byte 00
- ;
- scrollpos
- byte 00
- ;