17693
UTILITY -> Other
© _Public_Domain_ (2020)
 
 
 
Zip-Zone
cpc
 
 

Last Update : Thursday 03 September 2020 at 18 h 42

Manual n° 1

; ############################################################################### ; COMPACTEUR DE ZONE D'ECRAN - PHILIPPE MOULIN - LE 01/08/2020 MAJ 10/08/2020 # ; LES IMAGES PEUVENT ETRE COMPACTEES AVEC OU SANS LE DECOMPACTEUR EU PEUVENT # ; S'AFFICHER N'IMPORTE OU SUR L'ECRAN. COMPATIBLE DANS LES 3 MODES D'ECRAN ! # ; CE PROGRAMME S'ACCOMPAGNE DU FICHIER "DEZIP.ASM # ; ############################################################################### DESTINATION EQU #BDF7 ; PAR DEFAUT #4000 LIBRE # SOURCE EQU #BDF9 ; PAR DEFAUT #C000 ECRAN # LONG EQU #BDFB ; RESULTAT FIN_DESTINATION-DESTINATION # LARG_HAUT EQU #BDFD ; PAR DEFAUT #50C9 COL, LIG # LG_DECOMPACTEUR EQU FIN-DECOMPACTEUR ; LONGUEUR DU PROGRAMME DE DECOMPACTAGE # TOKEN EQU #FF ; OCTET DE COMPARAISON # ; ############################################################################### ORG #A400 ; # INIT_RSX ; INITIALISER LES RSX # 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_ZIP ; LISTE DES SAUTS VERS LES RSX # JP RSX_DEZIP ; LISTE DES SAUTS VERS LES RSX # JP RSX_ZIPOP ; LISTE DES SAUTS VERS LES RSX # JP RSX_ZIPLONG ; LISTE DES SAUTS VERS LES RSX # ; # QUATRE_OCTETS DS 4 ; EMPLACEMENT DES 4 OCTETS RESERVES # NOM_RSX STR "ZIP" ; LISTE DES NOMS DONNES AUX RSX # STR "DEZIP" ; LISTE DES NOMS DONNES AUX RSX # STR "ZIPOP" ; LISTE DES NOMS DONNES AUX RSX # STR "ZIPLONG" ; LISTE DES NOMS DONNES AUX RSX # DB 00 ; LA LISTE DOIT FINIR PAR UN OCTET ZERO # ; # ; ############################################################################### RSX_ZIP ; # CP A, 6 ; CONTROLER LE NOMBRE DES PARAMETRES # JP NC, ERREUR ; >5 ON RETOURNE AU BASIC # BIT 1, A ; SORTIR SI PARAMETRE =2 OU =3 # JP NZ, ERREUR ; IL RESTE 0,1,4 OU 5 PARAMETRES # LD HL, #4000 ; INITIALISER LA DESTINATION PAR DEFAUT # BIT 0, A ; SAUF SI ON L'INDIQUE EN PARAMETRE 1,5 # JR Z, DESTINATION_OK ; SI LE NOMBRE DE PARAMETRES =0 OU =4 # EX HL, DE ; NOUVELLE DESTINATION DANS 'HL' # INC IX ; SUPPRIMER LE DERNIER PARAMETRE DE 'IX'# INC IX ; # ; # DESTINATION_OK ; # LD (ADR_DESTINATION + 1), HL ; SERVIRA A CALCULER LA LONGUEUR TOTALE # LD (ADR_IX + 2), HL ; ADR. PAR DEFAUT, SANS LE DECOMPACTEUR # LD HL, #C000 ; INITIALISER LA SOURCE PAR DEFAUT # LD BC, #50C9 ; AINSI QUE LA LARGEUR ET HAUTEUR # CP A, 4 ; REGARDER SI ON DESIRE LES MODIFIER # JR C, DEBUT_OK ; SINON ON POURSUIT PLUS LOIN # LD D, 0 ; ADAPTER LA POSITION DU CURSEUR POUR # LD E, (IX + 6) ; TROUVER L'ADR. SUR L'ECRAN # LD H, D ; 'DE'=COL # LD L, (IX + 4) ; 'HL'=LIG # LD A, (IX + 2) ; VERIFIER QUE LA COL+LARG<=80 # LD B, A ; 'B'=LARGEUR EN OCTET # OR A ; EMPECHER LES PLANTAGES DES BOUCLES # JP Z, ERREUR ; EGALES A ZERO # ADD A, E ; 'A'= COL+LARGEUR # CP A, 81 ; SI PLUS DE 80 DE LARGEUR # ; # ; ADRESSE RELAIS VERS ERREUR # JP NC, ERREUR ; ON SORT # LD A, (IX + 0) ; RECUPERER LA HAUTEUR # OR A ; NE PAS FAIRE DE BOUCLE A ZERO # JP Z, ERREUR ; # LD C, A ; # LD A, (IX + 4) ; 'L'=LIG # LD L, A ; # CP A, 200 ; SI PLUS GRAND QUE L'ECRAN, ON SORT # JP NC, ERREUR ; # DEC C ; LA HAUTEUR DOIT ETRE < QUE LES LIGNES # CP A, C ; SI LIG<HAUTEUR - 1 # JP C, ERREUR ; CA SORT DE L'ECRAN, ON QUITTE # INC C ; REPOSITIONNE LA HAUTEUR # INC C ; + LA VALEUR 0 QUI DOIT ETRE CALCULER # PUSH BC ; # CALL #BC11 ; AJUSTER 'DE' EN FONCTION DU MODE # ADD A, A ; 'A'=MODE x 2 # ; # CALCUL_MODE ; # SLA E ; MULTIPLIER 'DE' PAR 2-MODE0 4-MODE1 # RL D ; 8-MODE2 (de 0 a 639) # SRL A ; DIVISER POUR MIEUX MULTIPLIER # JR NZ, CALCUL_MODE ; # CALL #BC1D ; VECTEUR ADR. ECRAN 'HL'= ADR.ECRAN # POP BC ; # ; # DEBUT_OK ; # LD (SOURCE), HL ; UTILISER PAR LE COMPACTEUR # LD (LARG_HAUT), BC ; UTILISER PAR LE COMPACTEUR # LD (ADR_ECRAN + 1), HL ; UTILISER PAR LE DE-COMPACTEUR # LD (COL_LIG + 1), BC ; UTILISER PAR LE DE-COMPACTEUR # PUSH HL ; SAUVER LES DONNEES PUIS TRANFERER # PUSH BC ; LE DE-COMPACTEUR SI L'OPION EST ACTIF # LD HL, (ADR_DESTINATION + 1) ; RECUPERER L'ORIGINE DE LA DESTINATION # LD D, H ; 'PUSH HL' # LD E, L ; 'POP DE' EN MIEUX # ; # AVEC_SANS_DECOMPACTEUR ; LE DECOMPACTEUR DOIT'IL ETRE INCLUS ? # JR AVEC_DECOMPACTEUR ; OUI PAR DEFAUT # ; # AVEC_DECOMPACTEUR ; # LD BC, 5 ; IL FAUT SAUTER 5 OCTETS POUR QUR LE # ADD HL, BC ; DE-COMPACTEUR RETROUVE LE DEPART # LD BC, LG_DECOMPACTEUR ; 'BC'= LONGUEUR DU PROGRAMME DE DECOMP.# ADD HL, BC ; 'HL'= DESTINATION + LONGUEUR DECOMP. # LD (ADR_IX + 2), HL ; L'INSCRIRE POUR LE DECOMPACTEUR # LD HL, DECOMPACTEUR ; 'HL'= ADR. SOURCE DU DUCOMPACTEUR # LDIR ; LE DECOMPACTEUR EST TRANSFERER # SANS_DECOMPACTEUR ; DEVIATION POUR NE PAS L'INCLURE # POP BC ; 'BC'= LARG_HAUT # POP HL ; 'HL'= SOURCE (ECRAN) # EX HL, DE ; ON INSCRIT SOIT AU DEBUT, SOIT APRES # LD (HL), E ; LE DE-COMPACTEUR, LES VARIABLES # INC HL ; UTILISEES DE L'IMAGE # LD (HL), D ; DEPART ADR.ECRAN # INC HL ; # LD (HL), C ; LARGEUR # INC HL ; # LD (HL), B ; HAUTEUR # INC HL ; # TOKEN_01 LD A, TOKEN ; VALEUR DU TOKEN # LD (HL), A ; # INC HL ; # EX DE, HL ; # LD (DESTINATION), DE ; MEMORISER POUR LE COMPACTAGE # ; # COMPACTER_LES_OCTETS ; # LD D, 1 ; COMPTEUR D'OCTETS EGAUX QUI SE SUIVENT# LD A, (HL) ; 'A'=OCTET A COMPARER # LD E, A ; 'E' SERT A SAUVEGARDER L'OCTET # ; # NB_OCTETS_EGAUX ; # INC HL ; ON DOIT PASSER AU SECOND OCTET MAIS # DEC B ; SI ON EST EN FIN DE COLONNE, IL FAUT # JR NZ, PAS_DESCENDRE_HL ; DESCENDRE D'UNE LIGNE # DEC C ; # JR Z, FIN_DE_COMPACTAGE ; ET SI IL N'Y EN A PLUS # LD A, (LARG_HAUT + 1) ; IL FAUT REINITIALISER LA LARGEUR # LD B, A ; PAR DEFAUT #50 (80 OCTETS # LD HL, (SOURCE) ; PUIS DESCENDRE D'UNE LIGNE # CALL #BC26 ; J'UTILISE LE VECTEUR # LD (SOURCE), HL ; ON SAUVE L'EMPLACEMENT # LD A, E ; ET ON RECUPERE L'OCTET A COMPARER # ; # PAS_DESCENDRE_HL ; # CP A, (HL) ; EST-CE QUE LES DEUX OCTETS SONT EGAUX?# JR NZ, INSCRIRE_DE ; NON ALORS ON SORT DE LA BOUCLE # INC D ; OUI ALORS COMPTEUR + 1 # JR NZ, NB_OCTETS_EGAUX ; MAIS SI LE COMPTEUR DEPASSE 255 # DEC D ; ON LE RAMENE A 255 # ; # INSCRIRE_DE ; # PUSH HL ; # LD HL, (DESTINATION) ; ON RECUPERE LA DESTINEE # LD A, E ; ET LA COULEUR # TOKEN_02 CP A, TOKEN ; SI C'EST LA MEME VALEUR QUE LE TOKEN ?# JR Z, VOIR_PLUS_TOKEN ; ON INDIQUE QUE C'EST UNE BOUCLE AUSSI # LD A, D ; SINON ON REGARDE LE NOMBRE D'OCTETS # CP A, 1 ; SI IL N'Y EN A QU'UN, ON L'INSCRIT # JR Z, INSCRIRE_EN_DEUX ; # CP A, 2 ; SI IL N'Y EN A QUE DEUX, ON NE FAIT # JR NZ, VOIR_PLUS ; PAS DE BOUCLE # LD (HL), E ; ET ON INSCRIT 1 FOIS LA COULEUR # INC HL ; # ; # INSCRIRE_EN_DEUX ; # LD (HL), E ; ON INSCRIT LA COULEUR # JR INSCRIT ; PUIS ON SAUTE POUR CONTINUER # ; # VOIR_PLUS ; POUR LES OCTETS DIFFERENTS AU TOKEN # TOKEN_03 LD A, TOKEN ; IL FAUT RECUPERER LE TOKEN # ; # VOIR_PLUS_TOKEN ; # LD (HL), A ; INSCRIRE LE TOKEN # INC HL ; # LD (HL), E ; INSCRIRE L'OCTET DES COULEURS # INC HL ; # LD (HL), D ; INSCRIRE LE NOMBRE DE FOIS # ; # INSCRIT ; # INC HL ; ON PASSE A DESTINATION + 1 # LD (DESTINATION), HL ; ET ON SAUVEGARDE # POP HL ; ON RECUPERE LA SOURCE (ADR.ECRAN) # JR COMPACTER_LES_OCTETS ; JUSQU'AU DERNIER OCTET # ; # FIN_DE_COMPACTAGE ; ########## CALCULER_LONG # ADR_DESTINATION LD DE, #4000 ; RECUPERER L'ADRESSE DU DEBUT # LD HL, (DESTINATION) ; ET L'ADRESSE FINALE # SBC HL ,DE ; 'HL=HL-DE' # INC HL ; + 1 # LD (LONG), HL ; INSCRIRE LE RESULTAT FINAL # RET ; COMPILATION TERMINEE # ; ############################################################################### ERREUR ; # LD HL, 0 ; METTRE LA LONGUEUR A ZERO # LD (LONG), HL ; # LD A, 7 ; ET EMMETRE UN SIMPLE BEEP D'ERREUR # CALL #BB5A ; # RET ; # ; ############################################################################### RSX_DEZIP ; DECOMPACTEUR SANS LES IMAGES # CP 4 ; 0 OU 1 OU 3 PARAMETRES # JR NC, ERREUR ; > 3 # CP 2 ; # JR Z, ERREUR ; # EX HL, DE ; 'HL'= DERNIER PARAMETRE (ADR.IMAGE) # OR A ; SI IL N'Y A PAS DE PARAMETRE # JR NZ, IX_PAR_DEFAUT ; ALORS 'HL' CONTIENT LA SOURCE # LD HL, #4000 ; SINON VALEUR PAR DEFAUT ET ON FAIT # INC A ; CROIRE QU'IL Y A 1 OU 3 PARAMETRES # ; # IX_PAR_DEFAUT ; # LD E, (HL) ; INITIALISER LES DONNEES # INC HL ; # LD D, (HL) ; # INC HL ; # LD (ADR_ECRAN + 1), DE ; DEPART SUR L'ECRAN INITIALISE # LD E, (HL) ; # INC HL ; # LD D, (HL) ; # INC HL ; # LD (COL_LIG + 1), DE ; LARGEUR ET HAUTEUR INITIALISES # LD E, A ; # LD A, (HL) ; # INC HL ; # LD (TOKEN_04 + 1), A ; TOKEN INITIALISE # LD A, E ; # LD (ADR_IX + 2), HL ; SOURCE INITIALISEE # DEC A ; SUPPRIMER LE DERNIER PARAMETRE # INC IX ; # INC IX ; # ; ######################################; CETTE PARTIE EST COPIEE AVEC L'IMAGE # DECOMPACTEUR ; SUIVANT L'OPTION AVEC OU SANS DEZIP. # ; # ADR_ECRAN LD HL, #C000 ; PAR DEFAUT, MODIF. PAR LES PARAMETRES # DEC A ; REGARDER SI ON VEUT MODIFIER LA # DEC A ; POSITION SUR L'ECRAN DEPUIS LES # JR NZ, INIT_VAR_OK ; PARAMETRES # LD H, A ; ADAPTER LA POSITION DU CURSEUR POUR # LD L, (IX + 0) ; # LD D, A ; 'DE'=COL 'HL'=LIG # LD E, (IX + 2) ; # CALL #BC11 ; AJUSTER 'DE' EN FONCTION DU MODE # ADD A, A ; 'A'=MODE x 2 # ; # AJUSTE_MODE ; # SLA E ; MULTIPLIER 'DE' PAR 2-MODE0 4-MODE1 # RL D ; 8-MODE2 (de 0 a 639) # SRL A ; DIVISER POUR MIEUX MULTIPLIER # JR NZ, AJUSTE_MODE ; # CALL #BC1D ; VECTEUR ADR. ECRAN # ; # INIT_VAR_OK ; # ADR_IX LD IX, #4000 ; PAR DEFAUT. (AUTO_MODIFIE) # COL_LIG LD BC, #50C9 ; PAR DEFAUT. AUTO MODIF # DEC C ; SUPPRIMER LE SURPLUS # LD (SOURCE), HL ; SAUVEGARDER LES VARIABLES # LD (LARG_HAUT), BC ; # ; # PROG_DECOMP ; # LD A, (IX) ; PRENDRE CHAQUE OCTET # INC IX ; # ; # TOKEN_04 CP A, TOKEN ; SI C'EST UN TOKEN # JR Z, OCTET_TOKEN ; FAIRE BOUCLE AVEC 'D' COMME COMPTEUR # LD D, 1 ; SINON DEFINIR LA BOUCLE A UN OCTET # LD E, A ; ET CHARGER DANS 'E' L'OCTET # JR INIT_DE ; ALLER VERS LA BOUCLE POUR UN OCTET # ; # OCTET_TOKEN ; # LD E, (IX + 0) ; RECUPERER LA VALEUR DE L'OCTET # INC IX ; # LD D, (IX + 0) ; ET LE NOMBRE DE FOIS A REPETER # INC IX ; # ; # INIT_DE ; # LD A, H ; EN CAS DE DEBORDEMENT, PLUTOT QUE DE # CP A, #C0 ; PLANTER L'AMSTRAD, J'AI OPTE POUR NE # JR C, HORS_ECRAN ; PAS ECRIRE DANS LA MEMOIRE <#C000 # LD (HL), E ; AFFICHER L'OCTET # INC HL ; ET PASSER AU SUIVANT, MAIS SI ON # DEC B ; ARRIVE EN FIN DE COLONNE, DESCENDRE # JR NZ, HL_MOINS_UN ; L'ADR_ECRAN D'UNE LIGNE # ; # HORS_ECRAN ; # DEC C ; JUSQU'A CE QU'IL NE RESTE AUCUNE LIGNE# RET Z ; DANS CE CAS, ON REND LA MAIN # LD HL, (SOURCE) ; SINON ON REVIENT EN DEBUT DE COLONNE # CALL #BC26 ; ET ON DESCEND D'UNE LIGNE # LD (SOURCE), HL ; ON SAUVE LE DEBUT DE COLONNE # LD A, (LARG_HAUT + 1) ; ET ON RECUPER LA LARGEUR # LD B, A ; DANS LE REGISTRE 'B' # ; # HL_MOINS_UN ; # DEC D ; ON DECREMENTE LE NOMBRE D'OCTETS # JR NZ, INIT_DE ; JUSQU'A CE QUE 'D'=0 # JR PROG_DECOMP ; SINON ON POURSUIT LE DECOMPACTAGE # ; JUSQU'A CE QUE 'BC'=0 # FIN ; FIN DU PROGRAMME A COPIER # ; ############################################################################### RSX_ZIPOP ; OPTION AVEC/SANS ET TOKEN # DEC A ; # JR Z, AVEC_SANS ; PARAMETRE TOKEN ABSENT # DEC A ; SI PLUS DE 2 PARAMETRES # JP NZ, ERREUR ; DEHORS # LD A, E ; # LD (TOKEN_01 + 1), A ; MODIFIER LE TOKEN DU TOKEN PAR DEFAUT # LD (TOKEN_02 + 1), A ; # LD (TOKEN_03 + 1), A ; # LD (TOKEN_04 + 1), A ; # INC IX ; FAIRE COMME CI LE PARAMETRE TOKEN NI # INC IX ; ETE PAS POUR PASSER AU SUIVANT # ; # AVEC_SANS ; # LD A, (IX + 0) ; RECUPERER LA VALEUR AVEC=0 SANS<>0 # OR A ; ZERO DONC AVEC LE DEZIPPEUR # JR Z, AVEC_LE_DEZIPPEUR ; # LD A, #10 ; <>ZERO DONC SANS LE DEZIPPEUR # ; # AVEC_LE_DEZIPPEUR ; # LD (AVEC_SANS_DECOMPACTEUR + 1), A ; # RET ; # ; ############################################################################### RSX_ZIPLONG ; RECUPERER LA LONGUEUR OBTENUE # DEC A ; # JP NZ, ERREUR ; 1 SEUL PARAMETRE # EX HL, DE ; 'HL'= ADRESSE DE LA VARIABLE # LD DE, (LONG) ; CA PARLE TOUT SEUL # LD (HL), E ; # INC HL ; # LD (HL), D ; # RET ; # ; ###############################################################################

