; POUR LES 2 LIGNES MAJ JUIN 2024 ; RETROPOKE - PHILIPPE MOULIN #
; RSX |RUNE, fonte, @chaine$ ; #
; #######################################################################################
QUATRE_OCTETS EQU #BDF7 ; QUATRES OCTETS POUR VECTEUR RSX #BCD1 #
COPIE_SYMBOL EQU #BE00 ; ZONE DE TRANFERT POUR MATRICE 255 #
; #######################################################################################
; #######################################################################################
ORG #A500 ; DEBUT #A500 FIN #A598 152 OCTETS #
FIXE_RSX ; IMPLANTATION DES RSX #
LD BC, ADR_NOM_RSX ; 'BC' POINTE SUR 2 OCTETS ADR. NOM RSX #
LD HL, QUATRE_OCTETS ; 'HL' POINTE SUR 4 OCTETS DE LIBRE #
JP #BCD1 ; VECTEUR QUI FIXE LES RSX #
NOM_RSX STR "RUNE" ; |FONTE, FONTE, @A$ |FONTE, PADY #
DB 00 ; LA LISTE DOIT FINIR PAR UN OCTET ZERO #
ADR_NOM_RSX DW NOM_RSX ; POINTE SUR L'ADRESSE DES NOMS DES RSX #
; COMME IL N'Y A QU'UNE COMMANDE RSX, IL N'EST PAS BESOIN DE CODE 'JP RSX_RUNE' #
; #######################################################################################
; #######################################################################################
RSX_RUNE ; |RUNE, fonte (de 0 a 127), @chaine$ #
DEC A ; VERIFIER LE NOMBRE DE PARAMETRE #
DEC A ; SI LE NOMBRE DE PARAMETRE N'EST PAS #
RET NZ ; CORRECT, ON ARRETE LA PROCEDURE #
EX HL, DE ; 'HL'= ADR. DU DESCRIPTEUR DE CHAINE #
LD A, (HL) ; 'A'= NOMBRE DE CARACTERE DE LA CHAINE #
OR A ; SI LA CHAINE EST VIDE ON SORT #
RET Z ; #
LD B, A ; 'B' SERA UTILISE POUR DECOMPTER LA #
INC HL ; LONGUEUR DE LA CHAINE #
LD E, (HL) ; #
INC HL ; #
LD D, (HL) ; 'DE' POINTE SUR LE PREMIER CARACTERE #
; #
FAIRE_TOUTE_LA_CHAINE ; #
PUSH DE ; 'DE' POINTE SUR LA CHAINE #
PUSH BC ; 'B'= LONHUEUR DE LA CHAINE #
LD A, (DE) ; 'A'= CARACTERE DANS LA CHAINE #
LD DE, COPIE_SYMBOL ; 'DE' POINTE SUR UN TABLE DE 8 OCTETS #
PUSH DE ; DE #BE00 A #BE07 (LIBRE) #
CALL #BBA5 ; VECTEUR ADR DU CARACTERE DANS 'HL' #
CALL #B906 ; ACTIVER LA MEMOIRE ROM POUR LA LIRE #
LD BC, 8 ; 'BC'= NOMBRE D'OCTET A RECUPERER #
LDIR ; TRANSFERER LES 8 OCTETS DU CARACTERE #
CALL #B90C ; FERMER LA MEMOIRE ROM #
XOR A ; 'A'= 0 #
DEC A ; EQUIVAUT A ('A' = 255) #
CALL #BBA5 ; RECHERCHE L'EMPLACEMENT DU CARAC. 255 #
PUSH HL ; 'HL' POINTE SUR L'ADRESSE MATRICE 255 #
POP IY ; ET LA TRANSFERER DANS 'IY' #
POP HL ; 'HL' POINTE SUR LA TABLE RESERVEE #
LD B, 8 ; 'B'= 8 LIGNE PAR CARACTERE #
LD D, B ; 'D' SERVIRA A TESTER SI PAIR/IMPAIR #
; #
FAIRE_8OCTETS ; UN CARACTERE CONTIENT 8 LIGNES #
LD C, (IX + 2) ; 'C' INDICATEUR DE LA OU DES FONTES #
LD A, (HL) ; CHOISIE EN PARAMETRE #
LD E, A ; #
FONTE_1 ; FONTE 1 (GRELOTTE) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 1) #
JR NZ, FONTE_2 ; NON, ON PASSE A LA FONTE SUIVANTE #
BIT 0, B ; TESTER LES LIGNES PAIRS POUR DECALAGE #
JR Z, FONTE_2 ; NON #
SRL A ; OUI ON DECALE LA LIGNE VERS LA DROITE #
; #
FONTE_2 ; FONTE 2 (BIDASSE) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 2) #
JR NZ, FONTE_3 ; NON #
AND #EF ; SUPPRIMER LE PIXEL DU MILIEU #
; #
FONTE_3 ; FONTE 3 (DISNEYGE) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 3) #
JR NZ, FONTE_4 ; NON #
SRL E ; OUI, ALORS ENLEVER 1/2 VALEUR #
DEC D ; TOUTES LES 3 LIGNES #
BIT 2, D ; #
JR NZ, FONTE_3_NON ; NON #
OR E ; #
JR FONTE_4 ; ET ON POURSUIT #
; #
FONTE_3_NON ; NON #
AND E ; #
; #
FONTE_4 ; FONTE 4 (LARADINE) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 4) #
JR NZ, FONTE_5 ; NON #
SRL E ; #
AND E ; #
; #
FONTE_5 ; FONTE 5 (GROSTAS) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 5) #
JR NZ, FONTE_6 ; NON #
SRL E ; #
OR E ; #
; #
FONTE_6 ; FONTE 6 (MABOULE) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 6) #
JR NZ, FONTE_7 ; NON #
SRL E ; #
DEC D ; #
BIT 2, D ; #
JR NZ, FONTE_6_NON ; NON #
AND E ; #
JR FONTE_7 ; #
; #
FONTE_6_NON ; #
OR E ; #
; #
FONTE_7 ; FONTE 7 (FAUXFILET) #
DEC C ; TESTER SI PARAMETRE FONTE ( = 7) #
JR NZ, FONTE_FIN ; NON #
BIT 0, B ; REGARDER LES LIGNES SONT PAIRS #
JR Z, FONTE_7_NON ; NON LIGNE IMPAIR #
AND #AA ; APPLIQUER UN FILTRE #
JR FONTE_FIN ; ET POURSUIVRE #
; #
FONTE_7_NON ; LIGNE PAIR #
AND #55 ; APPLIQUER UN FILTRE OPPOSE #
; #
FONTE_FIN ; #
LD (IY), A ; INSCRIRE VALEUR DANS LA MATRICDE 255 #
INC IY ; ON REMET LES POINTEURS A JOUR #
INC HL ; #
DJNZ, FAIRE_8OCTETS ; ET ON BOUCLE SUR LES 8 LIGNES #
XOR A ; AFFICHER LE CARACTERE 255 #
DEC A ; EQUIVALENT LD A, 255 ('A'=0 'A'=255) #
CALL #BB5A ; VECTEUR AFFICHE 'A' CHR$(255) #
POP BC ; ON RECUPERE LE NOMBRE DE CARACTERE #
POP DE ; AINSI QUE LA POSITON DANS LA CHAINE #
INC DE ; ON PASSE AU SUIVANT #
DJNZ, FAIRE_TOUTE_LA_CHAINE ; ET ON RECOMMENCE JUSQU'AU DERNIER #
RET ; CARACTERE DE LA CHAINE #
; #######################################################################################
FIN ; #98