Während eines Tests mit einer kleinen Routine zum Spritemultiplexing ist mir etwas
aufgefallen, was ich mir nicht erklären kann. Hier erstmal der Code:
*=$801 ; SYS 2049
lda #0 ; Alles schwarz
sta $d020
sta $d021
lda #147 ; Bildschirm loeschen
jsr $ffd2
lda #1 ; Farben
sta $d025
lda #11
sta $d026
lda #15
sta $d027 ; setzen
lda #64
sta $d000 ; X-Position
lda #$01
sta $d015 ; Sprite 0 an
sta $d01c ; Multicolor
sei
REPEAT
jsr ANIMATE ; Die Sprite(s) auf der X-Achse bewegen.
; Zwischen den Sprites wird 22 Rasterzeilen lang gewartet:
LOOP0 ; Warte auf Rasterzeile 78 und setze
; dann die Y-Position des Sprites 0 ebenfalls auf 78.
lda $d012
cmp #78 ; Y = 78
bne LOOP0
sta $d001
lda #$28 ; Spritepointer Sprite 0 setzen:
sta $7f8 ; $a00 = $28 * $40
LOOP1 ; Warte auf Rasterzeile 100 und setze
; dann die Y-Position des Sprites 0 ebenfalls auf 100.
lda $d012
cmp #100 ; Y = 100
bne LOOP1
sta $d001
lda #$29 ; Spritepointer fuer Sprite 0 neu setzen:
sta $7f8 ; $a40 = $29 * $40
lda #6 ; eine neue Farbe
sta $d026
jmp REPEAT
; Die Sprite(s) auf der X-Achse bewegen:
ANIMATE
.(
inc $d000
bne FINISH
; Bei Ueberlauf wieder ab X-Position 64 starten:
lda #64
sta $d000
FINISH
rts
.) ; ANIMATE
*=$a00
.byte $ff, $ff, $ff, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $f0
.byte $00, $00, $b0, $00, $00, $a0, $00, $00
.byte $ac, $00, $00, $f8, $00, $00, $fe, $0e
.byte $f0, $aa, $a9, $7c, $aa, $aa, $5b, $ab
.byte $ea, $aa, $eb, $fa, $ab, $03, $f0, $00
.byte $03, $f0, $00, $03, $c0, $00, $03, $00
.byte $00, $00, $00, $00, $ff, $ff, $ff, $ff
*=$a40
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
.byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
Alles anzeigen
Assembliert werden kann der Code mit dem Dreamass. Eine ausführbare PRG ist auch im Anhang.
Im Anhang ist ein Screenshot, der mein Problem im WinVICE zeigt. Zwischen den beiden Sprites sieht
man den X-Versatz von einem Pixel.
Danke im Voraus.