| ★ CODING ★ LES COURS DU PROFESSEUR ALI GATOR ★ LES FICHIERS BINAIRES ★ |
| Ali Gator - 05. Les Fichiers Binaires |
Voici, tant attendue, la suite que laissait présager l'étude des modes graphiques abordée le mois dernier. Dans le cadre de notre randonnée sylvestre parmi les divers types de fichiers, intéressons-nous cette fois aux fichiers binaires. Lorsque l'on sauvegarde un fichier Basic, le programme entier est stocké sur disquette ou cassette, sans que nous ayons à préciser sa longueur et sa localisation. C'est le système d'exploitation qui s'en charge. Il en est tout autre pour un fichier binaire. En fait, ce n'est pas un programme, mais le contenu d'une partie de la Ram qui est sauvegardée. Très bien, si cette zone contient un programme, tans pis si elle est vide. Le CPC ne fera pas la différence, vous par contre. Donc, avant toute sauvegarde d un programme binaire, il est impératif de connaître sa position de départ et sa longueur Soit une sauvegarde du genre, SAVE” PROG ", B, &8000, 1024 Le B, indique qu'il s'agit d'un programme binaire, &8000 est l'adresse du premier octet qui sera sauvegardé et 1024 le nombre d'octets du fichier Ainsi sera réalisée la sauvegarde de la partie mémoire comprise entre les adresses &8000 et &8400. I - Le header Dans notre exemple, 1024 octets sont conservés, soit 1 ko. Pourtant, le catalogue de la disquette signale 2 ko et non 1 ko. En voici la raison : en plus des 1024 octets qui composent les données du programme, le système a sauvegardé les quelques octets supplémentaires formant le « hea- les autres renseignements. Leur lecture permet au CPC de se configurer en fonction du fichier qu'il charge et aussi de réagir à une éventuelle erreur Comme par exemple le MEMORY FULL sur un fichier binaire lorsque la commande MEMORY n'a pas été correctement fixée. Les deux catalogueurs que vous trouverez dans la récréation du mois, découlent de la lecture du header. A noter que la sauvegarde sur disquette se contente d'un seul header alors que sur cassette chaque block possède le sien. II - Implantation modifiable L'adresse d'implantation d'un fichier binaire est contenue dans l'en-tète mais peut très bien être modifiée lors du chargement. Reprenons notre fichier exemple dont l'adresse d'implantation est &8000 Nous pouvons très bien le char- Néanmoins, ce type de manipulation doit être faite avec précaution, car rares sont les routines binaires parfaitement relogeables Confidences intimes Pour ma part, j'utilise ce système pour des fichiers de sprites. Lors de la création d'un jeu, je stocke les sprites à partir de l'adresse &8000 et les routines binaires en &A000. Durant l'élaboration du logiciel. toutes les modifications sont possibles suivant mes besoins. Lorsque le jeu est fini, il est très rare que l'espace entre &8000 et &A000 soit complet. Pour combler ce vide, j'agis de la sorte : SAVE " SPRITE ",B. &8000, LG (LG étant la longueur du fichier) Puis, je le recharge sans faire de RESET par LOAD « SPRITE », &A000 - LG Mon fichier de sprites est venu se coller sous celui de mes routines. Il ne me reste plus qu'à faire la sauvegarde définitive en un seul fichier SAVE” LETOUT ”, B, &A000-LG, LGTOTALE Ceci évite les colonnes entières de data remplies de « 00 » que l'on voit dans certains listings. III - Reloger une routine Très souvent, la seule solution consiste à réécrire la routine à l'aide d'un Assembleur. Encore faut-il maîtriser le langage machine Cependant, un petit truc sans garantie peut être tenté, à réserver aux routines courtes car les chances de succès sont alors plus importantes. Soit une routine de 100 octets débutant en &A000 à reloger en &8000. Après chargement en Ram. tentez ceci : 10 FOR H = 0 TO 99Ces quelques lignes recopient chaque octet de la routine un peu plus bas en Ram Ceux qui faisaient référence à une adresse ont été modifiés. Une instruction comme JP &A023 devient JP &8023. En revanche, une instruction comme AND B dont le code est &A0 se trouverait elle aussi modifiée Dans ce cas, le plantage est certifié ? Bref, il s'agit là d'une astuce SGDG (Sans Garantie D'Ali Gator). |
| ![]() |
| Page précédente : Ali Gator - 03. TAG et les Modes Graphiques |
|