; #######################################################################################
; ROUTINE D'AFFICHAGE TGV EN MODE 2 ### Lg=138 OCTETS ###   PHILIPPE MOULIN (RETROPOKE)	#
; COMPATIBLE 464, 664, 6128 464+ 6128+							#
; AVEC TEST NOMBRE PARAMETRE DE SORTIE ECRAN ANTI PLANTAGE				#
; RETROPOKE (PHILIPPE MOULIN) LE 08/05/2026						#
;; CE >>> MEMORY &9BCF				;					#
MATRICE		EQU #9DFF			; EMPLACEMENT MATRICE DE 224 CARACTERES	#
ORG #A500					; CALL &A500				#
; #######################################################################################
INIT_RSX_SYMBOLS				;					#
; 	RECUPERER L'EMPLACEMENT DES CARACTERES EN REMPLACEMENT DU SYMBOL AFTER 32	#
	LD A, 32				; 					#
	CALL #BBA5 				; 'HL'= ADRESSE TABLE MATRICE CHR$(32)	#
	CALL #B906				; ACTIVER LA MEMOIRE ROM POUR LA LIRE	#
;	TRANSFERER LA MATRICE			;					#
	LD DE, MATRICE				; DESTINATION				#
	LD BC, 1824				; (256-32)* 8 LIGNES			#
	LDIR					;					#
	LD HL, #BDF7				; ZONE LIBRE DE #BDF7 A #BE3F		#
	LD BC, ADR_NOM_RSX			; 'BC'= ADRESSE DES NOMS DES RSX       	#
	JP #BCD1				; VECTEUR QUI FIXE LES RSX EN MEMOIRE	#
						;					#
    ADR_NOM_RSX DW NOM_RSX			; 2 OCTETS PRIS PAR LE VECTEUR #BCD1	#
	JP RSX_AFFICHER_LA_CHAINE		; SUIVIS DES SAUTS VERS LES ROUTINES	#
						;					#
	NOM_RSX					; LISTE DES NOMS DONNES AUX RSXs	#
	STR "RAPIDO"				; LA DERNIERE LETTRE DES NOMS DOIT	#
	DB 00					; TERMINER PAR UN ZERO POINTE		#
;						;					#
; #######################################################################################
RSX_AFFICHER_LA_CHAINE				;					#
; 	TROUVER L'EMPLACEMENT DE LA CHAINE TRANSMISE EN DERNIER PARAMETRE		#
	EX HL, DE				; 'HL'= ADR. DU DESCRIPTEUR DE CHAINE	#
	LD C, (HL)				; 'C'=LONGUEUR DE LA CHAINE		#
	INC HL					;					#
	LD E, (HL)				;					#
	INC HL					;					#
	LD D, (HL)				; 'DE' POINTE SUR LE PREMIER CARACTERE	#
	LD H, (IX + 4)				; 'H'= COLONNE				#
	LD L, (IX + 2)				; 'L'= LIGNE				#
	CP A, 3					; EST_CE QUE LES COORDONNEES Y SONT ?	#
	JR Z, AVEC_COL_LIG			; OUI					#
	DEC A					; NON, ALORS REGARDER S'IL Y A BIEN 1 	#
	RET NZ					; PARAMETRE ? NON, ALORS SORTIR		#
; 	OUI, IL FAUT RECUPERER LES COORDONNEES TEXTE (LOCATE)				#
	CALL #BB78				; 'H'= COLONNE 'L'= LIGNE		#
;						;					#
    AVEC_COL_LIG				;					#
; 	TROUVER L'ADRESSE ECRAN AVEC LES PARAMETRES (Colonne 1-80, Ligne 1-25)		#
		DEC H				;					#
		DEC L				;					#
		CALL #BC1A			; (HL'= ADRESSE ECRAN POSITION CURSEUR	#
;	TESTER SI ON EST BIEN EN MODE 2		;					#
	BIT 0, B				; MODE 2, 1 LIGNE=1 OCTET		#
	RET Z					; SORTIR SI ON EST PAS EN 'MODE 2'	#
	EX HL, DE				; 'HL' POINTE SUR LA CHAINE ET		#
						; 'DE'=SUR LA POSITION ECRAN		#
