CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/1.6.5 - Formatter une disquette sous Basic (15e Complément)Coding Classeurs Weka
4/0 - Langages du CPC

4/1.6 - Basic approfondi

4/1.6.5 - Formatter une disquette sous Basic

Nous vous proposons dans ce chapitre d'utiliser les connaissances que vous avez acquises sur la programmation de nouvelles instructions supplémentaires au Basic, de type RSX (voir Partie 4, chapitre 1.6.2 p. 1 à 35) pour écrire une instruction de formattage. Nous vous conseillons par ailleurs de charger cette nouvelle instruction chaque fois que vous mettrez au point, ou que vous commencerez à entrer un programme Basic.

Beaucoup d'entre vous ont certainement rencontré le problème qui sera résolu par cette nouvelle commande. En effet, il arrive que dans la mise au point, ou l'amélioration d'un programme, celui-ci, de part le nombre de lignes ajoutées, ne permette plus la sauvegarde sur la disquette d'origine (n'oublions pas le .BAK qui est créé à chaque sauvegarde d'un fichier déjà existant), signalée par l'horrible message Disk Full. A ce moment arrive l'angoisse pour celui (nous en fîmes partie) qui, dans l'empressement n'a pas prévu de disquette préalablement formattée.

Vous aurez beau avoir à votre disposition autant de disquettes vierges nouvellement achetées, aucun recours possible avec celles-ci.

La seule solution est d'utiliser la disquette du système d'exploitation CP/M (CP/M 2.2 ou CP/M 3.0), et de lancer l'un des utilitaires FORMAT.COM, DISCKIT2.COM ou DISCKIT3.COM.

Le résultat : des dizaines, voir des centaines de lignes de programmes laborieusement entrées au clavier qui s'envolent parmi la multitude d'octets de la mémoire.

Nous avons donc réalisé pour vous une nouvelle instruction résidente, que nous appellerons ùFORMAT, dont nous étudierons la syntaxe exacte ultérieurement, et qui vous permettra, de plus, d'améliorer vos connaissances sur le fonctionnement logiciel d'un formattage sur votre AMSTRAD-CPC.

Les débutants en langage machine pourront parfaire leurs connaissances en étudiant l'algorithme et l'algorigramme décrit, trouveront des utilisations possibles d'un nouveau vecteur du système d'exploitation ; les passionnés du code hexadécimal y trouveront certainement de quoi personnaliser leurs disquettes en ne formattant par exemple qu'une piste unique.

I. Rappel sur les disquettes et les différents formats

Précisons d'abord, afin d'utiliser le même vocabulaire, que nous appellerons FORMAT le terme en relation directe avec le formattage, et TAILLE le mot en relation avec les dimensions physiques de la disquette (3 pouces, 3 pouces et 1/2, 5 pouces ¼).

Disquette - Piste - Secteur

Sans nous étendre sur l'organisation de la surface de la disquette, rappelons que lorsque vous achetez une disquette, celle-ci est entièrement vierge de toute donnée, et elle n'est pas, hormis sa taille (3 pouces dans le cas des disquettes pour AMSTRAD-CPC), prévue pour fonctionner sur un seul type de micro-ordinateur. La disquette 3 pouces faisant exception à la règle, car la société Amstrad, espérant vainement imposer un standard, est quasiment la seule à utiliser cette dimension.

C'est l'ordinateur et son lecteur de disquettes qui va inscrire et organiser, lors du formattage, les données nécessaires à son utilisation, sur le support magnétique. Chaque type d'ordinateur aura donc un formattage différent.

Dans le cas de l'AMSTRAD-CPC, et dans pratiquement tous les micro-ordinateurs travaillant encore avec le système d'exploitation CP/M, l'organisation de la disquette est représentée sur la figure 1.


Fig. 1 : Organisation de ta surface d'une disquette.

Le nombre de pistes sous CP/M est dans notre cas limité à 40 par face, qui sont numérotées de 0 à 39, la piste 0 se trouvant sur l'extérieur de la surface, et la piste 39 à l'intérieur.

Chacune des pistes est découpée en portions, tel un camembert, appelées secteurs (huit ou neuf secteurs selon le format), chaque secteur pouvant supporter 512 octets de données. Ces secteurs sont numérotés de façons différentes selon les formats.

Dans certains logiciels ou certaines revues, vous trouverez les appellations anglo-saxonnes : TRACK pour PISTE et SECTOR pour SECTEUR.

