ASMtrad CPC

Apprenez l'assembleur Z80

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:

Notez que pour que vos rasters soient stables, vous devrez:

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
            
X

CONNEXION




Inscription