* SPLIT-RASTER
;SPECIAL EFFECTS - Listing #4
;Splitraster - Kommentierter Quellcode
;(C)1992 by ELMSOFT and CPC AMSTRAD INTERNATIONAL
;Geschrieben fuer MAXAM Assembler V1.13
NOLIST ;Keine Ausgaben.
ORG &4000 ;Programmstart bei 16384.
LD HL,FARBBAL ;Farbdaten der Splitraster
LD DE,&3000 ;nach &3000
LD BC,40 ;kopieren.
LDIR
LD HL,&3000 ;Besagte Daten dort jetzt
LD DE,&3028 ;45x aneinanderkopieren.
LD BC,1000
LDIR
LD HL,(&38) ;Beide Bytes bei &38
LD (STORE+1),HL ;wie gehabt sichern
LD HL,&C9FB ;und &38 mit EI;RET
LD (&38),HL ;fuellen.
LD HL,1000 ;Wieder 20 Sekunden Dauer.
LOP2 LD B,&F5 ;Wie immer
FRAME IN A,(C) ;auf VSR
RRCA ;warten.
JR NC,FRAME
HALT ;Jetzt noch zwei Interrupts abwarten,zur Ms-genauen
LOP3 PUSH HL ;Schleifenzaehler sichern.
HALT ;Zweiter Interrupt.
DI ;Interrupts aus,damit SPLITRASTER nicht unterbrochen werden.
LD B,7
W0 DJNZ W0 ;Kleine Warteschleife,um Splitraster genau zu positionieren.
NOP:NOP ;Ganz genaue Einstellung.
LD (SPST+1),SP ;Stack Pointer sichern
LD SP,&3000 ;und mit Adresse der Farbtabelle laden.
LD A,170 ;170 Pixelzeilen Splitraster zeichnen.
LD BC,&7F00 ;INK 0 fuer Splitraster
OUT (C),C ;selektieren.
LOP POP HL ;Jetzt schnellstens mit POP vier Farbwerte aus der
POP DE ;Tabelle in die Register H,L,D und E holen.
OUT (C),H ;Diese Farben jetzt nacheinander
OUT (C),L ;in beliebiger Reihenfolge
OUT (C),D ;ausgeben....
OUT (C),E
OUT (C),H
OUT (C),L
OUT (C),D
OUT (C),E
OUT (C),H
OUT (C),L
CP (IY+0) ;Die uebliche Verzoegerungsschleife,
CP (IY+0) ;um eine Dauer von 64Ms festzulegen.
NOP:NOP
NOP:NOP
DEC A ;Noch eine Pixelzeile?
JP NZ,LOP ;Ja,dann zu LOP.
LD A,&54 ;INK 0 wieder
OUT (C),A ;schwarz.
SPST LD SP,0 ;SP Register mit altem Wert laden.
EI ;Interrupts wieder ein.
LD A,6
LOP4 PUSH AF ;Hier werden einige Splirasterspalten
LD H,&30 ;umgescrollt. Grundsaetzlich wie im
LD L,A ;Listing 4,moeglichst schnell und effektiv.
LD C,(HL) ;Speziell Einsteiger sollten sich dadurch
LD B,170 ;nicht verwirren lassen und lieber mit
LOP5 LD D,H;einfachen,leicht durchschaubaren Routinen
LD E,L;Erfahrung sammeln...
LD A,L
ADD A,4
LD L,A
JP NC,LW5
INC H
LW5 LD A,(HL)
LD (DE),A
DJNZ LOP5
LD (HL),C
POP AF
SUB A,2
JR NZ,LOP4
POP HL ;Durchlaufzaehler zurueck,
DEC HL ;DECrementieren
LD A,H ;und Schleife gegebenenfalls
OR L ;weiter
JR NZ,LOP3 ;ausfuehren,sonst
STORE LD HL,0 ;die alten Bytes nach &38
LD (&38),HL ;poken und
RET ;zurueck.
;Splirasterfarbwerte
FARBBAL DB &44,&5C,&58,&56
DB &55,&4C,&4D,&52
DB &57,&4E,&4F,&59
DB &5F,&4A,&4F,&4A
DB &4B,&43,&4B,&4B
DB &5F,&4A,&4F,&4A
DB &57,&4E,&4F,&59
DB &55,&4C,&4D,&52
DB &44,&5C,&58,&56
DB &54,&54,&54,&54