Les formats

Selon l'utilisation requise, il vous est possible de formatter vos disquettes sous quatre formats différents : IBM, SYSTEME CP/M, VENDOR ou DATA:

Le format IBM

Ce format qui n'est quasiment pas utilisé sur Amstrad CPC.

Il travaille sur 40 pistes de 8 secteurs chacune, numérotées de 01 à 08. La première piste est réservée au système d'exploitation.

Chaque secteur peut comporter 512 octets de données.

Le format SYSTEME

Le format SYSTEME est le format standard des disquettes sur AMSTRAD-CPC, et sur PCW, car c'est celui prévu pour travailler sous CP/M, et permettant de travailler avec des fichiers sous AMSDOS, donc en Basic.

Les caractéristiques de ce format sont :

  • 40 pistes par face numérotées de 0 à 39 ;
  • 9 secteurs par piste numérotés de &41 (hexadécimal) à &49 ;
  • taille d'un secteur : 512 octets de données ;
  • 64 fichiers au maximum au catalogue ;
  • deux pistes réservées au système : les pistes 0 et 1 :

Piste 0 secteur &41 : secteur BOOT (démarrage) ;

Piste 0 secteur &42 : secteur configuration ;

Piste 0 secteur &43 à &47 : non utilisés ;

Piste 0 secteur &48 et &49 ainsi que toute la Piste 1 sont réservés à CCP (Console Command Processeur) et BDOS (Basic Disk Operating System).

Ce format permet de démarrer le CP/M 2.2 par la commande ùCPM. Cette même commande démarre aussi CP/M 3.0 (ou CP/M + ) mais avec un secteur BOOT différent et l'utilitaire C10CPM3.EMS.

La capacité disponible se calcule facilement par : (40 pistes - 2 pistes réservées) * 9 secteurs * 512 octets - 2 * 1024 octets au catalogue = 173056 octets = 169 k-octets.

Le format VENDOR

Le format VENDOR correspond à une préparation identique au format SYSTEME avec la seule particularité que les pistes réservées ne contiennent pas le système CP/M.

En effet, le système d'exploitation CP/M est la propriété de la société DIGITAL RESEARCH, il est donc interdit par la loi de le distribuer ou de le vendre, sans payer des droits , ce qui augmenterait le prix du logiciel sur la disquette.

Tout utilisateur de logiciel fonctionnant sous CP/M possède ce système d'exploitation, qu'il est censé avoir acheté. Il lui sera ainsi facile de l'installer à l'aide de l'utilitaire SYSGEN.COM qui lui a été livré.

Le format DATA

Ce format est couramment employé par les programmeurs n'utilisant pas CP/M sur leurs disquettes, car il permet de récupérer la place des deux premières pistes.

Les caractéristiques en sont :

  • 40 pistes par faces numérotées de 0 à 39 ;
  • 9 secteurs par pistes numérotés de &C1 à &C9 ;
  • taille d'un secteur : 512 octets ;
  • 64 fichiers au catalogue ;
  • pas de pistes réservées, ce qui permet d'obtenir : 2 * 9 * 512 = 9216 octets = 9 k-octets supplémentaires pour obtenir une capacité formatée 169 + 9 = 178. k-octets par face.

Sous ce format il est hélas impossible de ré-implanter CP/M sauf par un nouveau formattage.

OÙ SONT LES DONNÉES SUR LA DISQUETTE ?

La disquette est découpée en secteurs et en pistes, lors du formattage, afin que votre CPC retrouve les données cherchées grâce au marquage de leur emplacement.

Les fichiers ou les programmes seront ainsi découpés en blocs de 512 octets, enregistrés dans les secteurs.

Mais tout ceci n'est pas aussi simple que cela : une piste n'est pas uniquement constituée de 9 * 512 = 4608 octets, mais de beaucoup plus, afin de pouvoir les relire et les inscrire avec fiabilité.

Voyons comment est préparé le contenu de la disquette lors du formattage, pous vous donner une idée de l'ampleur du travail effectué par le composant supervisant le tout : le µPD 765 AC (les mordus d'électronique trouveront les affectations de ses différentes broches en Partie 2 chapitre 3.5 — notez que son appellation la plus courante est FDC 765 pour Floppy Disk Controller).

Le numéro de la piste est connu grâce à l'utilisation d'un moteur pas à pas d'une très grande précision.

