Die Displaylist und den Header habe ich wegen der Kürze wieder ins Hauptprogramm integriert... ist dann auch leichter hier und für mich mit den Dateien zu handeln, als icl (include) habe ich dann nur noch die Character und Landschaft...
Mit der letzten Reihe bin ich noch nicht ganz zufrieden, das Feinscroll läuft jetzt aber echt gut!
der Hauptcode:
Code: Alles auswählen
org $2000
ch = $2f4 ;High byte character set pointer
savmsc = $58
gprior = $26f
color4 = $2c8
sdlstl = $230 ;Start DisplayList
vscrol = $d405 ;vertikal scrol
wsync = $d40a
RTCLOk = $0012
SETVBV = $e45c
var1 = $a0
var2 = $a2
var3 = $a4
var4 = $a6
var5 = $a8
var6 = $b0
var7 = $b2
delay = $b4
icl 'character.asm'
icl 'lands.asm'
dlist .byte 112,112,112,98
.byte 30,75
.byte 34,34,34,34,34,34,34,34,34,34,34,34
.byte 34,34,34,34,34,34,34,34,34,34,2
.byte 65,32,156
.proc main
jsr displaylist ;Subroutine Displaylist-Aufbau
start1 mva #>chr ch ;HighByte Character Pointer auf $2000 setzen
mva #192 gprior ;GTIA Modus 3 (16 Farben) initialisieren
mva #8 color4 ;Hintergrundfarbe / Helligkeit festlegen
lda #0 \ tax \ sta var3 \ sta var4 \ sta var6 \ sta var7 \ sta var6+1
mva <lands var6
mva >lands var6+1
hauptprogramm
jsr letztereihe ;letzte Reihe (lands) Bildschirm1 printen (sichtbar)
jsr feinscroll ;Feinscroll Bildschirm1 ausführen (sichtbar)
mva #$30 var1 ;var1 auf 30000 ($7530) setzen
mva #$75 var1+1
mva #$f0 var2 ;var2 auf 30960 ($78f0) setzen
mva #$78 var2+1
jsr grobscroll ;Bildschirm1 kopieren + grobscroll
mva #$18 var1 ;var1 + var2 auf 31000 ($7918) setzen
mva #$18 var2
mva #$79 var1+1
mva #$79 var2+1
jsr umschalten ;umschalten auf Bildschirm2 - Bildschirm2 wird sichtbar
jsr letztereihe ;letzte Reihe (lands) Bildschirm2 printen (sichtbar)
jsr feinscroll ;Feinscroll Bildschirm2 ausführen (sichtbar)
mva #$08 var2 ;var1 auf 29960 ($7508) setzen
mva #$75 var2+1
mva #$18 var1 ;var2 auf 31000 ($7918) setzen
mva #$79 var1+1
jsr grobscroll ;;Bildschirm2 kopieren + grobscroll
mva #$30 var1 ;var1 + var2 auf 30000 ($7530) setzen
mva #$30 var2
mva #$75 var1+1
mva #$75 var2+1
jsr umschalten ;umschalten auf Bildschirm1 - Bildschirm1 wird sichtbar
;Ende der Bildschirmausführung / Kontrolle Durchläufe
sec
lda #38 ; - 36 = Anzahl der Durchläufe
sbc var6+1
bpl @+
jmp start1 ;Stop hier
@ jmp hauptprogramm ;weiter
.endp
; _____________________________________________________________________________________
;
; ---------------------------- S U B R O U T I N E N ----------------------------------
; _____________________________________________________________________________________
umschalten
ldy #4
mva sdlstl var5
mva sdlstl+1 var5+1
lda var1
sta (var5),y
iny
lda var1+1
sta (var5),y
rts
; -------------------------------------------------------------------------------------
wartes
clc
ldx delay ; Warteschleife
st lda RTCLOK+2
wa cmp RTCLOK+2
beq wa
dex
bpl st
rts
; -------------------------------------------------------------------------------------
feinscroll
ldy #1
mva #1 delay
@ jsr wartes
sty vscrol
iny
cpy #8
bne @-
rts
; --------------------------------------------------------------------------------------
grobscroll
;Den Bildschirm um eins hoch / Grobscrolling um eine Zeile
ldx #22
@ ldy #$28
clc
@ mva (var1),y (var2),y
dey
bpl @-
clc
lda var1
adc #$28
sta var1
bcc @+
inc var1+1
@ clc
lda var2
adc #$28
sta var2
bcc @+
inc var2+1
@ clc
dex
bpl @-3
rts
; -------------------------------------------------------------------------------
displaylist
; initialisiere die Displaylist
mva sdlstl var5
mva sdlstl+1 var5+1
ldy #0
clc
@ lda dlist,y
sta (var5),y
iny
cpy #34
bne @-
rts
; ---------------------------------------------------------------------------------------
letztereihe
;Die letzte Reihe printen
;Start der letzten Reihe bei var1 - Line 22
lda var1
adc #112
sta var1
inc var1+1
inc var1+1
inc var1+1
ldy #0
clc
lda (var6),y ;Boarder1 holen
sta var5 ;Boarderanzahl in var5 speichern
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda (var6),y
ldy var5
@ sta (var1),y ;Boarder1 printen
dey
bpl @-
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda (var6),y ;Rand Boarder1 holen
inc var5 ;Zeilenzähler eins weiter
ldy var5
sta (var1),y ;Rand Boarder1 printen
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda(var6),y ;leer holen
tax
lda #0
ldy var5
@ iny
sta (var1),y ; leer printen
dex
bpl @-
sty var5 ;Zeilenzähler sichern
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda(var6),y ;Rand Boarder2 holen
ldy var5
iny
sty var5
sta (var1),y ;Rand Boarder2 printen
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda(var6),y ;Boarder2 holen
tax ;Boarderanzahl in x speichern
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
lda (var6),y
ldy var5
@ iny
sta (var1),y ;Boarder2 printen
dex
bpl @-
clc
lda var6
adc #1
sta var6
ldy #0
lda var6+1
adc #0
sta var6+1
mva #0 vscrol
rts
; ------------------------------------------------------------------------------
run main
hier sind viele Zeilen erstmal dupliziert...
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=test.asm
lands .byte 9,2,1,20,10,9,2
.byte 9,2,1,18,10,11,2
.byte 9,2,1,17,10,12,2
.byte 9,2,1,16,10,13,2
.byte 9,2,1,15,10,15,2
.byte 9,2,1,14,10,16,2
.byte 9,2,1,13,10,17,2
.byte 10,2,1,12,10,17,2
.byte 11,2,1,11,10,18,2
.byte 12,2,1,10,10,17,2
.byte 13,2,1,10,10,15,2
.byte 14,2,1,10,10,14,2
.byte 14,2,1,10,10,14,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 9,2,1,20,10,9,2
.byte 9,2,1,18,10,11,2
.byte 9,2,1,17,10,12,2
.byte 9,2,1,16,10,13,2
.byte 9,2,1,15,10,15,2
.byte 9,2,1,14,10,16,2
.byte 9,2,1,13,10,17,2
.byte 10,2,1,12,10,17,2
.byte 11,2,1,11,10,18,2
.byte 12,2,1,10,10,17,2
.byte 13,2,1,10,10,15,2
.byte 14,2,1,10,10,14,2
.byte 14,2,1,10,10,14,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 9,2,1,20,10,9,2
.byte 9,2,1,18,10,11,2
.byte 9,2,1,17,10,12,2
.byte 9,2,1,16,10,13,2
.byte 9,2,1,15,10,15,2
.byte 9,2,1,14,10,16,2
.byte 9,2,1,13,10,17,2
.byte 10,2,1,12,10,17,2
.byte 11,2,1,11,10,18,2
.byte 12,2,1,10,10,17,2
.byte 13,2,1,10,10,15,2
.byte 14,2,1,10,10,14,2
.byte 14,2,1,10,10,14,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 9,2,1,20,10,9,2
.byte 9,2,1,18,10,11,2
.byte 9,2,1,17,10,12,2
.byte 9,2,1,16,10,13,2
.byte 9,2,1,15,10,15,2
.byte 9,2,1,14,10,16,2
.byte 9,2,1,13,10,17,2
.byte 10,2,1,12,10,17,2
.byte 11,2,1,11,10,18,2
.byte 12,2,1,10,10,17,2
.byte 13,2,1,10,10,15,2
.byte 14,2,1,10,10,14,2
.byte 14,2,1,10,10,14,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
.byte 13,2,1,11,10,14,2
.byte 13,2,1,11,10,14,2
.byte 12,2,1,12,10,14,2
.byte 11,2,1,12,10,15,2
Code: Alles auswählen
;@com.wudsn.ide.asm.mainsourcefile=test.asm
chr .he 0,0,0,0,0,0,0,0
.he f0,f0,ff,ff,ff,ff,f0,f0
.he ff,ff,ff,ff,ff,ff,ff,ff
.he 0f,0f,ff,ff,ff,ff,0f,0f
.he f0,f0,f0,f0,f0,f0,f0,f0
.he 0f,0f,0f,0f,0f,0f,0f,0f
.he 0,0,0,0,ff,ff,ff,ff
.he ff,ff,ff,ff,0,0,0,0
.he f0,f0,f0,f0,ff,ff,ff,ff
.he ff,ff,ff,ff,f0,f0,f0,f0
.he 0f,0f,0f,0f,ff,ff,ff,ff
.he ff,ff,ff,ff,0f,0f,0f,0f
.he e0,e0,ee,ee,ee,ee,e0,e0
.he ee,ee,ee,ee,ee,ee,ee,ee
.he 0e,0e,ee,ee,ee,ee,0e,0e
.he e0,e0,e0,e0,e0,e0,e0,e0
.he 0e,0e,0e,0e,0e,0e,0e,0e
.he 0,0,0,0,ee,ee,ee,ee
.he ee,ee,ee,ee,0,0,0,0
.he e0,e0,e0,e0,ee,ee,ee,ee
.he ee,ee,ee,ee,e0,e0,e0,e0
.he 0e,0e,0e,0e,ee,ee,ee,ee
.he ee,ee,ee,ee,0e,0e,0e,0e
.he d0,d0,dd,dd,dd,dd,d0,d0
.he dd,dd,dd,dd,dd,dd,dd,dd
.he 0d,0d,dd,dd,dd,dd,0d,0d
.he d0,d0,d0,d0,d0,d0,d0,d0
.he 0d,0d,0d,0d,0d,0d,0d,0d
.he 0,0,0,0,dd,dd,dd,dd
.he dd,dd,dd,dd,0,0,0,0
.he d0,d0,d0,d0,dd,dd,dd,dd
.he dd,dd,dd,dd,d0,d0,d0,d0
.he 0d,0d,0d,0d,dd,dd,dd,dd
.he dd,dd,dd,dd,0d,0d,0d,0d
.he c0,c0,cc,cc,cc,cc,c0,c0
.he cc,cc,cc,cc,cc,cc,cc,cc
.he 0c,0c,cc,cc,cc,cc,0c,0c
.he c0,c0,c0,c0,c0,c0,c0,c0
.he 0c,0c,0c,0c,0c,0c,0c,0c
.he 0,0,0,0,cc,cc,cc,cc
.he cc,cc,cc,cc,0,0,0,0
.he c0,c0,c0,c0,cc,cc,cc,cc
.he cc,cc,cc,cc,c0,c0,c0,c0
.he 0c,0c,0c,0c,cc,cc,cc,cc
.he cc,cc,cc,cc,0c,0c,0c,0c
.he b0,b0,bb,bb,bb,bb,b0,b0
.he bb,bb,bb,bb,bb,bb,bb,bb
.he 0b,0b,bb,bb,bb,bb,0b,0b
.he b0,b0,b0,b0,b0,b0,b0,b0
.he 0b,0b,0b,0b,0b,0b,0b,0b
.he 0,0,0,0,bb,bb,bb,bb
.he bb,bb,bb,bb,0,0,0,0
.he b0,b0,b0,b0,bb,bb,bb,bb
.he bb,bb,bb,bb,b0,b0,b0,b0
.he 0b,0b,0b,0b,bb,bb,bb,bb
.he bb,bb,bb,bb,0b,0b,0b,0b
.he a0,a0,aa,aa,aa,aa,a0,a0
.he aa,aa,aa,aa,aa,aa,aa,aa
.he 0a,0a,aa,aa,aa,aa,0a,0a
.he a0,a0,a0,a0,a0,a0,a0,a0
.he 0a,0a,0a,0a,0a,0a,0a,0a
.he 0,0,0,0,aa,aa,aa,aa
.he aa,aa,aa,aa,0,0,0,0
.he a0,a0,a0,a0,aa,aa,aa,aa
.he aa,aa,aa,aa,a0,a0,a0,a0
.he 0a,0a,0a,0a,aa,aa,aa,aa
.he aa,aa,aa,aa,0a,0a,0a,0a
.he 90,90,99,99,99,99,90,90
.he 99,99,99,99,99,99,99,99
.he 09,09,99,99,99,99,09,09
.he 90,90,90,90,90,90,90,90
.he 09,09,09,09,09,09,09,09
.he 0,0,0,0,99,99,99,99
.he 99,99,99,99,0,0,0,0
.he 90,90,90,90,99,99,99,99
.he 99,99,99,99,90,90,90,90
.he 09,09,09,09,99,99,99,99
.he 99,99,99,99,09,09,09,09
.he 80,80,88,88,88,88,80,80
.he 88,88,88,88,88,88,88,88
.he 08,08,88,88,88,88,08,08
.he 80,80,80,80,80,80,80,80
.he 08,08,08,08,08,08,08,08
.he 0,0,0,0,88,88,88,88
.he 88,88,88,88,0,0,0,0
.he 80,80,80,80,88,88,88,88
.he 88,88,88,88,80,80,80,80
.he 08,08,08,08,88,88,88,88
.he 88,88,88,88,08,08,08,08
.he 70,70,77,77,77,77,70,70
.he 77,77,77,77,77,77,77,77
.he 07,07,77,77,77,77,07,07
.he 70,70,70,70,70,70,70,70
.he 07,07,07,07,07,07,07,07
.he 0,0,0,0,77,77,77,77
.he 77,77,77,77,0,0,0,0
.he 70,70,70,70,77,77,77,77
.he 77,77,77,77,70,70,70,70
.he 07,07,07,07,77,77,77,77
.he 77,77,77,77,07,07,07,07
.he 60,60,66,66,66,66,60,60
.he 66,66,66,66,66,66,66,66
.he 06,06,66,66,66,66,06,06
.he 60,60,60,60,60,60,60,60
.he 06,06,06,06,06,06,06,06
.he 0,0,0,0,66,66,66,66
.he 66,66,66,66,0,0,0,0
.he 60,60,60,60,66,66,66,66
.he 66,66,66,66,60,60,60,60
.he 06,06,06,06,66,66,66,66
.he 66,66,66,66,06,06,06,06
.he 50,50,55,55,55,55,50,50
.he 55,55,55,55,55,55,55,55
.he 05,05,55,55,55,55,05,05
.he 50,50,50,50,50,50,50,50
.he 05,05,05,05,05,05,05,05
.he 0,0,0,0,55,55,55,55
.he 55,55,55,55,0,0,0,0
.he 50,50,50,50,55,55,55,55
.he 55,55,55,55,50,50,50,50
.he 05,05,05,05,55,55,55,55
.he 55,55,55,55,05,05,05,05
.he 40,40,44,44,44,44,40,40
.he 44,44,44,44,44,44,44,44
.he 04,04,44,44,44,44,04,04
.he 40,40,40,40,40,40,40,40
.he 04,04,04,04,04,04,04,04
.he 0,0,0,0,44,44,44,44
.he 44,44,44,44,0,0,0,0
.he 40,40,40,40,44,44,44,44
.he 44,44,44,44,40,40,40,40
.he 04,04,04,04,44,44,44,44
.he 44,44,44,44,04,04,04,04
.he 30,30,33,33,33,33,30,30
.he 33,33,33,33,33,33,33,33
.he 03,03,33,33,33,33,03,03
.he 30,30,30,30,30,30,30,30
.he 03,03,03,03,03,03,03,03
.he 0,0,0,0,33,33,33,33
.he 33,33,33,33,0,0,0,0
.he 30,30,30,30,33,33,33,33
.he 33,33,33,33,30,30,30,30
.he 03,03,03,03,33,33,33,33
.he 33,33,33,33,03,03,03,03
.he 20,20,22,22,22,22,20,20
.he 22,22,22,22,22,22,22,22
.he 02,02,22,22,22,22,02,02
.he 20,20,20,20,20,20,20,20
.he 02,02,02,02,02,02,02,02
.he 0,0,0,0,22,22,22,22
.he 22,22,22,22,0,0,0,0
.he 20,20,20,20,22,22,22,22
.he 22,22,22,22,20,20,20,20
.he 02,02,02,02,22,22,22,22
.he 22,22,22,22,02,02,02,02
.he 10,10,11,11,11,11,10,10
.he 11,11,11,11,11,11,11,11
.he 01,01,11,11,11,11,01,01
.he 10,10,10,10,10,10,10,10
.he 01,01,01,01,01,01,01,01
.he 0,0,0,0,11,11,11,11
.he 11,11,11,11,0,0,0,0
.he 10,10,10,10,11,11,11,11
.he 11,11,11,11,10,10,10,10
.he 01,01,01,01,11,11,11,11
.he 11,11,11,11,01,01,01,01