; ; Routine d'affichage de sprite ; Par Zik pour Quasar CPC 4 ; SPR EQU &B000 ; Adresse de stockage du sprite HAUT EQU 16 ; Hauteur du sprite en octets LARGE EQU 20 ; Largeur du sprite en octets ORG &4000 ; Programme @ assembler en &4000 LD A,2 ; A contient le num{ro du mode CALL &BC0E ; {cran d{sir{ et &BC0E le met. LD HL,&C000 DEBUT LD B,&F5 ; Cette petite boucle correspond ATTEND IN A,(C) ; au vecteur &BD19 qui attend la RRA ; fin du balayage de l'{cran pour JR NC,ATTEND ; rendre la main... CALL AFFICHE ; Copie du sprite SPR @ l'adresse HL MODIF1 INC HL LD A,L ; On teste si l'on est @ droite MODIF2 CP 80-LARGE ; ou @ gauche de l'{cran. MODIF3 CALL Z,RECTIF1 XOR A ; &BB1B teste tout le clavier et CALL &BB1B ; renvoie le code ASCII d'une touche CP 32 ; {ventuellement enfonc{e dans A JR NZ,DEBUT ; 32 = Espace. Si A=32 on passe au RET RET RECTIF1 PUSH HL LD A,(DATA1) ; On {crit un DEC HL @ la place du LD (MODIF1),A ; INC HL en MODIF1 (Voir texte) XOR A ; On {crit un 0 apr}s le CP de LD (MODIF2+1),A ; MODIF2 (Voir texte) LD HL,RECTIF2 ; On "poke" l'adresse de RECTIF2 LD (MODIF3+1),HL ; apr}s le CALL de MODIF3 (V.T.) POP HL RET RECTIF2 PUSH HL LD A,(DATA2) ; On {crit un INC HL @ la place du LD (MODIF1),A ; DEC HL en MODIF1 (Voir texte) LD A,80-LARGE ; On {crit un 80-LARGE apr}s le CP LD (MODIF2+1),A ; de MODIF2 (Voir texte) LD HL,RECTIF1 ; On "poke" l'adresse de RECTIF1 LD (MODIF3+1),HL ; apr}s le CALL de MODIF3 (V.T.) POP HL RET AFFICHE PUSH HL ; Revoici @ peu pr}s la routine LD DE,SPR ; d'affichage que l'on a vu dans la LD B,HAUT ; premi}re partir de ce cours. BOUCLE PUSH BC ; La seule diff{rence est que l'on PUSH HL ; consid}re que LDIR {crit en HL LD BC,LARGE ; et lit en DE jusqu'@ ce que l'on EX DE,HL ; ait @ utiliser cette commande que LDIR ; l'on encadre alors de deux jolis EX DE,HL ; EX DE,HL (qui inversent les contenus POP HL ; de DE et de HL). CALL BC26 ; On appelle notre BC26 POP BC ; Et on continue tant qu'il y a DJNZ BOUCLE ; des lignes @ afficher... POP HL RET BC26 LD A,H ; Notre fameux (et ador{) BC26... ADD A,8 ; Encore et toujours LD H,A ; Ca continue RET NC ; On revient ou pas ? LD BC,&C050 ; Ici on est rest{... ADD HL,BC ; et puis... RET ; on repart. DATA1 DEC HL ; On connait pas la valeur hexa des DATA2 INC HL ; commandes -> on {crit pour lire apr}s  ; Hauteur du sprite en octets LARGE EQU 20 ; Largeur du sprite en