Une fois sur la piste qu'il a choisie, le µPD 765 AC doit d'abord être prévenu du début d'une piste par la détection du signal donné par une cel

Iule au passage d'un trou sur la disquette : le trou d'INDEX (vous pouvez voir apparaître ce trou en faisant tourner la disquette avec les doigts dans les perforations du plastique enveloppant le support magnétique).

Au début de la piste signalée, 80 octets blancs sont inscrits pour laisser à l'électronique et la mécanique le temps de réagir. On appelle ces octets des octets de GAP (jeu, espace).

Ensuite, 12 octets permettant de synchroniser le µPD 765 AC sont inscrits ainsi que 3 + 1 autres octets de repérage de la piste, puis viennent 50 autres octets de GAP.

Nous avons donc là : 80 + 12 + 4 + 50 = 146 octets figés pour le début de la piste.

Viennent ensuite les secteurs.

Chaque secteur sera composé, dans l'ordre, par :

  • 12 octets de synchronisation ;
  • 3 + 1 octets de repérage du secteur ;
  • 4 octets d'identification, dont le premier indique le numéro de piste, le deuxième le numéro de tête, le troisième le numéro de secteur, le quatrième la taille du secteur ;
  • 2 octets permettant de contrôler la validité des données précédentes par leur somme (appelée en langage informatique CHECKSUM) ;
  • 22 octets de GAP ;
  • 12 octets de synchronisation ;
  • 3+1 octets de repérage des données ;
  • les 512 tant attendus octets de données (lors du formattage, contiendront tous la valeur &E5) ;
  • 2 octets de contrôle ;
  • 54 octets de GAP pour un éventuel débordement des données lors d'une prochaine procédure d'écriture.

Vous retrouverez en figure 2 la composition d'une piste de la disquette.

Vous vous apercevrez ainsi que sur une disquette au format DATA, il y a ainsi :

40 * (146 + 9 * 628) = 231920 octets, soit plus de 226 kilo-octets qui y sont inscrits.


Fig. 2 : Organisation des informations logiques placées sur une piste de disquette 3 pouces Amstrad.

II. La logique du formattage et l'instruction ùFORMAT

Nous allons ici découvrir que pour réaliser nous-même, notre programme de formattage, l'introduction de tous les octets précédemment décrits ne sera pas nécessaire. Seuls les 4 octets d'identification seront à fournir. Il nous faudra ainsi une petite connaissance de la ROM sous l'AMSDOS.

Ceux d'entre-vous, passionnés de langage machine, ont certainement découvert, en décortiquant le programme Partie 9, chapitre 8.10, la possibilité d'utiliser certaines instructions cachées de la ROM AMSDOS, pour lire ou écrire sur un secteur particulier de la disquette.

Il existe de plus une instruction permettant de formatter une piste en particulier, que nous utiliserons donc.

Accès à l'instruction &06

Cette instruction est nommée par un numéro, mais n'est malheureusement pas accessible directement depuis le Basic.

On peut en trouver la définition dans le listing de la ROM à l'adresse COBC (dans les premières versions de ROM, il est possible qu'elle soit différente sur certains AMSTRAD-CPC) ; nous vous donnons d'ailleurs le fruit de nos recherches entre les adresses et &C0B6 et &C0BF, par un desassemblage de cette zone :

C0B6
C0B7
C0B8
C0B9
C0BA
C0BB
C0BC
C0BD
C0BE
C0BF
81
82
83
84
85
86
87
88
89
00
DEFB
DEFB
DEFB
DEFB
DEFB
DEFB
DEFB
DEFB
DEFB
DEFB
01H + 80H ; INSTRUCTION 01
02H + 80H ; INSTRUCTION 02
03H + 80H ; INSTRUCTION 03
04H + 80H ; INSTRUCTION 04
05H + 80H ; INSTRUCTION 05
06H + 80H ; INSTRUCTION 06
07H + 80H ; INSTRUCTION 07
08H + 80H ; INSTRUCTION 08
09H + 80H ; INSTRUCTION 09
00H ; FIN DE TABLE

Vous pouvez ainsi remarquer, en vous référant Partie 4, chapitre 1.6.2, que sont définies ici 9 instructions numérotées de 01 à 09, les utilisateurs chevronnés de celles-ci prennent plutôt l'habitude de les nommer de &81 à &89, de par leur particularité.

