ORG #a400 TabPt EQU #200 DI LD IX,TabPt ; Adresse des points à afficher LD IY,Vide ; Adresse d'un buffer "vide" debutprog: LD B,#F5 Sync: IN A,(C) ; Attendre la VBL RRA JR NC,SynC LD BC,#7F10 LD A,#54 OUT (C),C OUT (C),A ; Border noir debut: LD D,#A5 ; Adresse du masque des points = #A500 LD BC,#C0 ; C = adresse début mémoire vidéo, B = 0 ; ; Efface l'ancienne image ; Clear: LD A,(IY+1) ; Adresse poids fort mémoire vidéo à effacer LD E,A LD L,(IY+0) ; Adresse poids faible mémoire vidéo à éffacer OR L ; Y-a-t-il encore des points à effacer ? JR Z,FinClear ; Sinon, fini ! LD A,E OR C ; Pour adresse mémoire vidéo débutant en #C000 LD H,A LD (HL),B ; Efface le point INC IY INC IY JR Clear ; Passer au point suivant FinClear: PUSH IX ; On a fini, d'effacer l'ancienne image, POP IY ; On fait Ancienne image = nouvelle image Trace: LD A,(IX+1) ; Adresse poids fort mémoire vidéo à afficher LD E,A ; bits 7 et 6 de E = numéro octet LD L,(IX+0) ; Adresse poids faible mémoire vidéo à afficher OR L JR Z,Fin ; Adresse = 0 -> trame finie LD A,E OR C ; C = #C0 -> mettre adresse mémoire vidéo en #C000 LD H,A ; HL = adresse mémoire vidéo LD A,(DE) ; récupère octet (#A500 à #A5FF) XOR (HL) ; on aurai pu faire aussi un OR LD (HL),A ; ou bien directement un LD (HL),A INC IX INC IX ; passer au point suivant JR Trace fin: INC IX INC IX LD A,(IX+0) ; Fin animation ? LD B,(IX+1) OR B JR NZ,FinSuiv LD IX,TabPt ; Réinitialise pointeur début animation FinSuiv: LD BC,#7F10 LD A,#4B OUT (C),C ; Border en blanc (pour mesure VBL) OUT (C),A CALL TSPACE ; Test touche Espace RLA RET C ; Retour si espace appuyé JR DebutProg ; Sinon, on boucle ; ; Test la touche espace avec le PPI... Du classique... ; TSPACE: LD A,#45 TCLAV: LD (TCLAV1+1),A:; A=N. LIGNE XOR A LD BC,#F40E OUT (C),C LD BC,#F6C0 OUT (C),C OUT (C),A LD BC,#F792 OUT (C),C TCLAV1: LD BC,#F645 OUT (C),C LD B,#F4 IN A,(C) CPL LD BC,#F782 OUT (C),C RET ; ; Adresse vide pour la première image: rien à effacer ; Vide: DB 0,0 ; ; Table des valeurs des octets pour chaque points ; ORG #A500 DS 64,#88 ; Points en x = 0 DS 64,#44 ; Points en x = 1 DS 64,#22 ; Points en x = 2 DS 64,#11 ; Points en x = 3