Sprite-Splitting
Unter Sprite-Splitting versteht man die Zerlegung eines Sprites in zwei oder mehrere scheinbar unabhängige Einzelsprites.
Durch Veränderung der X-Koordinate eines Sprites zum richtigen Zeitpunkt kann dieses in zwei oder mehr Teile zerlegt werden, die sich in X-Richtung unabhängig voneinander bewegen können. Anders, als bei einem Sprite-Multiplexer müssen die Sprites in Y-Richtung nicht um mindestens 21 Pixel versetzt sein. Dadurch kann der Eindruck entstehen, dass sich mehr als 8 Sprites in einer Zeile befinden.
Das nachfolgende Beispiel-Programm bewegt abwechselnd die obere und die untere Hälfte des Sprites in X-Richtung. Man sieht ein Auto, welches sich nach rechts bewegt und einen Ball, der nach links wandert (halb so schnell, wie das Auto). Das höchstwertige Bit der X-Koordinate in Register $D010 wurde dabei nicht berücksichtigt, um das Programm einfach zu halten. Dies wäre aber problemlos möglich.
*=$c000 lda #147 ; Bildschirm leer jsr $ffd2 lda #00 ; Hintergrund schwarz sta $d020 sta $d021 lda #100 ; Sprite initialisieren sta $d001 lda #1 sta $d015 lda #13 sta 2040 ldx #62 - lda .sprite,x sta 832,x dex bpl - sei lda #99 ; Interrupt auf Zeile 99 sta $d012 ; programmieren lda $d011 and #$7f sta $d011 lda $d01a ; Rasterzeilen-Interrupt anschalten ora #$01 sta $d01a lda #<irq ; Interrupt-Routine verbiegen sta $0314 lda #>irq sta $0315 cli rts irq lda $d019 ; Auf VIC-Interrupt testen bmi vic_irq lda $dc0d ; Timer-Interrupt bestätigen cli ; und neuen Interrupt zulassen jmp $ea31 ; System-Interrupt vic_irq sta $d019 ; Rasterzeilen-Interrupt bestätigen lda $d012 cmp #104 bcs + lda .c1 ; Obere Hälfte um zwei Felder nach sta $d000 ; rechts inc .c1 inc .c1 lda #111 ; Rasterzeilen-Interrupt für sta $d012 ; untere Hälfte programmieren bne ++ + lda .c2 ; Untere Hälfte um ein Feld nach sta $d000 ; links dec .c2 lda #99 ; Rasterzeilen-Interrupt für sta $d012 ; obere Hälfte programmieren ++ pla ; Interrupt geordnet beenden tay pla tax pla rti .c1 !by 100 ; X-Koordinate für obere Hälfte .c2 !by 200 ; X-Koordinate für untere Hälfte ; Sprite-Daten .sprite !by 0,255,192,15,8,32,62,8,16,127,255,254,241,255,31 !by 238,254,239,223,125,247,223,125,246,31,1,240,14,0 !by 224,0,0,0,0,60,0,0,239,0,1,253,128,3,103,192,3,195 !by 64,2,195,192,3,230,192,1,223,128,0,251,0,0,60,0