; Programmation> Philippe Moulin Le 19/06/2019
ORG #A000 ; RSX 'SYMBOLE' POUR LE 'MODE 2' DE L'AMSTRAD SEULEMENT
FIXER_LE_RSX
LD A, #C9 ; Des le premier appel, on inscrit un 'RET' en debut
LD (FIXER_LE_RSX), A ; Pour eviter de rappeler la routine qui fixe le RSX
LD BC, AdrNomRSX ; 'BC' pointe sur l'adresse des noms des RSX
LD HL, BuffetRSX ; 'HL' pointe sur un buffet de 4 octets reserve par la routine
JP #BCD1 ; Fabuleuse routine qui fixe les RSX
AdrNomRSX DW NOMduRSX ; 2 octets qui stocks l'adresse des noms
JP RSXSYMBOLE ; Suivis du saut en direction de la routine 'SYMBOLE'
BuffetRSX DS 4 ; Zone de 4 Octets reserves par le vecteur RSX #BCD1
NOMduRSX ; Adresse des noms des RSX
STR "SYMBOLE" ; Nom du RSX qui servira pour les appeles depuis le BASIC
; EXEMPLE >>> |SYMBOLE, Col, Lig, OctetGetD-01, OctetGetD-02, OctetGetD-03, Etc etc...
RSXSYMBOLE ; ########## Debut de la routine
CP A, 3 ; Il faut 3 parametre au minimum
RET C ; Sinon il n'y a rien a afficher
SUB A, 3 ; On va remonter les parametres jusqu'a ce que 'IX' pointes
LD C, A ; Sur le parametre 'OctetGetD-01'
SLA C ; 'IX' contient deux octets pour chaque parametre
LD B, 0 ; 'BC'=(Nombre de parametre - 3) * 2
ADD IX, BC ; 'IX' pointe sur le parametre 'OctetGetD-01'
INC A ; 'A' contient le nombre de parametre - 2 (Col, Lig)
PUSH AF ; Que l'on sauvegarde pour faire une boucle
LD H, (IX + 3)
LD L, (IX + 2) ; 'HL'=Ligne de 0 a 399
SRL H ; 'HL' Doit etre adapte pour le vecteur
RR L ; Et doit etre divise par deux car il n'y a que 200 lignes reellement
LD D, (IX + 5)
LD E, (IX + 4) ; 'DE'=Colonne de 0 a 639
CALL #BC1D ; Vecteur systeme ('HL'=Adresse d'ecran)
POP BC ; 'HL'=positionEcran 'IX'=OctetGetD-01 'B'=NbParametre
RSXSYMBOLE_NbParametre ; Debut de la boucle
LD A, (IX + 1) ; 'A' contient l'octet a afficher a gauche
LD (HL), A
INC HL ; On passe a l'octet sur la droite
LD A, (IX + 0) ; 'A' contient l'octet a afficher a droite
LD (HL), A
DEC IX ; On passe au parametre suivant
DEC IX ; 2 octets par parametre
LD DE, #800-1 ; Il faut aussi descendre d'une ligne de l'ecran
ADD HL, DE ; La formule est (HL=HL+#800-nb octets)
JR NC, RSXSYMBOLE_LigneDeDessous ; Mais il faut reajuster si on sort de l'ecran
LD DE,#C000+80 ; Pour ne pas ecraser les donnees et ne pas faire planter
ADD HL, DE ; l'Amstrad CPC...
RSXSYMBOLE_LigneDeDessous
DJNZ, RSXSYMBOLE_NbParametre ; Et on fait autant de ligne qu'il y a de parametre
RET