Une telle définition implique bien sûr une table de saut, voici celle inscrite dans notre ROM aux adresses C033 à C04D :

C033
C036
C039
CQ3C
C03F
C042
C045
C048
C04B
C3 72 CA
C3 0D C6
C3 81 C5
C3 66 C6
C3 4E C6
C3 52 C6
C3 63 C7
C3 30 C6
C3 03 C6
JP 0CA72H ; MESSAGES ON/OFF (&01)
JP 0C60DH ; PARAMETRE DISQUE (&02)
JP 0C581H ; PARAMETRE FORMAT (&03)
JP 0C666H ; LECTURE SECTEUR (&04)
JP 0C64EH ; ECRITURE SECTEUR (&05)
JP 0C652H ; FORMATTAGE PISTE (&06)
JP 0C763H ; CHERCHE PISTE (&07)
JP 0C630H ; DISQUE PRESENT ? (&08)
JP 0C603H ; TENTATIVES LECTURE (&09)

On constate, dans cette table, que le saut pour l'instruction, que nous appellerons maintenant &86, s'effectue à l'adresse &C652. Seule une routine en langagé machine permettra d'y accéder car elle exige une commutation de la ROM supérieure.

Mais même avec une commutation, cette adresse n'est pas à utiliser telle quelle, car telle ou telle autre version de ROM ne sera pas forcément identique, donc ne permettra pas une transposition automatique sur certains modèles de CPC, au cas où des améliorations de ROM auraient été effectuées.

Heureusement, il existe un vecteur en RAM, théoriquement immuable, qui permet d'accéder à une procédure déterminant l'adresse de n'importe quelle extension en ROM pour l'exécuter ultérieurement, il s'agit du vecteur KL-FIND-COMMAND à l'adresse &BCD4 (voir partie 4, chapitre 2.7 page 54).

Ce vecteur requiert un paramètre dans le registre double HL et qui contient l'adresse ou se trouve définie l'instruction &86 (en RAM cette fois-ci).

Au retour, l'indicateur de retenue (ou Flag Carry) contient la valeur 1 si l'extension existe, le registre C le numéro de ROM où elle se trouve, et HL l'adresse effective.

Le programme correspondant se présentera ainsi :

LD HL,ADR86
CALL KL-FIND-COMMAND

... suite ...

Une fois connus le numéro de ROM, qui est normalement 7, et l'adresse, effectuons un saut à ces coordonnées.

La méthode évidente passe par l'utilisation des ports d'entrées sorties, donc du GATE ARRAY, pour effectuer une commutation de la ROM supérieure AMSDOS. Ce serait oublier la possibilité laissée par les concepteurs du moniteur, qui ont placé à notre disposition des vecteurs sous forme d'instruction dites "RESTART". Celle qui nous intéresse est dénommée couramment RST &18.

RST &18 est une interruption du microprocesseur Z80. Elle a été implantée dans le moniteur de l'AMSTRAD-CPC de façon à permettre d'appeler une routine en ROM ou en RAM. Derrière cette instruction doit se trouver l'adresse d'une zone mémoire en RAM qui contient dans l'ordre :

  • l'octet bas de l'adresse en ROM ;
  • l'octet haut de l'adresse en ROM ;
  • le numéro de la ROM supérieure.

La forme du programme d'accès sera donc :

RST 018H
DEFW SAUT

... suite du programme...

SAUT : octet bas de l'adresse octet haut de l'adresse numéro de ROM

Il suffira ainsi de ranger dans la zone de SAUT les paramètres remis suite à l'appel de KL-FIND-COMMAND.

Quels paramètres lui transmettre ?
Comme beaucoup de routines et vecteurs du CPC, l'instruction &86 doit connaître certains paramètres pour pouvoir être exécutée.

Ces paramètres sont :

  • le numéro du lecteur dans le registre E ;
  • le numéro de la piste à formatter dans le registre D ;
  • le numéro du premier secteur dans le registre C ;
  • l'adresse d'une table nécessaire au formattage.

Dernière étape de notre étude : la composition de cette table de formattage. Dans cette table, se trouve, pour chaque secteur : les quatre octets nécessaires à leur identification, ceux qui portent le même nom en figure 2.

Dans l'ordre nous aurons :

  • numéro de piste ;
  • numéro de tête ;
  • numéro du secteur ;
  • taille du secteur ;

et ainsi de suite pour tous les secteurs.

