12800
DEMO -> Graphics
© cpc-power.com (2016)
 
 
 
Reset 28 - Amstrad.eu Slideshow 01 [CPC+]
cpc+
 
 

Last Update : Saturday 23 April 2016 at 18 h 40

Manual n° 1

ORG &A000 ; **************************** ; *** RSX - INITIALISATION *** ; **************************** .RSX_Init : LD HL,RSX_Init LD (HL),&C9 ; Ecrire un RET pour empecher une nouvelle initialisation LD BC,RSX_Commandes ; BC pointe sur la table des Commandes RSX LD HL,RSX_Tampon ; HL pointe sur 4 octets libres. JP &BCD1 .RSX_Tampon : DEFS 4 ; Tampon de quatre octets. .RSX_Commandes : DEFW RSX_Mots_Clefs ; Adresse des mots clefs JP APLIB_DECOMPILATION JP UNLOCK_ASIC JP REFRESH_OFF JP ASIC_ON JP ASIC_OFF JP SPRITE_X JP SPRITE_Y JP SPRITE_XY JP SPRITE_ZOOM JP BORDER JP COULEURS JP SCROLLHAUT .RSX_Mots_Clefs DEFB "AF","F"+&80 ; Mot clef avec le bit 7 du dernier caractere a 1. DEFB "UNLOC","K"+&80 DEFB "NOREFRES","H"+&80 DEFB "O","N"+&80 DEFB "OF","F"+&80 DEFB "SPR","X"+&80 DEFB "SPR","Y"+&80 DEFB "SPRX","Y"+&80 DEFB "SPR","Z"+&80 DEFB "BORDE","R"+&80 DEFB "COULEUR","S"+&80 DEFB "SCROLL","H"+&80 DEFB 0 ; Fin de la table. ; ********************* ; *** LES FONCTIONS *** ; ********************* ;Zone de stockage temporaire .SPRITEADR : DEFS 2 .SPRITENUM : DEFS 1 .SPRITEX : DEFS 2 .SPRITEY : DEFS 2 .SPRITEZOOM : DEFS 1 ;syntax |SPRX,num_sprite(0 a 15),position X (0 a 639) si 640 = cache .SPRITE_X : DI ;lecture valeur X et stockage LD H,(IX+1) LD L,(IX+0) LD (SPRITEX),HL ;lecture valeur sprite numero LD A,(IX+2) LD (SPRITENUM),A ;adresse ecriture dans ASIC (&6000 + (sprite_num * 8)) LD HL,&6000 ;num du sprite * 8 LD A,(SPRITENUM) .sprite_X_boucle CP 0 jp z, sprite_X_ecrire CALL additionner_plus_huit jp nz,sprite_X_boucle .sprite_X_ecrire : ;ecrire les donnees pour X LD A,(SPRITEX) LD (HL),A LD A,(SPRITEX+1) INC HL LD (HL),A EI RET ;syntax |SPRY,num_sprite(0 a 15),position Y (0 a 399) .SPRITE_Y : DI ;lecture valeur Y et stockage LD H,(IX+1) LD L,(IX+0) LD (SPRITEY),HL ;lecture valeur sprite numero LD A,(IX+2) LD (SPRITENUM),A ;adresse ecriture dans ASIC (&6002 + (sprite_num * 8)) LD HL,&6002 ;num du sprite * 8 LD A,(SPRITENUM) .sprite_Y_boucle CP 0 jp z, sprite_Y_ecrire CALL additionner_plus_huit jp nz,sprite_Y_boucle .sprite_Y_ecrire : ;ecrire les donnees pour Y LD A,(SPRITEY) LD (HL),A LD A,(SPRITEY+1) INC HL LD (HL),A EI RET ;syntax |SPRXY,num_sprite(0 a 15),position X (0 a 639), position Y (0 a 399) .SPRITE_XY : DI ;lecture valeur Y et stockage LD H,(IX+1) LD L,(IX+0) LD (SPRITEY),HL ;lecture valeur X et stockage LD H,(IX+3) LD L,(IX+2) LD (SPRITEX),HL ;lecture valeur sprite numero LD A,(IX+4) LD (SPRITENUM),A ;adresse ecriture dans ASIC X=(&6000 + (sprite_num * 8)) LD HL,&6000 ;num du sprite * 8 LD A,(SPRITENUM) .sprite_XY_boucle CP 0 jp z, sprite_XY_ecrire CALL additionner_plus_huit jp nz,sprite_XY_boucle .sprite_XY_ecrire : ;ecrire les donnees pour X LD A,(SPRITEX) LD (HL),A LD A,(SPRITEX+1) INC HL LD (HL),A ;ecrire les donnees pour Y INC HL LD A,(SPRITEY) LD (HL),A LD A,(SPRITEY+1) INC HL LD (HL),A EI RET ;syntax |SPRZ,num_sprite(0 a 15),ZOOM = 0000XXYY en basic ex &X00001111 ;00 = non visible ;01 = 1 pixel (equivalent MODE 2) ;10 = 2 pixels (equivalent MODE 1) ;11 = 4 pixels (equivalent MODE 0) .SPRITE_ZOOM : DI ;lecture valeur ZOOM LD A,(IX+0) LD (SPRITEZOOM),A ;lecture valeur sprite numero LD A,(IX+2) LD (SPRITENUM),A ;adresse ecriture dans ASIC (&6004 + (sprite_num * 8)) LD HL,&6004 ;num du sprite * 8 LD A,(SPRITENUM) .sprite_ZOOM_boucle CP 0 jp z, sprite_ZOOM_ecrire CALL additionner_plus_huit jp nz,sprite_ZOOM_boucle .sprite_ZOOM_ecrire : ;ecrire les donnees pour le ZOOM LD A,(SPRITEZOOM) LD (HL),A EI RET ;syntax |BORDER, R(0 a 15), V(0 a 15), B(0 a 15) .BORDER DI ;lecture valeur R, V, B LD B,(IX+4) ;Bleu LD C,(IX+2) ;Vert LD D,(IX+0) ;Rouge ;ecriture Vert LD A,C LD (&6421),A ;ecriture Bleu/Rouge ;Bleu*16 (decalage de 4 bit a gauche) LD A,B SLA A SLA A SLA A SLA A ;Bleu+Rouge ADD A,D LD (&6420),A EI RET .additionner_plus_huit LD BC,8 ADD HL,BC DEC A RET .COULEURS ;Choix du mode sans CLS LD A,(&FFDD) CALL &BD1C ;Changer la couleur de la bordure LD A,(&FFDE) LD (&6420),A LD A,(&FFDF) LD (&6421),A ;Transfert des encres de l'image dans l'asic LD HL,&FFE0 ;adresse de debut pour la source LD DE,&6400 ;adresse de debut pour la destination LD BC,&0020 ;nombre d'octets a transferer (32) LDIR ;Transfert des donnees EI RET ;syntax |UNLOCK ;Debloquer l'acces a l'ASIC .UNLOCK_ASIC : DI LD A,17 LD HL,Sequence_Asic_unlock .asic_loop: LD B,&BD OUTI DEC A JR NZ,asic_loop EI CALL ASIC_ON CALL REFRESH_OFF RET .Sequence_Asic_unlock: DB 255, 0, 255, 119, 179, 81, 168, 212, 98, 57, 156, 70, 43, 21, 138, 205, 238 ;syntax |ON ; Connexion page Asic (&4000-&7fff) .ASIC_ON LD BC,&7FB8 OUT (C),C RET ;syntax |OFF ; Deconnexion page Asic (&4000-&7fff) .ASIC_OFF LD BC,&7FA0 OUT (C),C RET ;syntax |NOREFRESH ;Desactiver le bloc evenement du REFRESH des couleurs (Reviendra avec un changement de MODE) .REFRESH_OFF LD HL,&B7F9 ; Bloc evenement CALL &BCDD RET ;syntax |SCROLLH ;Scrolling HAUT .SCROLLHAUT LD B,8;decalage vers le haut de combien de ligne graphique .loopscrollC PUSH BC LD HL,&C1E0;adresse de debut (7eme ligne texte) LD B,19;combien de ligne texte .loopscrollB PUSH BC PUSH HL LD B,7;hauteur d'une ligne texte (0 a 7) .loopscrollA PUSH BC PUSH HL POP DE LD BC,&800;calcul ligne suivante ADD HL,BC PUSH HL LD BC,&0050;largeur d'une ligne LDIR POP HL POP BC DJNZ loopscrollA POP DE EX DE,HL LD BC,&0050 ADD HL,BC PUSH HL LDIR POP HL POP BC DJNZ loopscrollB ;vider la derniere ligne LD HL,&FF80 LD DE,&FF81 LD BC,&004F LD (HL),0 LDIR POP BC DJNZ loopscrollC RET ; Aplib decrunching routine ; (c) CNGSOFT ; Maxam source by T&J/GPA - 01/18/2008 ; Nothing changed, except thy damned hidden opcodes ; and a new variable for Maxam ( 13+8*0 = 0 for Maxam ) aplib8flag equ &0 ; = DEC &00 pour INC flagdecde equ aplib8flag*8 ; for Maxam compatibility ; En entree, on a : ; HL = implantation du code compacte ; DE = implantation du code decompacte APLIB_DECOMPILATION ;syntax |AFF,adresse_memoire ;lecture valeur adresse_memoire ;LD L,(IX+00) ;LD H,(IX+01) Start DI LD HL,&4000 ;adr en memoire LD DE,&C000 ;adresse de decompression CALL boot EI JP &000F Boot PUSH HL ; used for EX HL,(SP) PUSH HL POP IX DB &FD,&26,&80 ; LD IYh,&80 aplib8literal LD A,(IX+ &00) DB &DD,&23 + flagdecde ; INC IX/DEC IX LD (DE),A DB &13 + flagdecde ; INC DE/DEC DE DB &FD,&2E,&02 ; LD IYl,&2 aplib8nexttag CALL aplib8getbit JR NC, aplib8literal LD BC,&0000 CALL aplib8getbit JR NC, aplib8codepair LD H,B CALL aplib8getbit JR NC, aplib8shortmatch DB &FD,&2E,&02 ; LD IYl,2 INC C ; bc LD L,&10 aplib8getmorebits CALL aplib8getbit RL L JR NC, aplib8getmorebits JR NZ, aplib8domatch LD A,L LD (DE),A DB &13+ flagdecde ; INC DE/DEC DE JR aplib8nexttag aplib8codepair CALL aplib8getgamma DB &FD,&4D ; LD C,IYl SBC HL,BC JR NZ, aplib8normalcodepair CALL aplib8getgamma LD B,H JR aplib8domatch_lastpos aplib8normalcodepair DEC L LD H,L LD L,(IX + &00) DB &DD,&23+ flagdecde ; INC IX/DEC IX PUSH HL CALL aplib8getgamma LD B,H POP HL LD A,H CP 125 ; cmp eax,32000 JR NC, aplib8domatch_with_2inc CP &05 JR NC, aplib8domatch_with_inc AND A JR NZ, aplib8domatch_new_lastpos LD A,L ADD A JR C, aplib8domatch_new_lastpos aplib8domatch_with_2inc INC BC aplib8domatch_with_inc INC BC aplib8domatch_new_lastpos EX (SP),HL aplib8domatch_lastpos POP HL PUSH HL DB &FD,&2E,&01 ; LD IYl,1 aplib8domatch if aplib8flag ; LDIR/LDDR ADD HL,DE LDDR else AND A EX DE,HL SBC HL,DE EX DE,HL ADD HL,DE EX DE,HL LDIR endif JR aplib8nexttag aplib8shortmatch LD L,(IX+&00) DB &DD,&23+ flagdecde ; INC IX/DEC IX SRL L JR Z, aplib8donedepacking RL C JR aplib8domatch_with_2inc aplib8getbit DB &FD,&7C ; LD A,IYh ADD A JR NZ,aplib8getbit_ LD A,(IX + &00) DB &DD,&23+ flagdecde ; INC IX/DEC IX ADC A aplib8getbit_ DB &FD,&67 ; LD IYh,A RET aplib8getgamma LD HL,&0001 aplib8getgamma_ CALL aplib8getbit ADC HL,HL CALL aplib8getbit JR C, aplib8getgamma_ LD C,L RET aplib8donedepacking POP HL ; used for EX HL,(SP) PUSH IX POP HL RET ; Warning, A might not be 0!


Goto Top
CPC-POWER/CPCSOFTS, programming by Kukulcan © 2007-2018 all rights reserved.
Reproduction forbidden without any express authorization. All the game titles used belong to their respective owners.