CODING ★ CATALOGUE DETOURNE - CPC n°38 - O. SAOLETTI ★

Catalogue Detourne (CPC Revue)
La lecture de l'article Catalogue détourné dans le numéro précédent a dû vous paraître quelque peu difficile. Des coupures malencontreuses et les manipulations hasardeuses de colonnes en sont la cause. Voici donc à nouveau ce texte dans son intégralité.

Attention, l'article qui suit demande un minimum de connaissances sur le BASIC et sur les disquettes. Il est également indispensable de posséder un éditeur de secteurs sans quoi vous ne pourriez appliquer les exemples proposés.
Vous avez certainement déjà eu devant les yeux une disquette du commerce dont le catalogue (que l'on obtient grâce à la fonction BASIC CAT) était inexistant ou bien était remplacé par un message du style: Tapez RUN "DISC" pour commencer le jeu. Peut-être vous êtes-vous demandé comment on pouvait obtenir ce résultat. Le texte qui suit va tenter de vous expliquer la procédure à suivre en rappelant quelques notions indispensables sur les disquettes et le catalogue.

LA STRUCTURE DU DISQUE

Lorsque vous achetez une disquette dans le commerce, celle-ci n'est qu'un assemblage de plastique. Pour que votre CPC puisse la lire il faut passer par une opération appellée formatage. Pratiquement cela consiste à utiliser un des programmes de votre disquette CP/M : FORMAT. Une fols cette formalité accomplie vous pourrez enregistrer des données ou regarder le catalogue sur la disquette ainsi préparée.

Que s'est-Il donc passé lors du formatage ? La disquette qui est en fait un support magnétique a,été "partagée" en plusieurs morceaux. Il y a deux grandes catégories de morceaux. L'une regroupe les pistes et l'autre les secteurs. Les pistes sont disposées en cercles concentriques sur votre disquette, elles portent chacune un numéro de 0 à 39. Chaque piste occupe une surface différente Ces cercles ont un diamètre de plus en plus réduit de l'extérieur vers l'Intérieur), par contre la quantité d'Informations est constante. C'est donc la densité qui diffère d'une piste à l'autre.

La seconde catégorie est appelée secteurs. La disquette est cette fois-ci divisée en 'part de gâteau'. Il y a ainsi 9 parts ou 9 secteurs sur le disque (voir schéma no 1 ). Tout ce qui a été décrit plus haut concerne le format 'DATA', Il faut donc utiliser FORMAT D sous CP/M afin d'obtenir les chiffres donnés plus haut. Les secteurs contiennent chacun 512 octets, une piste comprenant 9 secteurs a donc une capacité de 4608 octets (ou 4.5 Ko) et puisqu'il y a 40 pistes la capacité totale du disque est de 184320 octets (ou 180 Ko).

Quelle est l'utilité de ce découpage? Cela permet à l'ordinateur de savoir où se trouvent les données. Cela évite d'avoir à chercher partout sur le disque. Le formatage permet de déterminer la position d'un programme sur le disque en Indiquant un numéro de piste et un numéro de secteur. Il est donc nécessaire d'avoir en permanence quelque part les coordonnées de tous les fichiers du disque, c'est la fonction même du catalogue comme nous allons le voir dans le paragraphe suivant.

LA STRUCTURE DU CATALOGUE

Afin de mieux saisir le pourquoi du comment il n'y a rien de plus simple que de prendre un exemple. Vous avez donc une disquette vierge formatée en 'DATA' soit grâce à CP/ M (commande FORMAT D pour les 464 ou DISCKIT3 pour les 6128) ou grâce à un utilitaire pour disquettes (Discology , Hercule, Oddjob , etc.). Vous allez maintenant créer un petit programme du style :

10 PRINT "Bonjour je suis un CPC 464'

Ensuite vous sauvez cette ligne par SAVE 'EXEMPLE'. Maintenant munissez-vous de votre utilitaire pour disquette préféré et nous allons explorer le contenu du catalogue. Il faut savoir que le catalogue est Inscrit toujours au même endroit sur le disque suivant le format. Avec le format 'DATA' le catalogue commence sur la piste 0, secteur 1. En Indiquant ces coordonnées à votre utilitaire, vous devez tomber directement sur le catalogue (en fait le format exact est piste 0, secteur &C1. L'hexadécimal est souvent le seul langage compris par les utilitaires).

Vous avez à l'écran le contenu d'un secteur ou d'un demi-secteur. Avec l'exemple donné plus haut, la première ligne contenant des chiffres doit être la suivante:

00 45 58 45 4D 50 4C 45 20 42 41 53 00 00 00 02 .EXEMPLE BAS....

Si vous n'obtenez pas ceci il faudra reprendre une disquette vierge et recommencer toutes les opérations. Mate Je suis certain que tout s'est bien déroulé, nous allons donc pouvoir regarder cette ligne de plus près. Le premier nombre 00 est le numéro de user. Lorsque vous faites un CAT avec le BASIC un message apparaît DRIVE A USER 0. L'Amstrad liste alors tous les fichiers qui commencent par 00 dans le catalogue. Toujours avec le BASIC, Il suffit de taper |USER,1 puis CAT pour lister tous les fichiers commençant par 01. En fait ce système à été conçu pour une utilisation â plusieurs personnes : chacun se volt attribué un numéro de user (d'utilisateur) et ne liste ainsi que ses propres programmes. On peut aller Jusqu'à 16 utilisateurs puisqu'il y a 16 numéros de 0 â 15. Cela n'est pas vraiment utile sur un CPC mais il existe un Intérêt à ce premier nombre : c'est lui qui Indique un fichier effacé avec l'option IERA par exemple. En effet l'Amstrad prend ses précautions, lorsque vous sélectionnez un effacement de fichier ilne détruit pas le fichier. Il se contente de placer une valeur spéciale à la place du 00. Cette valeur c'est 229 ou &E5 en hexa. Dans notre exemple il est très simple d'effacer le fichier EXEMPLE en utilisant l'éditeur de secteurs et en remplaçant le 00 par E5. Essayez ce n'est pas dangereux I. N' oubliez pas de valider la transformation en choisissant l'option 'écrire secteur', puis vous pouvez quitter l'utilitaire et faire un CAT sur la disquette transformée. O, miracle le nom du fichier a disparu et la capacité indiquée est de nouveau 178 Ko. Pourréaliser l'opération inverse, il suffit de recharger votre utilitaire pour disquettes et d'examiner une fois de plus la piste 0. secteur &C1 de notre disquette exemple. Cette fois-ci remplacez donc le E5 du début de ligne par un 00. Votre fichier est à nouveau présent au catalogue comme vous pouvez le constater. Ainsi vous devez mieux comprendre comment fonctionnent les programmes 'régénérateurs'de fichiers. Cela fonctionne à tous les coups ou presque : il ne faut pas avoir écrit sur la disquette après un effacement. En effet l'ordinateur considère, même si les données sont toujours présentes, que la place est libre. Il n'hésitera pas à inscrire les nouvelles données sur les anciennes. A ce moment le 'truc'du E5 ne fonctionnera plus.

Après cette parenthèse, revenons à nos valeurs. Nous avons donc en seconde position un 45. Ce nombre représente un symbole codé selon la norme ASCII (American Standard Code for Information Interchange), il s'agit en gros de permettre un échange entre plusieurs ordinateurs, la norme ASCII étant commune à l'Amstrad. l'Atari, au Macintosh et à tous les autres micros. Vous trouverez dans votre manuel les correspondances entre symboles alphanumériques et codes ASCII. Dans notre exemple 45 ou 69 en décimal est le code de la lettre 'E'. Le nombre suivant dans notre ligne est 58. Un rapide coup d'œil dans le manuel nous apprend que ce code est celui de la lettre 'X', etc. En examinant tous les nombres les uns après les autres on obtient 'EXEMPLE' qui est le nom de notre fichier. Le 9eme nombre (20) vous a peut-être posé plus de problème. Il s'agit du 'caractère' ESPACE ou blanc. Ensuite les trois codes suivants ne vous poseront pas de difficulté, vous reconnaîtrez sans peine le mot BAS qui est aussi appelé 'extension'. Vous ne trouverez pas dans cette ligne le symbole '.' (point) celui-ci étant ajouté par l'ordinateur lors de l'affichage du catalogue.

Enfin nous laisserons de coté les 4 valeurs suivantes qui ne nous intéressent pas pour l'Instant. Sachez cependant que la seconde ligne de 16 nombres située juste en dessous de la première contient les coordonnées du programme EXEMPLE. Cette ligne doit ressembler à ceci:

02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

LE DETOURNEMENT DE CATALOGUE

Enfin, nous y voici diront les plus Impatients. Pas tout à fait, avant de passer à la pratique, il reste un peu de théorie a assimiler. Rien de bien compliqué, rassurez-vous. Il s'agit encore du code ASCII. Ce code comprend les nombres de 0 à 255. Contrairement à l'affirmation énoncée plus haut, tous les ordinateurs n'ont pas les mêmes correspondances, en effet, généralement entre 0 et 31 puis à partir de 129, les choses se compliquent. A partir du code 129 on trouve en effet les caractères graphiques et de 0 à 31 se sont les codes de contrôle qui occupent la place. Nous allons les examiner de plus près : Ils nous Intéressent au plus haut point.

Nous avons vu que les catalogues étaient constitués entre autres de codes ASCII pour le nom du fichier. On peut donc supposer que lorsque nous lançons la commande CAT, il se déroule un processus qui permet à l'ordinateur de lire, de décoder et d'afficher les lettres (ou les chiffres) correspondant aux codes ASCII. Il se trouve que les fameux codes de contrôle (les codes ASCII de 0 à 31) ne correspondent pas à des symboles mais à des actions. Cela n'est peut-être pas très clair, alors revenons au BASIC et à l'instruction CHR$. Cette dernière est utilisée sous ce format : PRINT CHR$(code ASCII). Son action est simple, elle permet d'afficher le symbole correspondant au code ASCII entre parenthèses. Les nombres de 32 à 255 produisent en effet les symboles attendus. Par contre, si vous essayez un PRINT CHR$(7) vous obtiendrez un bip mais il n'y aura pas de symboles à l'écran. Vous avez utilisé un code de contrôle. Essayez également un PRINT CHR$(12). vous obtiendrez cette fois-ci un effacement de l'écran. Il y a 32 codes au total, comme vous pouvez le constater dans votre manuel.

Vous remarquerez que certains codes ont besoin de paramètres : le code 04 par exemple. Ce code modifie le mode écran grâce au paramètre qui suit. Un exemple plus concret : éteignez puis rallumez votre machine : vous êtes en MODE 1. pour passer en MODE 2 vous pouvez taper PRINT CHRS(4);CHRS(2) puis ENTER ou RETURN. Si tout se passe bien, l'écran s'efface et le READY est inscrit en haute résolution. En effet le premier CHRS active le code modification d'écran, le deuxième CHRS est alors considéré comme paramètre et non plus comme code. C'est pourquoi on obtient l'équivalence avec l'instruction MODE 2 du BASIC. Les codes les plus utilisés vont être, par ordre croissant : 04,05,06,0C, 0E, 0F, 15,28,29,1F. Nous parvenons tout de même au vif du sujet. Nous avons dit plus haut que l'instruction CAT lisait et interprétait les codes ASCII qui constituent, entre autres, le catalogue. Puisque nous connaissons maintenant les codes de contrôle il est facile d'imaginer l'usage que nous allons en faire pour détourner le catalogue de sa fonction première.

THE END

La route est presque terminée, il faut encore utiliser votre utilitaire pour disquette. Les modifications se feront directement sur le disque d'où l'intérêt d'utiliser une disquette ne contenant pas de programmes importants : les données risquent d'être effacées. Il faut prendre la disquette exemple déjà utilisée plus haut pour s'entraîner un peu au 'charcutage' de catalogue. Revoyons un peu nos connaissances fraîchement acquises. Les 2 lignes de 16 valeurs chacune contenant le numéro de user, le nom du fichier et la position du fichier sur la disquette sont appelées "entrée". Chaque fichier que vous enregistrerez aura donc une entrée dans le catalogue. Ce dernier occupant les secteurs &C 1 à &C5 de la piste 0 (format DATA). Il y a 64 entrées possibles sur les disquettes de l'Amstrad. A raison de 32 octets par entrée (les deux lignes de 16 octets), nous disposons donc de 64 * 32=2048 octets. En fait, pour notre propos, cet espace n'est pas totalement disponible : premièrement il y a peut-être des fichiers à installer sur la disquette; à quoi servirait le message "Tapez RUN 'DISC pour commencer" s'il n'y avait pas de programme DISC dans le catalogue. Deuxièmement, la seconde ligne de l'entrée du catalogue n'est pas utilisable. Ceci divise par deux la place disponible. Bref. Il n'est pas question de transcrire la Bible sur le catalogue. Voilà comment procéder : votre éditeur de secteurs chargé, votre disquette exemple est insérée. Vous allez vous placer sur le deuxième octet (le premier est le numéro de user, laissez-le à zéro pour l'instant) c'est-à-dire sur le nombre 45. C'est à cet endroit que l'ordinateur va commencer à lire et à transcrire les codes ASCII du nom de fichier pour les afficher lors du catalogue. A priori l'ordinateur ne connaît pas la signification des symboles : il se contente de lire 11 valeurs à la suite : le nom du fichier (8 caractères au maximum) et l'extension (3 caractères maximum). Donc on peut facilement tromper l'ordinateur en inscrivant des codes de contrôle à la place du nom du fichier. Si vous placez un 04 sur le 45 de la première ligne puis si vous remplacez la donnée suivante (58) par 02. vous aurez créé un premier détournement. Pour vous en convaincre, il suffit de revenir sous BASIC et de taper CAT.

Si vous n'avez pas oublié de réécrire le secteur, afin que vos modifications soient enregistrées, vous avez dû observer les phénomènes suivants : l'écran s'est effacé, le catalogue est apparu en mode 2 et le seul fichier présent était intitulé EMPLE.BAS. Le code 04 correspond au mode d'écran. On peut ajouter à sa suite les paramètres 0, 1 ou 2 qui donneront respectivement la basse, la moyenne et la haute résolution. Il est préférable de se fixer un objectif : la création d'une page écran en mode 0 (basse résolution) avec un texte au milieu de l'écran "TAPEZ RUN"DISC", le tout en lettres clignotantes rouges et bleues.

Tout d'abord, il faut modifier notre exemple précédent. Après le 04 il faut placer un 00 (pour la basse résolution), ensuite tapez donc le code 1C, Il s'agit de la modification des encres. Ceci correspond à la commande INK du BASIC. Mais contrairement au BASIC, il faut absolument 3 paramètres. Le premier c'est le numéro de l'encre qui varie de 0 à 15. La valeur zéro est celle du fond. Puisque nous désirons un fond noir, il faut taper 1C 00 00 00. Ce qui signifie : mettre l'encre du fond (0) en noir (0) avec une deuxième encre noire (0). La deuxième encre est utilisée pour le clignotement. Dans ce cas précis les deux couleurs clignotantes sont noires, l'effet ne se produit pas.

Nous poursuivons notre modification en ajoutant à la suite un autre code 1C. Celui-ci concernera la couleur de l'écriture. Nous utiliserons le numéro d'encre 1 dans notre exemple. La ligne se poursuivra donc par : 01. Nous voulons une écriture clignotante rouge et bleue. Il faut choisir les valeurs suivantes :

06 02

Votre première ligne doit ressembler à ceci :

00 04 00 1C 00 00 00 1C 01 06 02 53 00 00 00 02

Maintenant II ne reste plus qu'un octet de disponible pour placer un code de contrôle. Seul le "S" de BAS reste encore de notre exemple originel.
Nous allons remplacer ce "S" ou plutôt le code 53 par le code 15. Ce dernier bloque toute sortie de texte à l'écran. Il a pour fonction d'empêcher la fonction CAT de sortir la taille du fichier. Dans notre cas le "fichier" aura une taille égale à zéro, si vous omettiez le code 15, il y aurait un beau 0 Ko sur l'écran.
La première ligne est presque terminée. Les codes qui suivent le 15 sont à mettre à zéro. La deuxième ligne doit également être mise à zéro. Les deux lignes sont représentées de cette manière :

00 04 00 1C 00 00 00 1C 01 06 02 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Il ne reste plus qu'à s'occuper du texte. Il suffit de passer à la troisième ligne du texte. Dorénavant toutes les opérations vont être les mêmes. Placez-vous en début de ligne, tapez le code 00, ensuite 06 (autorise à nouveau l'affichage du texte), puis 1F. Une petite explication s'impose à ce niveau : le code IF est un LOCATE, c'est-à-dire qu'il a besoin de 2 paramètres, les coordonnées X et Y pour le placement de la première lettre. Les codes suivants seront donc ces paramètres. N'oubliez pas de tenir compte de la résolution actuelle de l'écran car les coordonnées en X peuvent varier de 1 à 80. Dans notre exemple vous pouvez Indiquer 06 et OC. Le code ASCII de la première lettre doit être entré. Pour nous ce sera le code 54 correspondant à la lettre "T". Dernière étape : la mise en place du code 15 et des zéros pour tous les octets qui suivent.

Comme d'habitude, la ligne suivante sera intégralement remplie de zéros et vous n'aurez qu'à continuer ainsi pour toutes les autres lettres. Vous devez avoir les lignes suivantes à cette étape :

00 04 00 1C 00 00 00 1C 01 06 02 15 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 06 1F 06 0C 54 15 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Vous remarquez qu'il y a beaucoup de place gâchée, il existe une solution qui permet de remédier à ce problème. SI cela vous intéresse, nous examinerons de nouvelles possibilités le mois prochain.

CPC n° 38- Octobre 1988 ,p23

★ ANNÉE: 1988
★ AUTEUR: O. SAOLETTI

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

Lien(s):
» Coding » Assembleur ACPC n°38 - Assembleur
» Coding » Bidouilles ACPC n 04 - Le PSG (1/2)
» Coding » Assembleur ACPC n°10 - Initiation : Les decalages
» Applications » Cassette Catalogue
» Coding » Assembleur ACPC n°15 - La mémoire écran
» Coding » Bidouilles ACPC n°08 - RSX editeur de secteurs
Je participe au site:

» 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
Page créée en 158 millisecondes et consultée 2013 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.