APPLICATIONSDISQUE ★ Compacteur/Decompacteur d'images v2.1 ★

Compacteur/Décompacteur d'images (CPC Revue)Applications Disque
Les images ou belles pages de présentation agrémentent un programme et lui donnent un aspect plus "commercial" ; seulement voilà, elles occupent une place non négligeable et leur temps de chargement, à partir d'une cassette, peut sembler bien long, d'où l'idée de réduire l'espace occupé par ces images.

COMMENT ?

Le compacteur prend en entrée le bloc de la mémoire vive qui s'étend de C000 à FFFF (la mémoire écran) et crée, à partir d'une adresse indépendante, un bloc d'octets de longueur inférieure.

Le décompacteur prend en entrée ce bloc mémoire, l'analyse et restitue à l'écran l'image initiale.

Les deux programmes sont en langage machine, nécessaire pour leur assurer une bonne rapidité.

Pour lier le tout, j'ai écrit un petit programme Basic permettant d'effectuer quelques opérations avec mon compacteur-décompacteur.

POUR QUI ?

L'ensemble compacteur-décompacteur a été écrit pour tout ordinateur AMSTRAD CPC et conçu pour fonctionner aussi bien sur cassette que sur disquette. Le Basic est celui de la version de base, le CPC 464, et les routines en langage machine de compactage et décompactage n'appellent aucun vecteur de la RAM et aucune routine de la ROM préservant ainsi une parfaite compatibilité entre les appareils.

POURQUOI ?

Les applications de mon programme sont multiples, aussi bien sur cassette que sur disquette ou en mémoire.

  • Sur cassette, le temps de chargement des images est grandement accéléré, l'affichage étant, quant à lui, quasi-instantané (sans pour autant recourir à de fastidieux procédés de mise à zéro de toutes les encres). A titre d'exemple, l'image de présentation de mon programme (qui vient de l'excellent "WarriorPlus") demande trois blocs au lieu de huit.
  • Sur disquette, c'est le gain d'espace qui est le plus intéressant, bien que les vitesses de chargement et d'affichage soient aussi accélérées. Vous savez certainement qu'on ne peut pas mettre plus de 10 images sur une face de disquette formatée à 1 78 Ko ? Avec mon programme, j'en fais sans peine tenir 22 : la rareté et le prix des disquettes 3" rendent cela très appréciable !
  • En mémoire, il sera enfin possible de stocker des images en réserve, tout en continuant à utiliser l'écran pour l'affichage de texte ou autre. Le programme de démonstration illustrant ce principe vous le prouvera amplement.

Ainsi, la programmation de jeux d'aventure aux graphismes variés et "plein écran", de jeux d'arcade avec de superbes décors, d'utilitaires graphiques ou de représentation mathématique quittent le domaine de l'utopie pour le programmeur amateur ; d'autant plus que la routine de décompactage prenant seulement 43 octets, peut servir pour autant d'images différentes qu'on le souhaite et, de plus, est très facile à mettre en œuvre dans ses propres programmes.

UTILISATION DU
COMPACTEUR-DECOMPACTEUR
VERSION 2.1

Au lancement de mon programme apparaît l'écran suivant : Compacteur/décompacteur d'images Version 2.1 Olivier Grange Juin 1986

0 - fin
1 - catalogue
2 - chargement et compactage d'une image standard
3 - affichage d'une image compactée
4 - chargement d'une image compactée
5 - sauvegarde d'une image compactée
6 - affichage d'une image compactée et sauvegarde en standard
7 - affichage d'une image compactée et recompactage.

Pour sélectionner une option, il suffit de taper le chiffre correspondant. Chaque option permet de choisir les réponses indiquées par défaut en appuyant simplement sur ENTER.

