Gate Array - Rasters - Splits rasters.
Avant de lire cette documentation, vous devez maitriser l'adressage de couleurs.
Pour cela vous devez lire le cours: Couleurs - Gate Array - Adressage.
La table des couleurs est elle aussi dans la documentation: Couleurs - Tableau des couleurs.
Vous devrez aussi avoir lu et compris le cours sur la Synchronisation avec le moniteur
Qu'est-ce qu'un raster:
Un raster est simplement un changement de couleur pendant le balayage.
Cela signifie simplement que nous allons changer la couleur d'une encre pendant que l'image est envoyée au moniteur.
Ainsi, une encre qui était par exemple bleue pourra être changée en rouge.
Ceci vous offre la possibilité de dépasser la limite des 16 couleurs à l'écran et donc d'utiliser la palette complète.
Il va de soit que sur CPC+ vous pourrez aller jusqu'à 4096 couleurs simultanément.
Il n'y a pas beaucoup de règles à respecter sinon celle d'avoir un interval régulier et fixe de 64 NOPS entre chaque changement de couleurs.
Cela s'explique simplement par le fait qu'une ligne durant 64 microsecondes (CRTC R0=63), il s'agit du temps disponible.
Vous devrez donc:
- Compter le temps pris par chaque instruction utilisée pour vos raster.
- Le déduire de 64.
- Compléter le temps entre deux envois de couleurs par des NOPs ou instructions diverses.
Notez que pour que vos rasters soient stables, vous devrez:
- Couper les interruptions pendant l'envoie des rasters
- Supprimer le jump du système en #38 et le remplacer par une routine à temps fixe
Petite précision tout de même: quand je parle de routine à temps fixe, le but est d'avoir des interruptions de durée fixes afin de rester
synchronisé au nop pret.
Dans le cas ou le temps ne serait pas fixe, vos rasters vont se déplacer horizontalement.
Voici un exemple de raster
ORG #8000 NOLIST ;On supprime le saut système DI LD HL,#C9FB ;il sera remplacé par un EI RET LD (#38),HL EI ;J'agrandit l'écran pour mieux voir LD BC,#BC01:OUT (C),C:LD BC,#BD00+48:OUT (C),C LD BC,#BC02:OUT (C),C:LD BC,#BD00+49:OUT (C),C LD BC,#BC06:OUT (C),C:LD BC,#BD00+34:OUT (C),C LD BC,#BC07:OUT (C),C:LD BC,#BD00+35:OUT (C),C ;La boucle commence ici FRAME LD B,#F5 FRM IN A,(C) RRA JR NC,FRM ;On attend le signal VBL HALT:HALT:HALT ;on patiente un peu DS 25,0 ;encore un peu pour commencer au bon endroit LD BC,#7F00:OUT (C),C ;On choisit l'encre 0 LD HL,TABLE_DE_COULEUR ;on pointe sur une table LD A,6 ;Nombre de couleurs à envoyer DI ;On coupe les interruptions RASTER LD E,(HL) ;2NOPs - On lit la table INC HL ;2NOPs - On incrémente pour la couleur suivante OUT (C),E ;4NOPs - On envoie la couleur DS 52,0 DEC A ;1NOP - On décrémente notre compteur de boucle JP NZ,RASTER ;3NOPs - Si non 0 on boucle ;Total des instructions = 12 NOPS ;On devra donc ajouter 64-12=52 NOPs ;J'ai donc ajouté dans la boucle ;un DS 53,0 qui écrit 53 fois NOP EI ;On remet les interruptions JP FRAME ;On boucle TABLE_DE_COULEUR DB 94,78,74,78,94,84 ;La table contient les numéro des couleurs
Qu'est-ce qu'un split raster:
Concrètement et dans le fonctionnement c'est exactement la même chose.
La seule chose qui dure c'est la durée.
Ici on changera la couleur plusieurs fois sur la même ligne.
Vous n'avez donc pas à respecter les 64 NOPs entre l'envois de chaque couleur.
Voici un exemple de split raster:
Notez que l'ayant inclu dans une boucle, j'ai respecté les 64 NOPS par ligne pour aligner les splits rasters.
ORG #8000 NOLIST DI LD HL,#C9FB LD (#38),HL EI LD BC,#BC01:OUT (C),C:LD BC,#BD00+48:OUT (C),C LD BC,#BC02:OUT (C),C:LD BC,#BD00+49:OUT (C),C LD BC,#BC06:OUT (C),C:LD BC,#BD00+34:OUT (C),C LD BC,#BC07:OUT (C),C:LD BC,#BD00+35:OUT (C),C FRAME LD B,#F5 FRM IN A,(C) RRA JR NC,FRM HALT:HALT:HALT DS 50,0 LD BC,#7F00:OUT (C),C LD D,84 ;noir LD E,76 ;rouge LD H,75 ;blanc LD L,64 ;gris LD A,16 ;notre hauteur DI SPLIT_RASTER OUT (C),E ;4 NOPs OUT (C),D ;4 NOPs OUT (C),H ;4 NOPs OUT (C),L ;4 NOPs DS 44,0 ;On ajoute 52 NOPS DEC A ;1 NOP JP NZ,SPLIT_RASTER ;3 NOPS ;TOTAL 20 NOPS ;64-20=44 ;On doit donc ajouter dans notre boucle 44 NOPS EI JP FRAME