17696
UTILITAIRE -> Divers
© _Public_Domain_ (2020)
 
 
 
RSX Sprint
cpc
 
 

NOTICE / MANUAL

TXT (1)

NOTICE TEXTE n° 1 (11.75 Ko)

; ####################################################################################### ; # RETROPOKE.CANALBLOG.COM #### Philippe Moulin ##### DEBUT 08/06/2020 MAJ 05/07/2020 # ; # RSX COMPATIBLE AVEC LES TROIS MODES DE L'AMSTRAD ET SUR TOUS LES CPC (464,664,6128) # ; ####################################################################################### ;;# TEXTE$="MON TEXTE": |SPRINT [,INDICATEUR], TEXTE$ # ; # - INDICATEUR EST OPTIONNEL. S'IL EST OMIS, IL CONSERVERA LA DERNIERE VALEUR # ; # INDICATEUR BIT 0 (VALEUR 1) = ROTATION 90 DEGRES # ; # INDICATEUR BIT 1 (VALEUR 2) = ROTATION VERTICALE (HAUT BAS) # ; # INDICATEUR BIT 2 (VALEUR 4) = ROTATION HORIZONTALE (GAUCHE DROITE) # ; # INDICATEUR BIT 3 (VALEUR 8) = DOUBLE LARGEUR # ; # INDICATEUR BIT 4 (VALEUR 16) = DOUBLE HAUTEUR # ; # INDICATEUR BIT 5 (VALEUR 32) = AFFICHAGE VERTICAL # ; # - VOUS POUVEZ COMBINER PLUSIEURS BIT'S POUR PLUSIEURS EFFETS A LA FOIS # ;;# EXEMPLE>>> T$="MON TEXTE": |SPRINT, 1 + 8 + 32, @T$ # ; # AFFICHERA LE TEXTE VERTICALEMENT AVEC ROTATION DE 90 DEGREE EN DOUBLE LARGEUR # ; # LE @ (A accent) DEVANT LA CHAINE EST OBLIGATOIRE SUR LES CPC 464 # ; ####################################################################################### PILE EQU #BDF7 ; ADRESSE PROVISOIRE DES MATRICES # ORG #A300 ; PEUT ETRE DEPLACE AVANT COMPILATION # FIXE_RSX ; # ; ########## MISE EN PLACE DU RSX SPRINT ###### ; # LD A, #C9 ; ON EMPECHE DE LANCER PLUSIEURS FOIS # LD (FIXE_RSX), A ; 'FIXE_RSX' POUR EVITER DES PLANTAGES # LD HL, QUATRE_OCTETS ; 'HL' POINTE SUR 4 OCTETS VIDE # LD BC, ADR_NOM_RSX ; 'BC' POINTE SUR 2 OCTETS CONTENANT # ; L'ADRESSE DES NOMS DES RSX # JP #BCD1 ; VECTEUR QUI FIXE LES RSX # ; # ADR_NOM_RSX DW NOM_RSX ; POINTE SUR L'ADRESSE DES NOMS DES RSX # JP RSX_SPRINT ; LISTE DES SAUTS VERS LES RSX # ; # NOM_RSX STR "SPRINT" ; LISTE DES NOMS DONNES AUX RSX # DB 00 ; LA LISTE DOIT FINIR PAR UN OCTET ZERO # ; # QUATRE_OCTETS DS 4 ; EMPLACEMENT DES 4 OCTETS RESERVES # RSX_SPRINT ; # ; ########## DEBUT DU PROGRAMME ############### ; ##################################### # DEC A ; 1 PARAMETRE DE TRANSMIS ? # JR Z, SANS_PARAMETRE_INDICATEUR ; OUI # DEC A ; 2 PARAMETRES MAXI # RET NZ ; SINON HORS JEU # LD A, (IX + 2) ; 'A' CONTIENT L'INDICATEUR # LD (SPRINT_INDIC + 1), A ; ON L'INSCRIT DANS L'EMPLACEMENT PREVU # ; # SANS_PARAMETRE_INDICATEUR ; # EX HL, DE ; 'HL'= DESCRIPTEUR DE CHAINE # LD A, (HL) ; 'A'= NOMBRE DE CARACTERE # OR A ; SI ZERO, ON SORT SINON PLANTAGE # RET Z ; # INC HL ; # LD E,(HL) ; # INC HL ; # LD D,(HL) ; 'DE' POINTE SUR LE 1er CARACTERE # ; # LD B, A ; C'EST 'B' QUI SERVIRA DE BOUCLE # FAIRE_TOUS_LES_CARACTERES ; POUR AFFICHER TOUS LES CARACTERES # LD A, (DE) ; 'A' CONTIENDRA LES CARACTERES DE LA # PUSH DE ; CHAINE (UN PAR UN) # PUSH BC ; # CALL #BBA5 ; 'HL' = ADR DE LA MATRICE DU CARACTERE # CALL #B906 ; QUI SE TROUVE DANS LA ROM AMSTRAD # LD BC, #08 ; ON RECUPERE LES 8 OCTETS DU CARACTERE # LD DE, PILE ; ET ON LES COPIE POUR LES MANIPULER # PUSH DE ; # LDIR ; TRANSFERT EFFECTUE # CALL #B909 ; ON FERME LA ROM AVANT DE POURSUIVRE # POP HL ; 'HL'= PILE # PUSH HL ; # ; # SPRINT_INDIC LD D, #00 ; 'D' CONTIENT L'INDICATEUR # ; ########## 90 DEGRES ######################## ; # BIT 0, D ; TESTER SI ON DOIT PIVOTER LE TEXTE # JR Z, DEGRES_OFF ; NON # PUSH HL ; OUI ROTATION 90 DEGRES A FAIRE # PUSH DE ; ON A BESOIN DE TOUS LES REGISTRES # EX HL, DE ; 'DE'=PILE # LD HL, PILE + 15 ; 'HL' POINTE SUR LE DERNIER OCTET DU # LD C, 8 ; 2eme CARACTERE # 8 OCTETS A 90 DEGRES # ; # DEGRES_LIGNE ; # PUSH DE ; # LD B, 8 ; 8 BITS PAR OCTET # ; # DEGRES_BITS ; # LD A, (DE) ; 'A' CONTIENT L'OCTET (BIT DE GAUCHE) # RRA ; ON LE POUSSE VERS LA GAUCHE # RR (HL) ; ET ON RECUPERE LE BIT DANS 'HL' # LD (DE), A ; ON PASSE A L'OCTET SUIVANT # INC DE ; # DJNZ, DEGRES_BITS ; JUSQU'A FAIRE 8 BIT'S DE CHAQUE OCTET # POP DE ; POUR OBTENIR UN OCTET # DEC HL ; ET ON DEGRESSE LES 8 OCTETS # DEC C ; # JR NZ, DEGRES_LIGNE ; ET PASSER TOUS LES BIT'S DES OCTETS # INC HL ; ON REVIENT SUR L'EMPLACELENT DU 2eme # LD BC, 8 ; ON TRANSFERT LA MATRICE OBTENUE # LDIR ; # POP DE ; # POP HL ; # ; # DEGRES_OFF ; # ; ########## ROTATION VERTICAL ################ ; # BIT 1, D ; EFFET VERTICAL ? # JR Z, VERTICAL_OFF ; NON # PUSH HL ; OUI, ON A BESOIN DES REGISTRES # PUSH DE ; # LD DE, PILE + 7 ; ON VA INVERSER LES 4 PREMIERS OCTETS # LD B, 4 ; AVEC LES 4 DERNIERS EN SENS OPPOSE # ; # VERTICAL_TOUT ; # LD A, (DE) ; 'A'=DERNIER OCTET # LD C, (HL) ; 'C'=PREMIER OCTET # LD (HL), A ; # LD A, C ; 'LD (DE), C' N'EST PAS POSSIBLE # LD (DE), A ; # INC HL ; # DEC DE ; # DJNZ, VERTICAL_TOUT ; # POP DE ; # POP HL ; # ; # VERTICAL_OFF ; # ; ########## ROTATION HORIZONTAL ############## ; # BIT 2, D ; ROTATION HORIZONTAL ? # JR Z, NON_HORIZONTAL ; NON -> NON_HORIZONTAL # PUSH HL ; OUI # LD C, 8 ; ON TRAITE 8 OCTETS PAR CARACTERE # ; # ROT_GD_LIGNE ; # LD A, (HL) ; A CONTIENT L'OCTET # ; LD B, 8 ; FAIRE UNE ROTATION DE 8 BIT'S PAR # ; OCTET # ROT_GD_BITS ; # RLA ; ON POUSSE L'OCTET VERS LA DROITE # RR (HL) ; ET ON LE RECUPERE PAR LA GAUCHE >'HL' # DJNZ, ROT_GD_BITS ; # ; # INC HL ; # DEC C ; # JR NZ, ROT_GD_LIGNE ; JUSQU'AU DERNIER OCTET # POP HL ; # ; # NON_HORIZONTAL ; # ; ########## DOUBLE LARGEUR ################### ; # BIT 3, D ; TESTER SI DOUBLE LARGEUR # JR Z, NON_DOUBLE_LARGEUR ; NON # PUSH HL ; OUI, ON TRAVAILLERA SUR 2 MATRICES # PUSH DE ; # LD DE, PILE + 8 ; 'DE' = 2eme MATRICE # LD C, 8 ; TOUT LES OCTETS DU SYMBOL # ; SERONT TRAITES # DOUBLE_TOUT ; # LD A, (HL) ; 'A' CONTIENT LES OCTETS # EX HL, DE ; 'HL' POINTE SUR LA 2eme MATRICE # LD B, 4 ; ON VA PASSER 4 BITS SUR UN OCTET # ; # DOUBLE_GAUCHE ; # RRA ; ON GLISSE CHAQUE BIT DE L'OCTET # RR (HL) ; QUE L'ON COPIE DAND 'HL' # SRA (HL) ; EN DEUX FOIS DE SUITE # DJNZ, DOUBLE_GAUCHE ; LE 2eme OCTET ET FINI # EX HL, DE ; ON COPIE LES 4 BITS RESTANT DANS # LD B, 4 ; LA 1ere MATRICE # ; # DOUBLE_DROITE ; # RRA ; ON PROCEDE DE LA MEME FACON # RR(HL) ; ON DUPLICATE LE BIT # SRA (HL) ; ET ON LE DOUBLE # DJNZ, DOUBLE_DROITE ; TOUT CA POUR UN OCTET # INC HL ; IL Y EN A 8 A FAIRE # INC DE ; # DEC C ; # JR NZ, DOUBLE_TOUT ; # POP DE ; # POP HL ; # ; # NON_DOUBLE_LARGEUR ; # ; ########## DOUBLE HAUTEUR ################### ; # BIT 4, D ; TESTER SI DOUBLE HAUTEUR # JR Z, NON_DOUBLE_HAUTEUR ; NON # PUSH HL ; OUI, ON TRAVAILLERA SUR 2*2 MATRICES # PUSH DE ; EN PARTANT DE LA FIN VERS LE DEBUT # LD DE, PILE + 23 ; 'DE' = FIN DE LA 3eme MATRICE # LD HL, PILE + 7 ; 'HL' = FIN DE LA PREMIERE MATRICE # ; # LD C, 2 ; IL FAUT DOUBLER LES 2 MATRICES POUR # FAIRE_DEUX_MATRICE ; LA DOUBLE LARGEUR + DOUBLE HAUTEUR # LD A, 4 ; POSITIONNERA 'DE' ENTRE 2 MATRICES # ; IL FAUT SAUTER 1 MATRICE DE LARGE # LD B, 8 ; FAIRE TOUS LES OCTETS DU CARACTERE # DOUBLE_HAUTEUR_UNE_MATRICE ; # PUSH BC ; ON COPIERA 2 FOIS (HL) VERS (DE) # LDD ; (DE) = (HL) # INC HL ; ON REVIENT SUR LA VALEUR DE (HL) # LDD ; (DE) = (HL) # DEC A ; LE REGISTRE 'A' EST LA POUR CHANGER # JR NZ, MATRICE_DE ; LA MATRICE DE 'DE' # LD B, 8 ; EN DECREMENTANT 'DE' DE 8 OCTETS # ; # SAUTER_UNE_MATRICE ; PERMET DE PASSER DE LA MATRICE 3 A LA # DEC DE ; MATRICE 1 # DJNZ, SAUTER_UNE_MATRICE ; # ; # MATRICE_DE ; # POP BC ; # DJNZ, DOUBLE_HAUTEUR_UNE_MATRICE ; # LD HL, PILE + 15 ; ON PASSE A LA SECONDE MATRICE QUI # LD DE, PILE + 31 ; CONSERNE LA DOUBLE LARGEUR # DEC C ; AVEC LE MEME PROCEDE + 8 OCTETS # JR NZ, FAIRE_DEUX_MATRICE ; # POP DE ; # POP HL ; # ; # NON_DOUBLE_HAUTEUR ; FIN DU TRAITEMENT DE LA MATRICE # ; ########## AFFICHER LE CARACTERE ############ ; # POP HL ; 'HL' = MATRICE # CALL AFFICHER_LE_CARACTERE ; ON AFFICHE LE CARACTERE 255 # BIT 4, D ; ET ON REGARDE SI IL FAUT AFFICHER LA # JR Z, DOUBLE_LARGEUR ; 3eme MATRICE POUR LA DOUBLE HAUTEUR # LD A, 8 ; OUI ALORS IL FAUT D'ABORD DEPLACER LE # CALL #BB5A ; CURSEUR EN DESSOUS DU 1er CARACTERE # LD A, 10 ; # CALL #BB5A ; # LD HL, PILE + 16 ; ON INDIQUE QU'IL S'AGIT DE LA 3eme # CALL AFFICHER_LE_CARACTERE ; MATRICE ET ON L'AFFICHE # LD A, 11 ; ON PLACE LE CURSEUR SUR LE CARACTERE # CALL #BB5A ; SUIVANT # ; # DOUBLE_LARGEUR ; # BIT 3, D ; EST-QU'IL FAUT AFFICHER EN DOUBLE # JR Z, HAUTEUR_OFF ; LARGEUR ? # LD HL, PILE + 8 ; OUI, ON POINTE 'HL' VERS LA MATRICE # CALL AFFICHER_LE_CARACTERE ; ET ON L' AFFICHE # BIT 4, D ; REGARDER SI ON EST EN DOUBLE HAUTEUR # JR Z, HAUTEUR_OFF ; NON # LD A, 8 ; OUI, ON DEPLACE LE CURSEUR EN DESSOUS # CALL #BB5A ; # LD A, 10 ; # CALL #BB5A ; # LD HL, PILE + 24 ; ON POINTE 'HL' VERS LA MATRICE # CALL AFFICHER_LE_CARACTERE ; CONCERNEE # LD A, 11 ; ET ON REPOSITIONNE LE CURSEUR # CALL #BB5A ; # ; # HAUTEUR_OFF ; # ; ########## AFFICHAGE VERTICAL ############### ; # BIT 5, D ; AFFICHAGE VERTICAL ? # JR Z, AFFICHAGE_SIMPLE_HAUTEUR ; NON, ON POURSUIT AU CARACTERE SUIVANT # LD A, 8 ; OUI, IL FAUT DEPLACER LE CURSEUR EN # CALL #BB5A ; TENANT COMPTE DE LA DOUBLE HAUTEUR ET # BIT 3, D ; DE LA DOUBLE LARGEUR # JR Z, AFFICHAGE_SIMPLE_LARGEUR ; # CALL #BB5A ; # ; # AFFICHAGE_SIMPLE_LARGEUR ; # LD A, 10 ; # CALL #BB5A ; # BIT 4, D ; # JR Z, AFFICHAGE_SIMPLE_HAUTEUR ; # CALL #BB5A ; # ; # AFFICHAGE_SIMPLE_HAUTEUR ; # ; ########## FIN DU TRAITEMENT DU CARACTERE ### ; # POP BC ; # POP DE ; # INC DE ; ON PASSE TOUS LES CARACTERES DE LA # DEC B ; CHAINE UN PAR UN # JP NZ, FAIRE_TOUS_LES_CARACTERES ; # RET ; ET ON TERMINE LA PROCEDURE # ; ############################################# ; ##################################### # AFFICHER_LE_CARACTERE ; # ; ########## SOUS ROUTINE SYMBOL ET PRINT ##### ; # PUSH DE ; SAUVER 'D' QUI SERT D'INDICATEUR # XOR A ; EFFACER 'A' ( 'A' = 0 ) # DEC A ; EQUIVAUT A 'LD A, #FF' EN PLUS RAPIDE # CALL #BBA8 ; VECTEUR SYMBOL 255,xx,xx,xx... ... # XOR A ; LES REGISTRE SONT HS # DEC A ; EQUIVAUT A 'LD A, #FF' EN PLUS RAPIDE # CALL #BB5A ; VECTEUR PRINT CHR$(255) # POP DE ; # RET ; # ; #######################################################################################
 



Goto Top
CPC-POWER/CPCSOFTS, programmation par Kukulcan © 2007-2024 tous droits réservés.
Reproduction sans autorisation interdite. Tous les titres utilisés appartiennent à leurs propriétaires respectifs.
Hébergement Web, Mail et serveurs de jeux haute performance