APPLICATIONSPROGRAMMATION ★ COMPILATION BASIC/BINAIRE ★

Compilation Basic - Binaire (CPC Revue)Applications Programmation

Il y a longtemps, c'était au temps de la préhistoire, le gibier et les disquettes 3 pouces étaient très rares. Les précieuses petites plaquettes noires s'échangeaient alors contre 70 parfois 80 silex ; le prix d'un kilo de mammouth 1er choix. Il est bien évident qu 'à ce taux, chaque programme sauvegardé devait en valoir la peine. C'est sûrement à cette époque qu'est née l'idée de la compilation.

La compilation est un système qui permet de réduire très sensiblement ta taille d'un fichier binaire. Il est surtout bien adapté aux pages écran qui, sur une disquette, prennent 17 K. Une fois compilée, la taille de la même page écran ne fera que 5 ou 6 K. Les programmes que je vous propose permettent également (a compilation de fenêtres. Ceux d'entre vous qui écrivent des jeux d'aventure multicadres sauront en tirer le meilleur parti.

Comment compile-t-on un programme ? Nous savons qu'une page écran occupe 84000 octets de l'adresse &C000 à l'adresse &FFFF. Sur ces &4000 octets beaucoup ont la même valeur. Tous les octets représentant le fond du décor ont la valeur "0".

Le principe de la compilation consiste à compter le nombre d'octets qui se suivent et dont la valeur est identique.

Premier cas. L'octet n° 1 est diffèrent de l'octet n° 2. Il va être recopié tel quel dans le fichier compilé et nous allons comparer le n° 2 avec les suivants, euxième cas. L'octet n°2 et les dix suivants ont la même valeur. Le programme de compilation va charger dans le fichier compilé un premier octet avec une valeur témoin pour indiquer qu'il y a compilation. Un deuxième octet contiendra h nombre de répétitions. Ici, nous aurons 11 (octet n° 2 plus les dix suivants).

Enfin un troisième octet contiendra la valeur de ces 11 octets. Comme vous le voyez avec seulement 3 octets, nous en avons compilé 11. Dès que 4 octets se suivent en ayant la même valeur, la compilation nous fait gagner de la place.

Deux cas nous en feront perdre. Si nous n'avons que deux octets identiques qui se suivent ou si un octet a la valeur du témoin. Là aussi, il nous faudra 3 octets pour en compiler un seul. D'où l'intérêt d'avoir une valeur témoin ayanf peu de chance de se trouver dans votre dessin. Pour ma part, dans mes programmes, j'ai utilisé la valeur 103. C'est une configuration de pixels assez rare. Pour vous en convaincre, faites dans les 3 modes :

FOR H = &C100 TO &C200:POKE H,103:NEXT

Un autre problème peut se présenter, le deuxième octet confient le nombre d'octets identiques. Ce nombre ne peut être supérieur à 255. Un dessin avec de grandes surfaces de la même couleur peut avoir cette configuration. Mais cela est très rare. Si vous pensez que votre dessin est dans ce cas, faites :

PLOT 640,1, h:DRAW 640,400

Grâce à ce trait, vous n'aurez jamais plus de 80 octets identiques a se suivre. Voici pour ce qui est de la compilation. Qui ait compilation dit aussi décompilation. C'est ce que nous a//ons étudier maintenant.
le programme de décompilation va lire le Fichier créé par la compilation. Si l'octet est différent de 103, celui-ci va être affiché tel quel à l'écran. Si sa valeur est 103, le programme va afficher à l'écran autant d'octets que la valeur contenue après 103. Ces octets auront fous la valeur contenue dans le deuxième octet après 103.

Voici succinctement expliqué le principe de la compilation/décompilation. Je vous ai écrit deux programmes de démonstration, l'un en BASIC, l'autre utilisant une routine en assembleur.

LE PROGRAMME BASIC

Ce programme n'est là que pour bien vous faire comprendre le principe expliqué plus haut. Les variables que j'ai utilisées sont très parlantes. Néanmoins, ce programme ne compile que des pages écran entières. De plus, malgré la rapidité du BASIC Amstrad, la compilation prend plus de trois minutes et la décompilation à peu près autant.

LE PROGRAMME BINAIRE

Ici, la compilation et fa décompilation ne prendront pas plus de deux secondes et il vous sera possible de travailler sur des fenêtres, le fichier compilé débute à l'adresse &3000 mais le premier octet compilé seulement à l'adresse &3020. Ces 32 octets contiennent fous fes paramètres nécessaires au programme de décompilation (mode, couleurs, données de la fenêtre, etc.), la différence entre un écran complet et une fenêtre réside dans le fait que pour l'écran tous les octets se suivent de façon linéaire, tandis qu'avec une fenêtre, le premier travail du logiciel sera de retrouver cette forme linéaire en transférant tous les octets de la fenêtre à partir de l'adresse &6000. ta suite sera identique à la compilation d'un écran sauf qu'elle débutera en &6000 et non plus en &C000. Pour le retour, la décompilation de la fenêtre se fera, elle aussi, en &6000 puis un sous-programme binaire fera le transfert à l'écran.

Vous voici en possession d'un outil performant, essayez d'en faire le meilleur usage. Bon courage et a vos claviers...

CPC n°36

★ EDITEUR: CPC Revue
★ ANNÉE: 1986
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: CLAUDE LE MOULLEC

★ AMSTRAD CPC ★ DOWNLOAD ★

Aucun fichier de disponible:
» Vous avez des fichiers que nous ne possédons pas concernent cette page ?
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Anti-REM (CPC Magazin)
» Applications » Compilateur Basic (LMC Software)
» Applications » Kwikref/x
» Applications » CPC 464 Forth
» Applications » DAMS (Notice)
» Applications » Dump (Tilt)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» 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 549 millisecondes et consultée 1881 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.