Manual n° 2

; ############################################################################### ; DECOMPACTEUR DE ZONE D'ECRAN - PHILIPPE MOULIN - LE 01/08/2020 MAJ 10/08/2020# ; DECOMPACTE UNE ZONE OU D'UN ECRAN A L'ENDROIT INDIQUE EN PARAMETRE # ; ROUTINE POUR EVITER LES PLANTAGES EN CAS DE DEBORDEMENT # ; CE PROGRAMME S'ACCOMPAGNE DU FICHIER "ZIPECRAN.ASM" # ; ############################################################################### SOURCE EQU #BDF9 ; PAR DEFAUT #C000 ECRAN # LARG_HAUT EQU #BDFD ; PAR DEFAUT #50C9 COL, LIG # ; ############################################################################### ORG #A400 ; # INIT_RSX ; INITIALISER LES RSX # 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_DEZIP ; LISTE DES SAUTS VERS LES RSX # ; # QUATRE_OCTETS DS 4 ; EMPLACEMENT DES 4 OCTETS RESERVES # NOM_RSX STR "DEZIP" ; LISTE DES NOMS DONNES AUX RSX # DB 00 ; LA LISTE DOIT FINIR PAR UN OCTET ZERO # ; # ; ############################################################################### ERREUR ; # LD A, 7 ; EMMETRE UN SIMPLE BEEP D'ERREUR # CALL #BB5A ; # RET ; # ; ############################################################################### RSX_DEZIP ; DECOMPACTEUR SANS LES IMAGES # CP 4 ; 0 OU 1 OU 3 PARAMETRES # JR NC, ERREUR ; > 3 # CP 2 ; # JR Z, ERREUR ; = 2 # EX HL, DE ; 'HL'= DERNIER PARAMETRE (ADR.IMAGE) # OR A ; SI IL N'Y A PAS DE PARAMETRE # JR NZ, IX_PAR_DEFAUT ; ALORS 'HL' CONTIENT #4000 # LD HL, #4000 ; SINON 'HL'=DERNIER PARAMETRE ENVOYE # ; # IX_PAR_DEFAUT ; # LD E, (HL) ; RECUPERER LES DONNEES INSCRITES EN # INC HL ; DEBUT DU COMPACTAGE # LD D, (HL) ; (ADR.ECRAN + LARG_HAUT + TOKEN) # INC HL ; # LD (ADR_ECRAN + 1), DE ; ADRESSE ECRAN INITIALISE # LD E, (HL) ; # INC HL ; # LD D, (HL) ; # INC HL ; # LD (COL_LIG + 1), DE ; LARGEUR ET HAUTEUR INITIALISES # LD B, A ; # LD A, (HL) ; # INC HL ; # LD (TOKEN_04 + 1), A ; TOKEN INITIALISE # LD (ADR_IX + 2), HL ; SOURCE INITIALISEE # INC IX ; # INC IX ; # ; # ADR_ECRAN LD HL, #C000 ; PAR DEFAUT, MODIF. PAR LES PARAMETRES # LD A, B ; # CP A, 3 ; SI 0 OU 1 PARAMETRE # JR NZ, INIT_VAR_OK ; ON GARDE LES COL, LIG PAR DEFAUT # LD H, 0 ; ADAPTER LA POSITION DU CURSEUR # LD A, (IX + 0) ; # LD L, A ; # CP A, 200 ; POSITION Y (DE 0 A 199) # JR NC, ERREUR ; > 200 # LD D, H ; 'DE'=COL 'HL'=LIG # LD A, (IX + 2) ; # LD E, A ; # CP A, 80 ; POSITION X (DE 0 A 79) # JR NC, ERREUR ; > 79 # CALL #BC11 ; AJUSTER 'DE' EN FONCTION DU MODE # ADD A, A ; 'A'=MODE x 2 # ; # AJUSTE_MODE ; # SLA E ; MULTIPLIER 'DE' PAR 2-MODE0 4-MODE1 # RL D ; 8-MODE2 (de 0 a 639) # SRL A ; DIVISER POUR MIEUX MULTIPLIER # JR NZ, AJUSTE_MODE ; # CALL #BC1D ; VECTEUR ADR. ECRAN # ; # INIT_VAR_OK ; # ADR_IX LD IX, #4000 ; PAR DEFAUT. (AUTO_MODIFIE) # COL_LIG LD BC, #50C9 ; PAR DEFAUT. AUTO MODIF # DEC C ; SUPPRIMER LE SURPLUS # LD (SOURCE), HL ; SAUVEGARDER LES VARIABLES # LD (LARG_HAUT), BC ; # ; # PROG_DECOMP ; # LD A, (IX) ; PRENDRE CHAQUE OCTET # INC IX ; # ; # TOKEN_04 CP A, #FF ; (VALEUR INITIALISEE AU LANCEMENT) # JR Z, OCTET_TOKEN ; FAIRE BOUCLE AVEC 'D' COMME COMPTEUR # LD D, 1 ; SINON DEFINIR LA BOUCLE A UN OCTET # LD E, A ; ET CHARGER DANS 'E' L'OCTET # JR INIT_DE ; ALLER VERS LA BOUCLE POUR UN OCTET # ; # OCTET_TOKEN ; # LD E, (IX + 0) ; RECUPERER LA VALEUR DE L'OCTET # INC IX ; # LD D, (IX + 0) ; ET LE NOMBRE DE FOIS A REPETER # INC IX ; # ; # INIT_DE ; # LD A, H ; EN CAS DE DEBORDEMENT, PLUTOT QUE DE # CP A, #C0 ; PLANTER L'AMSTRAD, J'AI OPTE POUR NE # JR C, HORS_ECRAN ; PAS ECRIRE DANS LA MEMOIRE <#C000 # LD A, E ; # MOD_IF NOP ; (HL)<AND=A6<OR=B6<XOR=AE CPL=2F NOP=0 # LD (HL), A ; AFFICHER L'OCTET # INC HL ; ET PASSER AU SUIVANT, MAIS SI ON # DEC B ; ARRIVE EN FIN DE COLONNE, DESCENDRE # JR NZ, HL_MOINS_UN ; L'ADR_ECRAN D'UNE LIGNE # ; # HORS_ECRAN ; # DEC C ; JUSQU'A CE QU'IL NE RESTE AUCUNE LIGNE# RET Z ; DANS CE CAS, ON REND LA MAIN # LD HL, (SOURCE) ; SINON ON REVIENT EN DEBUT DE COLONNE # CALL #BC26 ; ET ON DESCEND D'UNE LIGNE # LD (SOURCE), HL ; ON SAUVE LE DEBUT DE COLONNE # LD A, (LARG_HAUT + 1) ; ET ON RECUPER LA LARGEUR # LD B, A ; DANS LE REGISTRE 'B' # ; # HL_MOINS_UN ; # DEC D ; ON DECREMENTE LE NOMBRE D'OCTETS # JR NZ, INIT_DE ; JUSQU'A CE QUE 'D'=0 # JR PROG_DECOMP ; SINON ON POURSUIT LE DECOMPACTAGE # ; JUSQU'A CE QUE 'BC'=0 # FIN ; FIN DU PROGRAMME A COPIER # ; ###############################################################################


Goto Top
CPC-POWER/CPCSOFTS, programming by Kukulcan © 2007-2021 all rights reserved.
Reproduction forbidden without any express authorization. All the game titles used belong to their respective owners.
Hébergement Web, Mail et serveurs de jeux haute performance