Le numéro de piste sera celui de la piste dont le formattage est requis. Le numéro de tête est toujours 0 car le lecteur Amstrad ne possède qu'une tête. Le numéro du secteur sera, selon le formattage, l'un des numéros de &41 à &49 pour le format VENDOR ou SYSTEME, &C1 à &C9 pour le format DATA, &01 à &08 pour le format IBM (que nous passerons dorénavant sous silence !), et la taille du secteur sera toujours égale à 2 pour des secteurs de 512 octets.

Une ultime précision, par exemple pour le format DATA, la logique voudrait que le premier secteur soit numéroté &C1, le deuxième &C2, le troisième &C3, ... etc. En fait, supposons le cas d'une lecture, comme c'est souvent le cas, d'un fichier sauvegardé sur les secteurs &C1, puis &C2 et enfin &C3, la rapidité de traitement des informations ferait en sorte que le secteur &C1 serait géré bien avant que la disquette n'ait effectué à peine plus d'un quart de tour. Il a été convenu pour optimiser les performances que les secteurs seraient placés tous les demi-tours de la surface magnétique environ. L'ordre est ainsi :

&C1 - &C3 - &C5 - &C7 - &C9 - &C2 - &C4 - &C6 - &C8

ce qui donne pour le format SYSTEME ou VENDOR :

&41 - &43 - &45 - &47 - &49 - &42 - &44 - &46 - &48

La table de formattage pour une piste aura ainsi l'aspect suivant :

SECTEUR1 : DEFB Nodepiste ; DE 0 à 028H
DEFB 0 ; TETE ZERO
DEFB &C1 ; DANS LE CAS D'UN FORMAT DATA
DEFB 2 ; TAILLE POUR 512 OCTETS
SECTEUR2: DEFB Nodepiste
DEFB 0
DEFB &C3
DEFB 2
SECTEUR3: DEFB Nodepiste
DEFB 0
DEFB &C5
DEFB 2
SECTEUR4: DEFB Nodepiste
DEFB 0
DEFB &C7
DEFB 2
SECTEUR5: DEFB Nodepiste
DEFB 0
DEFB &C9
DEFB 2
SECTEUR6: DEFB Nodepiste
DEFB 0
DEFB &C2
DEFB 2
SECTEUR7: DEFB Nodepiste
DEFB 0
DEFB &C4
DEFB 2
SECTEUR8: DEFB Nodepiste
DEFB 0
DEFB &C6
DEFB 2
SECTEUR9: DEFB Nodepiste
DEFB 0
DEFB &C8
DEFB 2

L'instruction basic ùFORMAT

La syntaxe

L'instruction nouvelle que nous allons créer, aura pour syntaxe :

ùFORMAT, lecteur,"type" où le caractère ù correspond au caractère "BARRE VERTICALE" code ASCII 124) sur certains modèles d'AMSTRAD-CPC et situé sur la même touche que le "a commercial" :

Le numéro de lecteur sera 0 pour le lecteur A et 1 pour le lecteur B.

Le type, à placer obligatoirement entre guillemets pourra être VENDOR ou DATA, ou tout autre nom commençant par les deux lettres V ou A. Nous vous conseillons les quatre utilisations suivantes :

  • ùFORMAT,O/'V" ou ùFORMAT,0,"v" pour formatter sur le lecteur A une disquette au format VENDOR ;
  • ùFORMAT,0,"D" ou ùFORMAT,0,"d" pour formatter sur le lecteur A une disquette au format DATA ;
  • ùFORMAT, 1 ,"V" ou ùFORMAT,0,"v" pour formatter sur le lecteur B une disquette au format VENDOR ;
  • ùFORMAT, 1,"D" ou ùFORMAT,0,"d" pour formatter sur le lecteur B une disquette au format DATA.

Nous nous sommes imposés de demander confirmation à l'utilisateur pour démarrer le formattage, celle-ci n'étant acceptée que si la réponse est O majuscule ou o minuscule pour OUI ; toute autre réponse renvoyant au Basic.

La confirmation passée, le logiciel attend automatiquement une disquette dans le lecteur, si elle ne s'y trouve déjà. Mais, si par hasard il n'y en avait pas, vous serez prié d'en placer une par le message :

Drive X: Disc missing Retry, Ignore or Cancel ?

et la seule alternative serait de placer une disquette puis d'appuyer sur la touche R, vous aviez bien confirmé ?!