; 	PASSER TOUS LES CARACTERES DE LA CHAINE	; 'C'= NOMBRE DE CARACTERES		#
	    BOUCLE_CHAINE			; RECHERCHE LA MATRICE DU CARACTERE 	#
	    PUSH HL				; 					#
		LD A, (HL)			; 'A'=CARACTERE DE LA CHAINE		#
		SUB A, 32			; AJUSTER POUR POINTER SUR 'ESPACE'	#
		LD L, A				; IL FAUT,				#
		LD H, 0				; MULTIPLIER LE CARACTERE PAR 8 OCTETS	#
	    PUSH DE				; RAPPEL> 'DE'=POSITION ECRAN		#
		ADD HL, HL			; 'HL'= 'HL' * 2			#
		ADD HL, HL			; ON MULTIPLIE PAR 8 CAR LA MATRICE 	#
		ADD HL, HL			; D'UN CARACTERE CONTIENT 8 OCTETS	#
						; AJOUTER L'ADRESSE DE LA MATRICE	#
		LD DE, MATRICE 			; EMPLACEMENT CARACTERES ESPACE		#
		ADD HL, DE			; 'HL' POINTE SUR MATRICE DU CARACTERE	#
	    POP DE				;					#
	    PUSH DE				;					#
;						; AFFICHER LES 8 LIGNES DU CARACTERE	#
	FAIRE_8_LIGNES				; EN MODE 2, C'EST TRES SIMPLE		#
	; LIGNE 1				;					#
	LD A, (HL)				; IL FAUT TRANSFERER LES OCTETS DE LA	#
	INC HL					; MATRICE VERS LA POSITION ECRAN	#
	LD (DE), A				; SANS OUBLIER DE DESCENDRE D'UNE LIGNE	#
	; LIGNE 2				;					#
	SET 3, D 				;					#
	LD A, (HL)				; 					#
	INC HL					; 					#
	LD (DE), A				; 					#
	; LIGNE 3				;					#
	RES 3, D 				;					#
	SET 4, D				;					#
	LD A, (HL)				;					#
	INC HL					;					#
	LD (DE), A				;					#
	; LIGNE 4				;					#
	SET 3, D 				;					#
	LD A, (HL)				; IL FAUT TRANSFERER LES OCTETS DE LA	#
	INC HL					; MATRICE VERS LA POSITION ECRAN	#
	LD (DE), A				; SANS OUBLIER DE DESCENDRE D'UNE LIGNE	#
	; LIGNE 5				;					#
	RES 3, D 				;					#
	RES 4, D				;					#
	SET 5, D				;					#
	LD A, (HL)				;					#
	INC HL					;					#
	LD (DE), A				;					#
	; LIGNE 6				;					#
	SET 3, D 				;					#
	LD A, (HL)				;					#
	INC HL					;					#
	LD (DE), A				;					#
	; LIGNE 7				;					#
	RES 3, D 				;					#
	SET 4, D				;					#
	LD A, (HL)				; IL FAUT TRANSFERER LES OCTETS DE LA	#
	INC HL					; MATRICE VERS LA POSITION ECRAN	#
	LD (DE), A				; SANS OUBLIER DE DESCENDRE D'UNE LIGNE	#
	; LIGNE 8				;					#
	SET 3, D 				;					#
	LD A, (HL)				;					#
	INC HL					;					#
	LD (DE), A				;					#
						;					#
	    POP DE				; RECUPERER LA POSITION SUR L'ECRAN	#
		INC DE				; ET ALLER 1 CARACTERE SUR LA DROITE	#
	    POP HL				; RECUPERER L'ADRESSE DE LA CHAINE	#
		INC HL				; POUR TRAITER LE CARACTERE SUIVANT	#
		DEC C				; 'C'= NOMBRE DE CARACTERE DE LA CHAINE	#
		JR NZ, BOUCLE_CHAINE		; ET BOUCLER TOUTE LA CHAINE		#
		RET 				; TERMINER      			#
; #######################################################################################
; #######################################################################################
FIN