Avant la description des différentes commandes et afin de mieux les comprendre, il est nécessaire d'expliquer succinctement la méthode utilisée pour le compactage de l'image. Vous pouvez cependant sauter cette partie si vous la jugez incompréhensible et vous servir quand même du programme, mais j'essaierai d'être le plus clair possible. Quand on lit la suite d'octets qui composent une image, on est frappé par la répétition de certaines valeurs (couleurs, trames). Ne serait-il pas possible d'indiquer que tel octet se répète 200 fois plutôt que d'en écrire 200 à la suite ?

Pour qu'il fonctionne, il faut fournir à mon compacteur une valeur comprise entre 0 et 255, valeur que je désignerai par la suite sous le nom de "code pour le compactage”.

Le programme recopiera les octets de la mémoire écran vers la zone d'implantation de l'image compactée jusqu'à ce . qu'il rencontre plus de trois octets semblables et consécutifs. A ce moment, plutôt que de tous les recopier, il écrira le code pour le compactage, le nombre n de répétitions et la valeur de l'octet à répéter. Ainsi, dans l'exemple précédent, on gagne 200-3 = 197 octets.

Le décompacteur, quand il rencontrera le code pour le compactage, interprétera les deux octets qui le suivent comme le nombre n de répétitions et la valeur à écrire n fois.

Si j'ai été assez clair, une question vous vient à l'esprit : que se passe-t-il quand l'écran contient déjà la valeur du code pour le compactage ? Cette valeur ne va-t-elle pas être recopiée normalement et fausser ensuite l'affichage par le décompacteur ?

Il faut en effet penser à cette occurence, aussi, si un octet de la mémoire écran est égal au code pour le compactage, il suffira d'écrire à sa suite un octet 0 pour le nombre de répétitions. Cela prendra 2 octets au lieu d'un.

Ainsi, vous comprenez que si l'on fait varier le code pour le compactage de 0 à 255, le nombre d'octets occupés par l'image compactée variera lui aussi de quelques dizaines d'octets en plus ou en moins.

Voici un exemple de compactage de quelques octets avec deux valeurs différentes pour le code de compactage.

Image 1 1 1 1 1 1 5 1 1 1 1 24 233 0 233 233 2333 7
Code = 233 233 6 1 5 233 4 1 24 233 0 0 233 4 233 7
Code = 14 14 6 1 5 14 4 1 24 233 0 14 4 233

REMARQUE : Vous n'aurez pas besoin de noter le code de compactage pour réutiliser une image, le programme le recopiant en premier octet à l'adresse d'implantation.

UTILISATION D'IMAGES COMPACTEES DANS VOS PROPRES PROGRAMMES

  • Vous devez d'abord sauvegarder l'image compactée par mon programme avec l'option 5.
  • Recopiez ensuite la première ligne de DATA qui constitue la routine de décompactage ; celle-ci ne dépend pas de son adresse d'implantation.
  • Si vous voulez l'implanter à l'adresse a, recopiez le programme suivant :

10 for i = a to a +42
20 read a$
30 poke i, val ("&" + a$)
40 next i

pour afficher une image implantée à une adresse a', il suffira de faire :

CALL a,a'

  • Si vous voulez mettre la routine dans une chaîne de caractères decomp$, recopiez le programme suivant :

10 for i = 0 to 42
20 read a$
30 decomp$ =decomp$ + chr$ val"&" + a$)
40 next i

pour afficher une image implantée à une adresse a', il suffira de faire : CALL peek (@decomp$ +1 ) + 256*peek ((a)decomp$ + 2)

  • Vous devrez restituer les encres et le mode avant l'appel de la routine.

Voici maintenant la description des différentes commandes.

0 - Fin

Sortir du programme ne modifie pas les images en mémoire.

1 - Catalogue

Si vous travaillez sur disquette, introduisez la disquette avant de taper " 1 " car le catalogue est immédiat.

2 - Chargement et compactage d'une image standard