L'algorithme

Nous allons à partir de maintenant, réinvestir toutes les connaissances acquises précédemment sur le formattage d'une piste, pour formatter les 40 pistes d'une face de disquette, et ce en utilisant une démarche algorithmique pour arriver au programme.

Voici, présenté dans ses grandes lignes, l'algorithme général du programme :

DEBUT
- Vérifier la validité du secteur (0 ou 1 )
et sauvegarder
CO
le cas échéant retourner au BASIC

FINCO

Vérifier la validité du type de formattage et sauvegarder

CQ
le cas échéant retourner au BASIC

FINCO
- Demander confirmation du formattage

CO
dans la négative retourner au BASIC

FINCO

- Signaler le formattage

- REPETER

REPETER

- Préparer la table de formattage

- JUSQU'A ce que les 9 secteurs soient prêts

- Ordonner le formattage de la piste

- JUSQU'A ce que la piste 39 soit atteinte

FIN

Vous pouvez déjà apercevoir les principales boucles dans les termes REPETER ... JUSQU'A qui laissent entrevoir que la table des secteurs sera créée par une structure itérative (donc par le calcul), ainsi que le formattage de toutes les pistes. En effet, il aurait été inconcevable d'écrire et d'entrer entièrement manuellement toute la table de formattage, ceci nous aurait coûté 9 * 4 * 40 = 1440 octets supplémentaires !

Nous ne détaillerons pas davantage l'algorithme dans ce chapitre, mais nous vous conseillons de le faire en vous aidant entre autre de l'ordinogramme que nous avons ci-dessous décrit.

L'ordinogramme

L'ordinogramme ou encore algorigramme (on trouve parfois l'appellation organigramme, qui est plus générale), schématise la structure générale d'un programme ici en assembleur Z80.

En premier lieu, un test sur le nombre de paramètres, envoyés lors de la frappe de ùFORMAT, lecteur, "type", qui se trouve dans le lecteur A.

On trouve ensuite deux tests concernant le numéro de lecture sur lequel on désire effectuer un formattage.

/im3/weka41543a.png

/im3/weka41544a.png

/im3/weka41545a.png

/im3/weka41545a.png

Ce numéro sauvegardé, le type de formattage est récupéré grâce à l'adresse de la chaîne de caractères, placée dans la pile paramètre, puis testé (4 possibilités pour le premier caractère).

/im3/weka41545a.png

Selon le type de formattage, le quartet haut est sauvegardé provisoirement (&40 ou &C0)...

On range ensuite le numéro de la première piste à formatter avant de demander confirmation par l'envoi d'un message et l'attente de la frappe d'une touche (se reporter Partie 4, chapitre 1.6.2, pages 2 à 6). La routine utilisée pour l'attente de la frappe d'une touche est le classique vecteur &BB06, suite à l'appui d'une touche revient avec le code ASCII de celle-ci dans le registre A. Celui-ci est testé par rapport au caractère O ou o.

En cas de confirmation, le formattage est signalé, puis la table de formattage créée pour une piste. Le formattage est lancé par l'appel de l'instruction &86. Et ainsi de suite pour chacune des 40 pistes.

La fin du formattage implique un retour au Basic bien sûr.

Le programme ASSEMBLEUR

Nous vous proposons ci-après le programme assembleur développé à partir de l'ordinogramme précédent.

Ce programme est commenté pour que chacun d'entre-vous puisse l'étudier et approfondir ses connaissances, tant sur la création des RSX, que dans le remplissage d'une table, ou l'utilisation de la nouvelle instruction.

