9238
DEMO -> Othertypeins
© CPC Amstrad International (1992)
 
 
 
CRTC Programmierung Listing 4
cpc
 
 

Manual n° 1

* RASTERBALKEN ;SPECIAL EFFECTS - Listing #4 ;Rasterbalken - Kommentierter Quellcode ;(C)1992 by ELMSOFT and CPC AMSTRAD INTERNATIONAL ;Geschrieben fuer MAXAM Assembler V1.13 NOLIST ;Keine Ausgaben. ORG &4000 ;Programmstart bei 16384. DI ;Alle,die Synchronisation stoerenden,Interrupts aus. LD HL,TABELLE ;HL=Zeiger auf die Hintergrundfarben (Rot,Orange,Gelb etc.) LD DE,&3000 ;Eigentliche Farbtabelle wird bei &3000 aufgebaut. PUSH DE ;Wert &3000 auf den Stack. LD A,10 ;Insgesamt 10 Farbwerte,Schleife 10x durchlaufen. LOOP1 PUSH HL ;HL sichern. LD B,(HL) ;B mit aktueller Hintergrundfarbe laden. LD H,D ;HL=DE,also Zieladresse LD L,E ;nach HL. LD (HL),B ;Ersten Wert der Farbtabelle schreiben. INC DE ;DE=HL+1 LD BC,25 ;Und jetzt den Farbwert 25x kopieren. (So wird die LDIR ;gesamte Farbtabelle um den Faktor 26 gestreckt.) POP HL ;Zeiger auf aktuellen Farbwert zurueck INC HL ;und erhoehen. DEC A ;A=A-1,wenn noch nicht 0, JR NZ,LOOP1 ;dann wieder zu LOOP1 POP HL ;Wert &3000 vom Stapel (insgesamt ein Byte gespart). LD DE,&3100 ;Kopie der gestrecken Farbtabelle LD BC,&100 ;bei Adresse &3100 LDIR ;erstellen. LD A,&C9 ;Verzoegerungsschleife initialisieren. (Mit CALL &5000 LD (&5020),A ;wartet man somit &20 NOPs ab.) LD HL,1000 ;Rasterbalken werden 1000x angezeigt,das sind 20 Sekunden. LOOP2 PUSH HL ;Zaehler retten. LD B,&F5 ;Auf vertikalen FRAME IN A,(C) ;Strahlruecklauf RRCA ;warten... JR NC,FRAME LD HL,405 ;Warten,bis der WAIT DEC HL ;Elektronenstrahl LD A,H ;im sichtbaren OR L ;Bereich JR NZ,WAIT ;angekommen ist. LD HL,&3000 ;HL=Zeiger auf Farbtabelle. LD A,250 ;250 Pixelzeilen lang Farbwerte ausgeben. LD BC,&7F00 ;B=Portadresse Gate Array,C=Pen 0 LD E,16 ;E=Pen 16 (Border) LOOP LD D,(HL) ;D mit einem Farbwert laden. OUT (C),C ;Pen 0 auswaehlen OUT (C),D ;und mit Farbe D laden. (Also INK 0,D) OUT (C),E ;Border auswaehlen OUT (C),D ;und mit selber Farbe laden. (BORDER D) INC HL ;Zeiger auf Tabelle erhoehen. CALL &5000 ;Verzoegerung,damit Schleife genau 64Ms dauert. DEC A ;Noch eine Pixelzeile zeichnen? JP NZ,LOOP ;Ja-dann zurueck. LD A,&54 ;Borderregister OUT (C),E ;mit Farbe 0 OUT (C),A ;fuellen. ;Jetzt werden die blauen Farbbalken mit einer moeglichst ;optimierten,deshalb leider auch relativ undurchsichtigen ;Routine in die Tabelle bei &3000 eingetragen. LD IX,POS ;IX=Zeiger auf momentane Position der Balken. LD B,4 ;Immer vier Rasterbalken kopieren. L4 PUSH BC ;BC=Schleifenzaehler. LD E,(IX+0) ;E=alte Position des Balkens,also &3000+E. LD D,&31 ;DE zeigt jetzt auf unberuehrte Kopie der Tabelle bei &3100. LD A,(DE) ;Farbwert holen und an die gleiche Stelle in DEC D ;der veraenderten Farbtabelle bei &3000 LD (DE),A ;zurueckschreiben. INC E ;Position des Balkens INCrementieren LD (IX+0),E ;und in die Tabelle zurueck. LD HL,FARBBAL;HL=Farbdaten der blauen Balken. LD BC,34 ;34 Bytes (=ein Balken) nach DE LDIR ;in die Farbtabelle kopieren. INC IX ;Naechster Balken.. POP BC ;BC zurueck, DJNZ L4 ;Schleife bis BC=0. POP HL ;Zaehler fuer 1000 Durchlaeufe zurueck, DEC HL ;DECrementieren LD A,H ;und auf Null testen. OR L ;Nein? JR NZ,LOOP2 ;Dann noch ein Durchlauf.. EI ;Interrupts wieder ein - RET ;und zum Basic. ;Farbdaten fuer blaue Rasterbalken. FARBBAL DB &44,&44,&55,&44,&55,&55,&57,&55,&57,&57,&5F,&57,&5F,&5F,&4B DB &5F,&4B,&4B,&5F,&4B,&5F,&5F,&57,&5F,&57,&57,&55,&57,&55,&55 DB &44,&55,&44,&44 ;Farbdaten fuer roten Hintergrund. TABELLE DB &5C,&4C,&4E,&4A,&43,&4A,&4E,&4C,&5C,&54 ;Positionsdaten der Rasterbalken. POS DB 00,&40,&80,&C0


Goto Top
CPC-POWER/CPCSOFTS, programming by Kukulcan © 2007-2021 all rights reserved.
Reproduction forbidden without any express authorization. All the game titles used belong to their respective owners.
Hébergement Web, Mail et serveurs de jeux haute performance