Si vous avez enregistré un écran par SAVE "ecran", b, &C000,&4000 et que vous désirez le compacter, amenez la bande juste avant l'enregistrement et répondez aux questions suivantes.

  • Nom (défaut : retour au menu) ? Inscrivez le nom de l'image ou appuyez sur ENTER pour revenir au menu.
  • Mode d'écran (défaut : 0) ?
    Vous pouvez choisir 0, 1 ou 2 ou appuyer sur ENTER ce qui gardera le mode de la dernière image affichée ; cependant, le compdctage est indépendant du mode.
  • Adresse d'implantation (défaut : &2000) ?
    Cette adresse concerne l'image compactée. Si vous désirez l'implantation plus bas dans la mémoire, il vous faudra sortir du programme et modifier l'adresse du memory. L'adresse &2000 permet de conserver en mémoire un grand nombre d'images. L'adresse doit de préférence être entrée en décimal ou en décimal signé. L'adresse par défaut est celle de la dernière image compactée.
  • Code pour le compactage ?
    Entrez une valeur comprise entre 0 et 255 ou appuyez sur ENTER. L'image est ensuite chargée dans la mémoire écran et compactée. Puis, elle s'efface et des informations sur l'image compactée apparaissent, suivies d'un retour au menu. Ce sont la longueur, ses adresses d'implantation et de fin, le code pour le compactage.

3 - Affichage d'une image compactée

Après l'entrée du mode et de l'adresse d'implantation, l'image s'affiche et l'appui sur une touche entraîne le retour au menu.

4 - Chargement d'une image compactée

Vous indiquez simplement le nom et l'adresse d'implantation souhaitée. L'image doit auparavant avoir été sauvegardée par l'option 5. Vous pouvez charger plusieurs images d'un coup.

5 - Sauvegarde d'une image compactée

Une fois les nom et adresse rentrés, le programme demande la longueur de l'image compactée. En appuyant sur ENTER, c'est la longueur de la dernière image qui est sélectionnée. Vous pouvez aussi sauver plusieurs images en un seul bloc.

6 - Affichage d'une image compactée et sauvegarde en standard

Cette commande réalise l'opération inverse de la commande 2. Elle est utile pour retravailler une image compactée à l'aide d'un logiciel de dessin. Exemple : vous avez fait un dessin et l'avez compacté, puis effacé l'original ; pour le modifier, ultérieurement, cette commande en crée une copie au format standard.

7 - Affichage d'une image compactée et recompactage

Vous introduisez le mode, l'adresse d'implantation de l'image puis le code pour le recompactage de l'image. Cela permet d'obtenir des informations telles que la longueur, les adresses d'implantation et de fin sur une image compactée. On peut aussi chercher ainsi à réduire sa longueur en faisant varier le code.

A PROPOS DES CODES DE CONTROLE

Le listing où la routine DECOMP est incluse dans une chaîne de caractères présente une ligne (la ligne 20) qui pourra paraître bizarre aux programmeurs débutants. Elle contient en fait des caractères obtenus par les codes de contrôle CHR$(..) ou encore, à partir du clavier

par appui simultané sur CONTROL (ainsi que CONTROL et SHIFT) et une autre touche.

Exemple :

Le signe — est obtenu par CONTROL et 2

Le signe ¯ est obtenu par CONTROL et A.

CPC n°16

★ EDITEUR: CPC Revue
★ ANNÉE: 1986
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC REVUE 1986
★ AUTEUR: Olivier GRANGE
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Compacteur-Decompacteur  d  images  v2.1    FRENCHDATE: 2012-08-11
DL: 280
TYPE: ZIP
SiZE: 8Ko
NOTE: Extended DSK/40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Multiformateur pour tous Lecteurs
» Applications » Disc Compactor
» Applications » Disccopy
» Applications » ESAT Software/Goldmark - Viewtext
» Applications » Gestion du mode 178-202
» Applications » Filesweep Utilities (Robot PD Library)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 306 millisecondes et consultée 1851 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.