Nous allons uniquement décrire ici ce qui n'apparaît pas dans l'ordinogramme, (car cela n'est pas toujours évident à insérer) : les réservations de place mémoire pour les différents paramètres éventuellement variables.

[NOLISTING]

;*********************************
;* REALISATION DE L'INSTRUCTION *
;* DE FORMATAGE EN BASIC *
;* |FORMAT,LECTEUR,"TYPE" *
;* LECTEUR A = 0 - LECTEUR B = 1 *
;* TYPE DATA = D - VENDOR = V *
; *********************************

  • Lignes 221 à 223 : se trouvent les 3 adresses qui recevront les données lecteur, piste en cours de formattage et type de formattage (&40 pour le format VENDOR, &C0 pour le format DATA.
  • Lignes 225 à 233 : on trouve la table d'ordre des secteurs 1, 3, 5, 7, 9, 2, 4, 6, 8, chiffres qui seront additionnés au nombre en relation avec le type de formattage avant d'être rangés dans la table de formattage.
  • Ligne 239 : on réserve une zone de deux octets où sera rangée l'adresse de l'instruction &86 suite à l'appel de KL-FIND-COMMAND.
  • Ligne 240 : ici viendra le numéro de ROM dans laquelle elle se trouve.
  • Lignes 241 à 249 : message de confirmation.
  • Lignes 251 à 254 : message signalant le formattage.
  • Ligne 256 : une zone de 36 octets est réservée pour la table de formattage qui sera remplie pour chaque piste à partir de la table d'ordre des secteurs, du numéro de tête, de la taille des secteurs et des informations fournies (type, lecteur).

Le chargeur Basic

Ce programme permettra aux lecteurs, qui ne se sont pas encore laissés tenter par le langage d'assemblage, de bénéficier malgré tout de l'utilitaire de formattage.

Les directives d'utilisation et de sauvegardes, que vous prendrez soin de frapper dans leur intégralité, car des calculs y sont effectués (examinez de près la ligne 310), figurent dans le listing.

10 REM ******************************
20 REM * CREATION D'UNE INSTRUCTION *
30 REM * DE FORMATAGE SOUS BASIC *
40 REM * SOUS LA FORME DE LA RSX *
50 REM * |FORMAT,lecteur,"format" *
60 REM ******************************
70 MODE 2
80 PRINT "PATIENCE,CHARGEMENT EN COURS"
90 REM
100 REM *** CHARGEUR BASIC ***
110 ADRESSE = &A000 120 1=0 130 SOMME = 0
140 RESTORE 470
150 READ A$
160 IF A$ = "XX" THEN 260
170 B$ = "&" + A$
180 B = VAL(B$)
190 SOMME = SOMME + B
200 POKE ADRESSE,B
210 ADRESSE = ADRESSE + 1
220 PRINT I ; CHRS(13);
230 I=I+1
240 GOTO 150
250 REM
260 REM ***** CONTROLE *****
270 IF SOMME <> 29611 THEN PRINT CHR$(12);CHRS(7);"ERREUR DANS LES DATAs":STOP
280 REM
290 REM *** SAUVEGARDE ***
300 PRINT "POUR SAUVEGARDER LA ROUTINE EN BINAIRE"
310 PRINT "SAVE ”;CHR$(34);"FORMAT.BIN"; CHR$(34) ; ",B,&A000 ,";RIGHT$(STR$(I) , LEN (STR$(I))-1)
320 PRINT
330 PRINT "CHARGEMENT PAR LOAD ";CHR$(34 ) ; "FORMAT.BIN";CHR$(34);",&A000
340 PRINT "MEMORY &9FFF
350 PRINT
360 PRINT "INITIALISATION PAR CALL &A000
370 PRINT
380 PRINT "UTILISATIONS POSSIBLES:"
390 PRINT " - |FORMAT,0,"D" : FORMATAGE DATA SUR DISQUE A"
400 PRINT " - |FORMAT,0,"V" : FORMATAGE VENDOR SUR DISQUE A"
410 PRINT " - |FORMAT, 1, "D" : FORMATAGE DATA SUR DISQUE B"
420 PRINT ” - |FORMAT,1,"V" : FORMATAGE VENDOR SUR DISQUE B"
430 PRINT
440 STOP
450 REM
460 REM *** CREATION RSX ***
470 DATA 21,1B,A0,01,0F,A0,CD,D1
480 DATA BC,3E,C9,32,00,A0,C9,14
490 DATA A0.C3.1F.A0,46,4F,52,4D
500 DATA 41,D4, 00,00, 00,00,00
510 REM *** RECUPERE PARAMETRES ***
520 DATA FE,02,C0,DD,7E,02,FE,00
530 DATA 28,03,FE,01,C0,32,D3,A0
540 DATA DD,6E,00,DD,66,01,23,5E
550 DATA 23,56,1A
560 REM *** CONVERSION TYPE FORMAT ***
570 DATA FE,56,28,0D,FE,76,28,09
580 DATA FE,44,28,09,FE,64,28,05
590 DATA C9,3E,40,18,02,3E,C0,32
600 DATA D5,A0,3E,00,32,D4,A0
610 REM *** AFFICHAGE MESSAGE ***
620 DATA 21,E3,A0,7E,23,FE,FF,28
630 DATA 05,CD,5A,BB,18,F5,CD,06
640 DATA BB,FE,4F,28,03,FE,6F,C0
650 DATA 21,1F,A1,7E,23,FE,FF,28
660 DATA 05,CD,5A,BB,18,F5
670 REM *** CREATION TABLE ***
680 DATA 06,09,21,39,A1,11,D6,A0
690 DATA 3A,D5,A0,4F,3E,E3,CD,5A
700 DATA BB,3A,D4,A0,77,23,3E,00
710 DATA 77,23,1A,81,77,23,3E,02
720 DATA 77,23,13,10,EC
730 REM *** FORMATAGE PISTE ***
740 DATA 21,DF,A0,CD,D4,BC,22,E0
750 DATA A0,79,32,E2,A0,3A,D3,A0
760 DATA 5F,3A,D4,A0,57,3A,D5,A0
770 DATA 4F,3E,01,81,4F,21,39,A1
780 DATA DF,E0,A0
790 REM *** PISTE SUIVANTE ET FIN ***
800 DATA 3A,D4,A0,3C,32,D4,A0,FE
810 DATA 28,20,AD,C9
820 REM *** ALLOCATION PARAMETRES ***
830 DATA 0 0,00,00
840 REM *** TABLE SECTEUR ***
850 DATA 01,03,05,07,09,02,04
860 DATA 06,08
870 REM *** RESERVATION FORMATAGE ***
880 DATA 86,00,00,00
890 REM
900 REM *** ZONE MESSAGES ***
910 REM *** INSERER DISQUETTE ***
920 DATA 0D,0A,49,4E,53,45,52,45
930 DATA 52.20,55,4E,45,20,44,49
940 DATA 53,51,55,45,54,54,45,0D
950 REM *** CONFIRMATION ? ***
960 DATA 0A,0A,45,54,20,41,50,50
970 DATA 55,59,45,52,20,53,55,52
980 DATA 20,3C,4F,3E,20,50,4F,55
990 DATA 52,20,43,4F,4E,46,49,52
1000 DATA 4D,45,52,FF,0D
1010 REM *** FORMATAGE EN COURS ***
1020 DATA 46,4F,52,4D,41,54,41,47
1030 DATA 45,20,45,4E,20,43,4F,55
1040 DATA 52,53,20,2E,2E,2E,0D,0A
1050 DATA FF
1060 REM
1070 REM *** RESERVE TABLE FORMATAGE ***
1080 DATA 00,00,00,00,00,00,00,00
1090 DATA 00,00,00,00,00,00,00,00
1100 DATA 00,00,00,00,00,00,00,00
1110 DATA 00,00,00,00,00,00,00,00
1120 DATA 00,00,00,00
1130 REM *** FIN DE DATA ***
1140 DATA XX
1150 END
1160 REM

Nous vous conseillons de frapper le programme et de le charger sur disquette aussitôt (une disquette préalablement formattée, bien sûr).

Vous effectuerez ensuite une réinitialisation (RESET) de votre microordinateur (par SHIFT-CONTROL-ESC), puis, avant d'effectuer

RUN "Nomduprogramme"

vous frapperez

MEMORY &9FFF

afin d'éviter tout conflit avec la gestion des fichiers.

Vous pourrez ensuite sauvegarder le fichier binaire comme indiqué, ou initialiser le RSX par

CALL &A000

Enfin, NEW, et finis les petits tracas de disquettes non formattées I Vous pouvez désormais entrer vos programmes Basic sans soucis.

Limites d'utilisation

Utilisez cette nouvelle instruction dans un programme si cela est nécessaire ; veillez tout de même à effectuer un RESET pour toute utilisation d'un programme écrivant dans la zone de mémoire entre &A000 et HIMEM. Vous rechargerez ce performant utilitaire avant de débuter une nouvelle saisie.

Un petit défaut, le programme ne vérifie pas si la disquette est correctement formattée, ce qui peut arriver (mais très rarement) avec des disquettes possédant un vice de fabrication, ou usagées. Dans le premier cas, faites valoir la garantie auprès de votre revendeur, dans le deuxième, quelques nouvelles tentatives de formattage en viendront peut-être à bout, sinon, mieux vaut la jeter, elle a fait son temps.

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.73-desktop/c
Page créée en 258 millisecondes et consultée 2857 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.