CODING ★ TRUCS POUR L'EXPLOITATION DE DISQUETTES A FORMATAGE SPECIAL EN LECTEUR A OU B ★

Formatage spécial en Lecteur A ou B
Les possesseurs de CPC se sont vus de multiples fois proposer dans le commerce ou dans des revues des utilitaires de formatage pour augmenter la capacité des disquettes.

Le Truc le plus simple est déjà d'utiliser les pistes 40 et 41. Un autre est d'avoir 10 secteurs par piste, ce qui donne pour 42 pistes (00-41) 210 KO de capacité. Le problème est que bien souvent, dès qu'il s'agit de faire tourner des programmes sur de telles disquettes, rien ne va plus. A coup sûr on obtient un « read fail », quand ce n'est pas un renvoi pour le lecteur A alors qu'on travaillait sur le B: «Drive A: disc missing». L'objet de cet article est d'aider à résoudre de tels problèmes.

AVERTISSEMENT

On aura d'autant plus de chances de résoudre tous ses problèmes, et même avant de comprendre l'ensemble de l'article (rapidement), que l'on est familier du langage d'assemblage Z80 et du système d'exploitation des CPCs. Néanmoins le maximum a été fait pour que même un néophyte, sinon un ignorant de ces choses, puisse obtenir de bons résultats. Pour cela, les programmes proposés sont là.

PROBLEME OU PAS ?

Examinons les différents cas de figures, pour déterminer lesquels permettent une exploitation sans problème d'une disquette au format spécial et lesquels nécessitent du bldouillage (logiciel). Au départ on a une disquette au format spécial dans le lecteur A ou B. On a dû lancer un petit programme BASIC ou choisir une option dans un quelconque utilitaire, qui permet au CPC de reconnaître le nouveau format. Jusqu'ici tout va bien. Ensuite on lance :

  • un programme BASIC : si ce programme ne réinitialise pas le système de disque du CPC, alors il ne doit y avoir aucune difficulté à exploiter la disquette comme une disquette normale ;
  • un programme en langage machine : si on a chargé ce programme par un LOAD et qu'on l'exécute ensuite (évidemment) par un CALL et que ce programme n'a pas à accéder ultérieurement à la disquette, alors pas de problème non plus. De même si on a lancé ce programme par un RUN et qu'il n'effectue pas ensuite d'accès au disque. Par contre s'il doit effectuer des opérations sur disque (chargement, sauvegarde), alors on est assuré d'avoir des problèmes, car il doit auparavant réinitialiser le système disque.

Le lecteur attentif aura deviné la source de tous les maux : la réinitialisation du système disque. Celle-ci ne s'opère qu'en langage machine. Elle est facultative quand on travaille sous BASIC et indispensable quand on a lancé un programme en Langage Machine (qu'on désignera désormais par LM) avec RUN et qu'il doit accéder au disque.

QUAND ET POURQUOI REINITIALISER LE SYSTEME DISQUE ?

Quand on lance un programme en LM par RUN, le système d'exploitation du CPC fait un appel à une routine qui remet en quelque sorte l'ordinateur à zéro, si bien qu'il en « oublie » même qu'il pouvait y avoir un lecteur de disquette connecté. Pour qu'un lecteur puisse être à nouveau employé, il faut réinitialiser le système disque, c'est-à-dire en faire effectuer la reconnaissance de présence par le CPC. On parlera désormais pour système disque de DOS ( de l'anglais Disk Operating System ? « Système Opératoire de Disque », d'où le nom du DOS du CPC : AMSDOS pour AMStrad DOS ), histoire d'utiliser un terme consacré. Un programme en LM chargé par un LOAD et exécuté par un CALL peut aussi nécessiter de réinstaller le DOS, car certains programmes procèdent à une remise à zéro du CPC. Le résultat est le même qu'avec un RUN. Un programme en BASIC peut avoir besoin de loger ailleurs la partie de la mémoire vive réservée au DOS (un possesseur de CPC 464 avec lecteur un peu curieux aura remarqué que le HIMEM passe de 43903 sans lecteur à 42619 avec. Les 1284 octets manquants sont presque entièrement utilisés par le DOS). Dans ce cas il y a encore réinitialisation du DOS.

LES ROUTINES DU CPC EN CAUSE

On va ici examiner les routines du système d'exploitation du CPC, qui nous concernent, à savoir la remise à zéro du CPC et la réinitialisation du DOS. La terminologie employée est celle de la BIBLE du CPC, qui est celle standard. Ces routines ont appelées via des vecteurs de saut, à adresse fixe pour tous les CPCs. ce qui permet la compatibilité entre 464.664 et 6128. C'est à l'adresse de ces vecteurs qu'il est fait référence dans la suite.

MC BOOT PROGRAM (&BD13) : remet à zéro le CPC. Cette routine est employée lors du lancement d'un programme. Pour un programme en BASIC, la main est transmise à l'Interpréteur BASIC et le DOS n'est pas touché (sinon, même pour les formatages normaux, il faudrait réinitialiser le DOS après chaque chargement). Par contre pour un programme en LM. la main est transmise à la routine suivante, avec les conséquences que l'on va voir.

MC START PROGRAM (&BD16) : réinitialise le CPC et déconnecte toute périphérie (Attention : dans la terminologie propre au CPC, une initialisation est plus poussée qu'une remise à zéro. Celle-ci laisse certains paramètres Intacts tandis que celle-là ramène comme à l'allumage de l'ordinateur). Il y a finalement saut à une adresse. Le fait important ici est que, la périphérie étant déconnectée et le lecteur de disquette en faisant partie, pour accéder de nouveau au disque. Il faudra auparavant réinitialiser le DOS. Le fait gênant est que tous les vecteurs originaux sont restaurés (cf JUMP RESTORE).

KL INIT BACK (&BCCE) : Initialise une ROM (de l'anglais Read Only Memory = Mémoire Seulement Lisible, soit en français Mémoire Morte, que l'on peut trouver encore parfois dans la littérature sous l'abréviation MEM, opposée à MEV pour MEmoire Vive) de second plan. A l'origine le CPC n'a qu'une ROM de premier plan, la ROM BASIC. Les autres ROMs rajoutées par des extensions sont (en général) des ROMs de second plan, comme celle du lecteur de disquette. Les ROMS de second plan font partie de la périphérie. C'est à cette routine qu'il est le plus couramment fait appel pour réinitialiser le DOS.

KL ROM WALK (&BCCD) : trouve et Inltialise toutes les ROMs de second plan. A la différence de la précédente routine, celle-ci n'a pas besoin qu'on lui indique un numéro de ROM. Elle commence cependant sa recherche par la ROM du lecteur de disque. Comme très souvent elle est la seule ROM de second plan, le résultat est le même qu'avec un INIT BACK. JUMP RESTORE (&BD37) : Inltialise tous les vecteurs de sauts (dont font partie les 4 précédents), ce qui signifie que ce JUMP RESTORE restaure les valeurs originales des vecteurs de saut. Donc si on veut en détourner quelques-uns, et que l'on veut être à coup sûr prémuni contre ce JUMP RESTORE, il faut veiller à le détourner lui-même.

SYNTAXE DES ROUTINES

Il s'agit ici de la description d'utilisation des routines évoguées, quand c'est nécessaire, en langage d'assemblage Z80. A ceux qui n'y connaissent rien, cela restera abstrus, quant aux autres, cela fera une petite révision. Les nombres sont indiqués directement en hexadécimal, la seule base, avec le binaire, qui se respecte en LM.

MC BOOT PROGRAM : je ne l'ai jamais vu employé par quelqu'un d'autre que le système d'exploitation ou l'interpréteur BASIC. Sa description est sans intérêt dans le cadre de cet article.

MC START PROGRAM: LD C,n
LD HL,dd
CALL &BD16 ; ( ou JP &BD16 )

— n est un code de configuration mémoire, qui d'termlne quelles RAMs ou ROMs sont sélectionnées. Presque toujours on utilise FF, ce qui fait que la totalité de la mémoire vive ( qui l'on désignera dorénavant par le terme anglais RAM - Random Access Memory = Mémoire à Accès Aléatoire ou Read And Modify Memory = Mémoire Lisible et Modifiable ) est adressable de 0000 à FFFF.

— dd est l'adresse de saut après l'exécution de la routine.

KL INIT BACK: LD HL,dd1
LD DE,dd2
LD C,n
CALL &BCCE

— dd1 est le haut de la RAM disponible dont la ROM à installer peut disposer. Inversement dd2 est le bas de la RAM disponible.
— n est le numéro de la ROM. Pour le lecteur de disquette c'est 07.
Au retour de la routine, HL et DE contiennent les nouvelles valeurs pour la RAM disponible. En ce qui concerne le système disque, seuls les 1284 octets supérieurs sont utilisés, si bien que seul ddl est modifié. En général, on indique 0040 pour dd2. On reviendra au chapitre suivant en détail sur les conséquences de l'appel de cette routine ou de la suivante.

KL ROM WALK: LD HL,dd1
LD DE,dd2
CALL &BCCB

— dd1 et dd2 ont la même signification que pour KL INIT BACK et sont semblablement modifiés. Cette routine se contente en fait d'appeler la précédente, en ajoutant évidemment le numéro de la ROM. Il n'y a donc pas de surprise sur son fonctionnement dès qu'on a compris celui INIT BACK.

JUMP RESTORE : CALL &BD37

— On ne peut pas rêver plus simple !

LA RAM AFFECTEE AU DOS

Le DOS a besoin d'un peu de place en RAM pour travailler. On ne va pas décrire ici l'ensemble de cette RAM dédiée au DOS mais seulement les parties nécessaires aux bldouillages pour exploiter des disquettes en formats spéciaux.

— Le DOS s'est vu attribuer par les concepteurs du logiciel une zone fixe en mémoire, qui est aussi la même sous CP/M (en fait l'AMSDOS a été conçu pour une compatibilité maximale avec le CP/M). Cette zone va de BE40 à BE7F. L'Information qui nous intéresse ici est située en BE7D. Là est stockée l'adresse (donc sur 2 octets) de départ de la RAM dédiée au DOS (les 1284 octets dont on a déjà parlé). Pour abréger par la suite, on parlera de «RAMDOS», qu'on se le dise ! Pour résumer, en BE7D se trouve un pointeur sur le départ de la RAMDOS.

— La RAMDOS débute par 3 octets extrêmement intéressants, qui sont dans l'ordre :

  1. le lecteur appelé (0 pour A et 1 pour B)
  2. le user appelé
  3. le lecteur actif

Lorsqu'une tentative de mise sur un lecteur a réussi, le lecteur actif est le même que l'appelé. Quand tout marche, c'est le cas et on fera donc comme si c'était le cas. SI on veut continuer à travailler avec un formatage spécial avec les lecteurs et users de son choix malgré une réinitialisation de DOS, Il faudra veiller à rétablir ces 3 octets dans leur état avant l'appel de ROM WALK ou INIT BACK. En effet, en cas de réinitialisation normale du DOS, on se retrouve d'une part d'office en lecteur A et sous USER 0, et d'autre part, le DOS ne reconnaît plus que les formats habituels. Cette dernière constatation permet de faire la transition avec la suite.

— Pour l'exploitation d'un formatage quelconque de disquette, l'AMSDOS ne requlert que 25 octets seulement Ces 25 octets, qui correspondent à 19 paramètres et que nous allons bientôt détailler, indiquent la capacité disc, la taille des blocs, celle du directory. le nombre d'entrées dans celui-ci. les numéros de secteurs, etc.. Ils constituent le Bloc de Paramètres Disc. Disk Parameter Block en anglais, que l'on désignera par DPB. Comme l'AMSDOS peut travailler avec 2 lecteurs. Il y a 2 DPBs. le DPB A et le DPB B. L'AMSDOS accède aux DPBs par l'intermédiaire de 2 pointeurs, qui indiquent donc les adresses des DPBs. Si la RAMDOS est située à l'adresse dd, alors on trouve le :

  • pointeur de DPB A en dd+021 A
  • pointeur de DPB B en dd+022A

Lors d'une initialisation de DOS, les 2 DPBs sont remis aux paramètres standards du format System (recopiés depuis la ROM DISC). Pour exploiter une disquette en format spécial. Il faut donc Installer le DPB propre à ce format.

On a déjà tous les éléments en main pour imaginer une méthode d'exploitation de disquette en format spécial, malgré une réinitialisation de DOS. Rappelons d'abord les zones vitales de la RAM : BE7D : pointeur sur le départ de RAMDOS ou son adresse, ad.

ad+0000 : lecteur appelé
ad+0001 : user appelé
ad+0002 : lecteur actif
ad+021A : pointeur sur le DPB de lecteur A
ad+022A : pointeur sur le DPB de lecteur B

La méthode choisie et qui sera mise en œuvre de diverses manières dans les programmes de démonstration, surtout selon les capacités de programmation de chacun, sera la suivante :

  1. déterminer l'adresse de la RAMDOS
  2. stocker le lecteur et le user courants
  3. en fonction du lecteur actif, déterminer l'adresse de son DPB
  4. stocker le DPB du lecteur actif
  5. réinitialiser le DOS
  6. déterminer la nouvelle adresse de la RAMDOS
  7. restaurer à cette adresse les lecteur et user actifs
  8. en fonction du lecteur actif, trouver le pointeur de son DPB
  9. remplacer ce pointeur par l'adresse de stockage du DPB original

Il est plus rapide de modifier simplement un pointeur de DPB que de reloger un DPB. Cela réduit le nombre d'opérations. Autant s'épargner du travail inutile. On a maintenant les connaissances nécessaires et suffisantes à la réalisation de notre entreprise, ainsi que la méthode à employer. Avant de se lancer dans la description plus ou moins approfondie des différents programmes qui mettent tout ceci en application, on va s'offrir une petite récréation avec la description détaillée d'un DPB. ce qui ouvrira peut-être à certains de nouveaux horizons (pour concevoir des formatages personnalisés par exemple).

DESCRIPTION D'UN DPB

On a déjà évogué la compatibilité maximale entre l'AMSDOS et le CP/M. C'est ainsi que les DPBs sont directement issus du monde du CP/M. Les DPBs de l'AMSDOS ne sont rien d'autre que des DPBs CP/M. pour les 15 premiers octets, qui correspondent à 9 paramètres. On peut donc rechercher leur description dans un livre dédié au CP/M ; c'est valable pour le CPC comme pour n'Importe quel ordinateur dont le système d'exploitation est le CP/M. Leur fonction est purement logique et décrit l'organisation des données sur la disquette. Complémentairement. les 10 octets suivants, spécifiques des CPCs. décrivent la structure physique de la disquette ; ils font partie des paramètres FDC (Floppy Disc Contrôler = Contrôleur de Disque Souple, c'est-à-dire disquette). Voyons d'abord un tableau de ce DPB. avec ta terminologie en vigueur :

-----------------------------------------------------------------------------
Adresse Nom ;Taille Description très sommaire
-----------------------------------------------------------------------------
0000 ;SPT ; 0002 nb de secteurs logiques par piste
0002 ;BSH ; 0001 décalage de bloc
0003 ;BLM ; 0001 masque de bloc
0004 EXM ; 0001 masque d'incrément
0005 ;DSM ; 0002 nb maxi de blocs
0007 ;DRM ; 0002 nb maxi d'entrées au catalogue
0009 ;AL0, AL1 ; 0002 taille du catalogue en bindre
0006 ;CKS ; 0002 nb d'entrées catalogue à vérifier
000D ;OFF ; 0002 décalage de piste
000F ;FSC ; 0001 numéro physique du 1er secteur
0010 ;PST ; 0001 nb de secteurs par pistes
0011 ;GLS ; 0001 GAP 3 pour lecture/écriture
0012 ;GLT ; 0001 GAP 3 pour formatage
0013 ;FLB ; 0001 octet de remplissage pour formatage
0014 ;BPS ; 0001 taille de secteur codée
0015 ;RPS ; 0001 nb d'enregistrements par secteur
0016 ;BCT ; 0001 buffer piste actuelle (DOS)
0017 ;FT0 ; 0001 Indicateur d'dignement (DOS)
0018 ;FLG ; 0001 indicateur de sélection de format
-----------------------------------------------------------------------------

Voyons maintenant plus en détail la signification de ces valeurs :

— SPT (Sectors Per Track = secteurs par piste) : c'est le nombre de secteurs logiques de 128 octets contenus sur une piste. Pourquoi 128 octets ? Pour des raisons historiques ! A l'origine le CP/M travaillait avec des secteurs physiques de 128 octets. Les modèles ultérieurs de lecteurs de disquette permettant d'utiliser des secteurs d'une autre taille, on a cependant conservé ce découpage virtuel en secteurs de 128 octets (qu'on appelle encore parfois enregistrements) d'une piste pour des raisons compréhensibles de compatibilité. Ceci explique la dénomination «secteur logique», par opposition à physique. Ainsi en format Data, on a 9 secteurs de 512 octets par piste, ce qui donne un SPT de 36 = 9*512/128. Après cette description des valeurs, on en donnera des tableaux pour les formats standards et d'autres plus exotiques. Les curieux de la disquette, qui se sont un jour Intéressés à la structure du catalogue (ou dlrectory en anglais, ou répertoltre dans une traduction Adèle), ont pu remarquer en 16e position d'une entrée une valeur plafonnant à &80. C'est la taille du fichier de l'entrée en blocs de 128 octets. En standard une entrée correspond à 16 blocs de 1 KO au maximum. D'où on retrouve bien : 16*1024 / 128 = 128 = &80.
Ceci est très important, car même en travaillant avec de blocs de 4 KO, on peut connaître la taille d'un fichier à moins de 128 octets près. Mathématiquement on a : SPT=PST*2^RPS

— BSH (Block SHIft = décalage de bloc) : c'est (attention Il faut être à première vue matheux) le logarithme en base 2 du nombre de secteurs logiques, donc de 128 octets, par bloc. Ceci sera beaucoup plus clair dans quelques Instants. Le bloc, dont il a été question pour le SPT, est la taille minimale occupée par un fichier sur la disquette. Sous AMSDOS c'est 1 KO. Même pour sauver un seul octet, 2 secteurs de 512 octets sont employés. Soit donc TB la taille en octets d'un bloc. On a alors : TB = 128*2^BSH. En format standard on a : 1024 = 128*2*3. donc le BSH vaut 3. Mathématiquement on a : BSH=LOG(TB/128)/LOG(2)

— BLM (BLock Mask = masque de bloc) : c'est le nombre de secteurs logiques par bloc, moins 1. En standard, on a des blocs de 1 KO, soit 8 secteurs logiques, d'où le BLM est 7 = 8-1. Mathématiquement on a : BLM=2^BSH-1

— EXM (EXtend Mask = masque supplémentaire) : c'est une extension au masque fonction de la taille d'un bloc et du nombre de blocs sur la disquette. C'est égal au nombre maximum d'incréments sur un FCB moins un. Explicitons : un FCB est un File Control Block, c'est-à-dire un Bloc de Contrôle de Fichier. Il s'agit d'une entrée au catalogue, déjà évoquée pour le SPT. Une entrée, ou donc un FCB, est composée de 32 octets, les 16 premiers pour le user, le nom, un numéro d'extension pour les fichiers nécessitant plus d'une entrée, et la taille en blocs de 128 octets. Les 16 restant sont les numéros des blocs du disque occupés par le fichier. L'incrément est la taille maximale d'un fichier tenant sur un FCB, dans le cas le plus défavorable de formatage. Or le CP/M, ou l'AMSDOS, peut travailler avec des secteurs de 128 octets. Le 16e octet, qui donne la taille du fichier, nous limite donc à 16 KO, 32 KO n'étant pas exprimable sur un octet : 32 * 1024 / 128 = 256 = &100. L'Incrément vaut donc 16 KO (N.B.: ceci n'est vrai en fait que pour les «petits» disques, pour lesquels on ne peut gérer que moins de 256 blocs. Au-delà on parle de «grands» disques et l'incrément est de 32 KO). En standard on a 16 KO par entrée au maximum, soit 1 Incrément, donc le masque d'extension vaut 0=1-1. Mathématiquement on a : EXM=nb maxi Incréments par FCB-1.

— DSM (Disk Storage Mask = masque de stockage du disque) : C'est le numéro du dernier bloc du disque, ou la numérotation commençant à 0, la capacité de la disquette moins 1. En format SYSTEM, cette valeur est 170 = 8iAA. Le bloc 0 est le premier bloc réservé au répertoire. Tous les blocs potentiellement en amont de ce bloc sont ignorés, comme pour les 2 pistes dites «système», réservées au CP/M. Voir à ce propos la description de OFF. Donc DSM est le numéro du dernier bloc ou la capacité totale de la disquette, directory y compris, moins 1.

— DRM (Disk Repertory Mask ) masque de répertoire du disque) : c'est le nombre d'entrées au catalogue, moins 1, ou le numéro de la dernière entrée, en débutant à 0. On a déjà vu qu'une entrée est longue de 32 octets. Dans les formats standards on a 2 KO de dlrectory, d'où un nombre d'entrées de 64 = 2*1024/32. On obtient donc 63.

— AL0, AL1 (ALLocation 0, ALLocation 1) : ces deux valeurs expriment les blocs occupés par le catalogue. Il faut exprimer AL0 et AL1, dans cet ordre, en binaire sur 8 bits : 1 bit correspond alors à 1 bloc et la lecture se fait naturellement de gauche à droite ; le bit 7. soit de plus fort poids ou MSB en anglais (Most Signlflcant Bit = Bit le Plus Significatif) de AL0 correspond au premier bloc et le bit 0, soit de plus faible poids ou LSB en anglais (Less Significant Bit = Bit le Moins Significatif), de AL1 au dernier bloc. Un bit mis (à 1) signifie que le bloc correspondant appartient au dlrectory. En format standard on a 2 blocs de réservés pour le directory. Ecrivons le en binaire sur 8 bits:

1100 0000,0000 0000 soit en hexadécimal C0,00.
-------------------
AL0 , AL1

La taille TC du catalogue, exprimée évidemment en blocs, se déduit du nombre d'entrées et de la taille d'un bloc. En standard on a 64 entrées et des blocs de 1 KO, d'où 32*64/1024 = 2 KO de répertoire. Mathématiquement on a :
TC = ( DRM + 1 ) / 4 / 2 ^ BSH

— CKS (CHecked Sectors = secteurs vérifiés) : c'est le nombre de secteurs logiques du répertoire à vérifier avant toute opération d'écriture. Ainsi avant d'écrire un nouveau fichier, il faut vérifier qu'il reste assez de place sur le disque et qu'il n'existe pas de fichier portant déjà le même nom, auquel cas il faut se livrer à des opérations supplémentaires. En standard on a 64 entrées (de 32 octets), donc CKS vaut 16 = 64 * 32 / 128. Mathématiquement on a : CKS = ( DRM + 1 ) / 4

— OFF (OFFset = décalage) : il s'agit simplement du nombre de pistes réservées au système, ou bien à ignorer avant que ne débute la partie de la disquette exploitée par le DOS pour le stockage de données. En format System OFF vaut 2, les 2 premières pistes étant employées par le CP/M. On peut aussi utiliser ce paramètre pour diviser une disquette « physique » en plusieurs disquettes « logiques ». Par exemple II existe des lecteurs 80 pistes, qui avec un formatage de 10 secteurs de 512 octets offrent par face physique 400 KO de capacité de stockage. Pour exploiter un tel volume on recourt à des blocs de 2 KO. Or l'AMSDOS ne gère pas correctement de tels blocs (alors que le CP/ M sait le faire). Il en résulte que beaucoup de chargements aboutissent à des plantages. Il faut donc revenir à des blocs de 1 KO. Seulement le DOS ne peut travailler qu'avec au plus 255 blocs. L'astuce est de diviser une face physique de 400 KO en 2 faces logiques de 200 KO. Pour la 1ère le décalage OFF vaut 00 tandis que pour la seconde il vaut 40. On commute aisément d'une face à l'autre en mettant OFF à la valeur convenable, ce par un simple POKE sous BASIC. Ce décalage est également très utile pour une disquette à format spécial, totalement Incompatible avec les formats standards. SI toutes les pistes sont dans ce format, Il faut lancer un utilitaire d'implantation du DBP depuis une autre disquette, ce qui est contraignant. L'astuce est de formater la première piste en Data et les autres comme on le veut. Sur les 2 KO disponibles sur cette première piste, on a largement la place pour Installer un utilitaire d'Implantation de DPB. Le décalage pour le reste des pistes en format spécial est de 1. Il en sera donné un exemple dans les tableaux de DPBs à la fin de ce chapitre.

Jusqu'ici les paramètres relevaient du monde du CP/ M et les explications étalent valables pour toute machine CP/M. Désormais on a affaire à des paramètres du FDC, spécifiques au CPC.

— FSC ( First SeCtor - premier secteur ) : c'est le numéro physique du premier secteur de chaque piste. On use du qualificatif «physique» car il s'agit du numéro effectivement écrit sur la disquette pour Identifier le premier secteur. En System c'est &41 et en Data &C1.

— PST (Physlcal Sectors per Track = secteurs physiques par piste) : c'est le nombre de secteurs physiques par piste, soit 9 en System ou Data.

— GLS (Gap Length for Sector = longueur de Gap pour secteur) : c'est la longueur du Gap pour les opérations de lecture et écriture. Qu'est-ce qu'un Gap sur une disquette ? C'est tout simplement un blanc (gap veut dire brèche en anglais). Il ne faut pas oublier que les lecteurs de disquettes sont avant toutes choses des machines mécaniques, donc soumises à des tolérances. Ainsi, à partir d'une certaine décimale, il n'y a pas deux lecteurs de disquette qui aient la même vitesse de rotation de disque. Un même lecteur peut voir sa vitesse varier en fonction des conditions ambiantes, sinon tout simplement de l'âge. Les Gaps sont là pour que ces variations, quoi qu'il en soit relativement infimes en cas de bon fonctionnement, ne créent aucun problème. Ils établissent des zones de sécurité, espèces de «no man's lands» entre les zones de données, en séparant les secteurs et les pistes. Le GLS est le Gap pris en compte en lecture ou écriture de secteur. Il est aussi appelé GAP 3 dans la littérature spécialisée. Il est situé après les secteurs. Pour les formats standards il vaut &2A.

— GLT (Gap Length for Track = longueur de Gap pour piste) : c'est la longueur du Gap employée lors du formatage d'une piste. Ce Gap est le même physiquement que le précédent. Seulement cette valeur n'est utilisée que lors du formatage d'une piste. Normalement le GLS doit être plus petit que ce GLT, afin que les nouveaux Gaps 3 dûs aux opérations d'écriture (de longueur GLS), ne «débordent» pas au delà du Gap 3 résultant du formatage. On a d'autant moins de risques d'avoir des problèmes de recouvrement de données par un Gap 3, que la différence entre GLT et GLS est grande. Pour les formats standards le GLT vaut 8- FLB (FILL Byte ? octet de remplissage) : c'est l'octet utilisé pour remplir les secteurs lors d'un formatage de piste. Pour les formats standards. Il s'agit de &E5.

— BPS (Bytes Per Sectors = octets par secteurs) : c'est de façon «codée», afin que l'Information tienne sur un octet, la longueur en octets d'un secteur. Pour connaître la longueur d'un secteur. Il suffit d'employer cette formule,»!» étant la longueur :l = 128 * 2 ^ BPS. C'est cette valeur qui est en fait directement envoyée au FDC lors du formatage de piste pour indiquer la longueur d'un secteur. Pour les formats standards on a 512 octets par secteurs, or 512 = 128 * 2 ^ 2, donc BPS vaut 2.

— RPS ( Records Per Sector = enregistrements par secteur ) : c'est le nombre de secteurs logiques par secteur physique ; plus prosaïquement c'est la taille d'un secteur en octets divisée par 128. Mathématiquement on a : RPS=2^BPS.

— BCT (Buffer for Current Track « mémoire pour piste courante) : c'est une sorte de mémoire pour stocker le numéro de la piste actuellement en service. C'est une des 2 valeurs variables du DPB sans Intervention de l'utilisateur. Elle est utilisée exclusivement par le DOS et donc n'a que le mérite d'être signalée.

— FT0 (Flag for Track 0 = indicateur pour piste 0) : c'est un Indicateur pour faire savoir au DOS où se trouve la tête de lecture. Le FDC possède une fonction qui lui permet d'aller automatiquement à la recherche de la piste 0. Il interrompt sa recherche au bout d'un certain temps, et Indique s'il a ou non atteint la piste 0. La piste 0 a été atteinte si FT0 vaut &FF. sinon il vaut 0. C'est la deuxième valeur variable du DPB du fait du FDC et comme BCT elle ne présente d'Intérêt que pour le DOS.

— FLG (Flag for LoGIn = indicateur d'accès) : c'est un Indicateur destiné au DOS, pour lui faire savoir si, avant toute opération de lecture ou écriture. Il doit accéder au disque afin d'en reconnaître le format. On parle couramment pour désigner cette opération de login. Si FLG vaut 0, Il y a automatiquement login, s'il vaut 8cFF, Il n'y a pas de login. Naturellement le DOS ne reconnaît que les formats standards, à savoir System, Data et IBM. qui sont implantés dans la ROM Disc. FLG est un paramètre important car si le login est autorisé, alors qu'on est sous un format spécial, il y a recherche du format de disquette. Cela débouche sur un «r ead fail ». ou. quand le formatage peut tromper le DOS, comme en rajoutant un 1 Oème secteur, à un plantage. Il faut donc mettre cet indicateur à &FF pour éviter une telle déconvenue (en fait le problème du login ne se pose apparement que si le DPB est situé dans la RAMDOS ; c'est une bizarrerie de l'AMSDOS).

Voilà ! On a enfin passé en revue le contenu d'un DPB, qui ne doit plus maintenant avoir de secret pour personne. On va voir maintenant quelques valeurs de paramètres pour ceux à qui cette récréation informatique aurait donné envie d'expérimenter des formats exotiques.

Commençons par un tableau de BSH, BLM et EXM, qui sont certainement les paramètres les plus ésotérlques de l'ensemble. Ils sont donnés en fonction de la taille du bloc. On rappelle qu'on parle de «petit disque» pour moins de 256 blocs et de «grand disque» pour plus de 255 blocs.

--------------------------------------------------------------------
Taille de bloc en KO BSH BLM ; EXM
; petit disk grand disk
--------------------------------------------------------------------
1 ; 3 7 ; 0 ;-
2 ; 4 15 ; 1 ;0
4 ; 5 31 ; 3 ;1
8 ; 6 63 ; 7 ;3
16 ; 7 127 ;15 ;7
--------------------------------------------------------------------

Finissons par un tableau de DPBs entiers. On va y retrouver pour la forme les formats System et Data. J'ai appelé Data+ le format déduit du Data, avec 10 secteurs par piste (on a rajouté un secteur &CA). et en utilisant les pistes 40 et 41. ce qui offre 208 KO de stockage de données. Comme les 9 neuf premiers secteurs sont identiques à ceux en Data, un programme situé en piste 0. qui installera le DPB du Data+. peut être chargé dès l'allumage du système sans aucune modification de DPB. Le format 202K est un format débutant en piste 1. la piste 0 étant en Data, afin d'y mettre l'utilitaire Installant le DPB pour le 202K. D1-198K et D2-198K sont les 2 DPBs pour partager une face de disquette 80 pistes en deux. Ils ne se distinguent que par la valeur de OFF (0 pour l'un et 40 pour l'autre). La disquette est formatée comme en Data+. Toutes les valeurs sont en hexadécimal.

------------------------------------------------------------
System Data Data+ 202K D1-198K D2-198K
------------------------------------------------------------
SPT ;24 24 28 28 28 28
BSH ;03 03 03 03 03 03
BLM ;07 07 07 07 07 07
EXM ;00 00 00 00 00 00
DSM ;AA B3 D1 C9 C7 C7
DRM ;3F 3F 3F 3F 3F 3F
AL0,AL1 ;C000 C000 C000 C000 C000 C000
CKS ;0010 0010 0010 0010 0010 0010
OFF ;02 00 00 01 00 28
FSC ;41 C1 C1 C1 C1 C1
PST ;09 09 0A 0A 0A 0A
GLS ;2A 2A 1C 1C 1C 1C
GLT ;52 52 2A 2A 2A 2A
FLB ;E5 E5 E5 E5 E5 E5
BPS ;02 02 02 02 02 02
RPS ;04 04 04 04 04 04
BCT ;-- -- -- -- -- --
FT0 ;-- -- -- -- -- --
FLG ;00 00 FF FF FF FF
------------------------------------------------------------

Voilà qui conclut définitivement cette longue dégression et, je l'espère, récréation sur les DPBs. On va enfin aborder les programmes pour utiliser sans (trop de) problèmes les formats spéciaux.

PROGRAMMES POUR EXPLOITER DES FORMATS SPECIAUX

Il va s'agir ici de commenter les différents programmes proposés, bien que leurs listings le soient déjà grandement. Mais mieux vaut deux fois qu'une. Des explications parfois importantes sont données Ici, qui ne figurent pas dans les commentaires des programmes. Lorsqu'il est fait explicitement appel à un format spécial, on a choisi le Data+, qui est le plus Intéressant pour tout possesseur de système disque. 1) BOOT-DPB : est souvent appelé BOOT un petit programme qui installe un système d'exploitation ou qui lance un programme en faisant un peu de ménage avant, pour lui préparer la place. C'est la fonction de la routine du système d'exploitation MC BOOT PROGRAM.
Ce programme se contente d'installer un DPB et a surtout un intérêt pédagogique. Le DPB est mis en &BE00. C'est en effet une des rares zones de la mémoire qui soient inemployées tant par le système d'exploitation que par le BASIC, et par même beaucoup de programmes. Un rappel de l'emploi de la mémoire peut être utile, pour que chacun puisse loger un DPB. les RSXs (Résident System extension = extension au système résident) créées par le programme qui suivra. ou d'autres routines sensibles, à des endroits relativement sûrs :

0000 |
;saut dans le système d'exploitation pour
; remettre à zéro le CPC.
0007 | Peut être employé sans risque.
X 0008
X ;série de restarts et de sauts ; strictement réservé
X 0040 au système d'exploitation. ZONE SENSIBLE
0041
RAM disponible sous BASIC
A6FB
X A6FC
X ;RAM réservée à l'AMSDOS (RAMDOS)
X ABFF | ZONE SENSIBLE
X AC00 |
X ;RAM réservée à ta ROM BASIC. ZONE SENSIBLE
X B0FF |
X B100 |
X ;RAM réservée au système d'exploitation. ZONE SENSIBLE
X B8FF |
X B900 |
X ensemble de routines et de vecteurs de saut. ZONE SENSIBLE
X BDF3 |
BDF4 |
ESPACE LIBRE
BE3F |
X BE40 |
X strictement réservé au DOS pour ta gestion physique du
X BE7F lecteur de disquette. ZONE SENSIBLE
BE80 |
;ESPACE LIBRE, mais attention à la pile descendante du Z80
BFFF débutant en C000
X C000 |
X RAM VIDEO
X FFFF |

Il s'agit de la configuration sous BASIC. En LM. on libère la RAM réservée à la gestion du BASIC, on peut placer ailleurs la RAMDOS, ainsi que la RAM VIDEO... On constate donc que les zones libres et protégées sont rares : de BDF5 à BE3F et de BE40 à BF60 (la plie du Z80 s'étend très rarement en dessous de BF60 ).

Revenons sur le programme BOOT-DPB : l'adresse de placement du DPB peut être aisément modifiée.

Il opère ainsi :

1) Installation du DPB
2) Lecture du pointeur de la RAMDOS
3) Lecture du lecteur actif (A ou B)
4) Remplacement du pointeur de DPB du lecteur actif par l'adresse d'Implantation du nouveau DPB

On rappelle que, le format utilisé étant le Data+, ce programme peut se trouver sur la piste 0. A la mise en route, le DOS Identifie le format comme du Data et BOOT-DPB peut être chargé. Ce dernier «ressuscite» alors en quelque le lOème secteur, en installant le Data+. On se rend compte ici du danger à manipuler sans précautions des disquettes en Data et en Data+. Le DOS peut travailler avec une disquette en Data+ comme si elle était en Data, ce qui peut amener une altération de données en cas de sauvegarde. Prudence I L'installation systématique sur toute disquette d'un premier fichier installant le DPB (et pourquoi pas faisant office aussi de menu - cf le programme MENU) est le meilleur moyen de se garder de tels désagréments.

2) LOADRUN : ce programme implante 2 RSXs pour charger des programmes en binaire. Ces RSXs sont ILOAD et |RUN et remplissent les mêmes fonctions que les commandes du même nom du BASIC. Elles sont logeables n'Importe où dans la mémoire disponible, LOADRUN demandant une adresse de départ (une sauvegarde est effectuée automatiquement à la fin). Il est préférable d'indiquer la valeur en hexadécimal. Voyons d'abord les particularités de ces RSXs, sans quoi il n'y aurait pas de raison de remplacer les commandes originales :

— |LOAD : à la différence de la commande BASIC qui le nécessite, il n'y a pas besoin qu'il y ait 4 KO de mémoire disponible pour un buffer de transfert de données. La syntaxe est identique à celle en BASIC :

— |LOAD.»XXXXXX» pour charger à son adresse de chargement (I) le fichier XXXXXX. Les possesseurs de 464, à cause d'un bug de la ROM BASIC, doivent naturellement mettre le nom dans une variable et indiquer le pointeur de cette variable. Cela donne par exemple: a$="XXXXXX": |LOAD. @a$. Ce sera cette dernière forme qui sera employée lorsqu'on aura affaire à cette instruction, ou à l'autre, pour des raisons évidentes de compatibilité. Si on oublie d'indiquer le nom de fichier. Il y a retour Immédiat au BASIC, de même si le nom est illégal, auquel cas on a droit au message d'erreur habituel de l'AMSDOS.

— |LOAD,"XXXXXX" ,adr pour charger le fichier XXXXXX à l'adresse adr. La commande gère les erreurs qui peuvent survenir dans les routines de chargement: fichier absent ou bloc altéré. La main est rendue au BASIC sans aucun problème. Le seul risque de plantage est un chargement dans une des zones sensibles, signalées dans le plan de la mémoire, auxquelles il faut ajouter le programme BASIC lui-même ainsi que les 2 RSXs.

— |RUN : cette instruction fonctionne comme celle du BASIC. Il en résulte qu'elle ne peut être employée qu'une seule fois, la main étant passée à la fin de son exécution au programme qui a été chargé. En cas de problème de chargement (pas de nom fourni, nom illégal, fichier Introuvable ou bloc altéré) il y a cependant retour au BASIC. La syntaxe est bien naturellement:

|RUN, "XXXXXX"
ou
a$="XXXXXX":|RUN,@a$.

La différence majeure entre cette RSX et le RUN du BASIC est que cette routine ne fait pas appel à la routine du système d'exploitation MC BOOT PROGRAM. qui passe elle-même la main au MC START PROGRAM. avec les conséquences que l'on a déjà vu. Ainsi, grâce à cette RSX. il n'y a pas de JUMP RESTORE, c'est-à-dire que les vecteurs éventuellement détournés sont laissés Intacts, et le système disque est toujours reconnu. C'est l'absence de JUMP RESTORE qui est toutefois important.

On dispose donc maintenant de 2 RSXs très utiles, tant pour l'objet de cet article que pour un usage personnel : avec |LOAD on peut se passer de buffer de 4 KO pour des chargements simples et avec |RUN on peut lancer des programmes binaires sans que le système disque soit « oublié » et sans que les vecteurs soient réinitialisés. On va donc pouvoir en détourner quelques-uns à nos fins. Ce sera mis en application dans le programme MENU. Mais auparavant on va enfin mettre en application la méthode décrite dans le chapitre LA RAM AFFECTEE AU DOS pour procder à une réinitialisation de DOS sans perte des lecteur, user et DPB.

3) INITDOS1 : ce programme est encore un chargeur de routine, qui fonctionne comme le précédent. Il est destiné à être utilisé sousBASIC et opère un détournement de INIT BACK. ainsi d'ailleurs que de ROM WALK. La routine implantée est sauvegardée sous forme binaire en fin de programme. En queue de routine se trouve le véritable vecteur pour INIT BACK. H est utile de rappeler que ce vecteur est spécifique à chaque type de CPC (464. 664 ou 6128). On ne pourra pas se servir donc directement de la routine en binaire écrite
sur un type de CPC avec un autre type. Il faut la resauver sur ce dernier type. Un listing en langage d'assemblage suffisamment commenté est fourni en annexe, pour les curieux. Ceux qui n'y connaissent rien pourront cependant en suivre les étapes.

Le chargeur fonctionne ainsi :

  • demande de l'adresse d'implantation de la routine
  • écriture de la routine
  • écriture en fin de routine du vecteur original INIT BACK
  • remplacement du vecteur INIT BACK par un saut à la routine
  • remplacement du vecteur ROM WALK par un saut à la routine
  • sauvegarde de la routine

On constate que pour rendre opérante cette routine. Il faut détourner les vecteurs INIT BACK et ROM WALK. Cette manœuvre de détournement sera évidemment à répéter ultérieurement après tout chargement de la routine binaire. Quoi qu'il en soit, le chargeur est très simple et peut être aisément modifié selon sa convenance personnelle. Ce détournement de vecteur sera mis en œuvre très bientôt dans le programme MENU. Ajouté aux RSXs ILOAD et IRUN on obtiendra d'excellents résultats. Mais voyons auparavant une routine quasiment Identique, à la différence près qu'elle ne requiert pas de détournement de vecteur ; son usage reste en contrepartie réservé aux connaisseurs de l'assembleur ou autres trlfouilleurs d'octets.

4) INITDOS2 : encore une fois un chargeur BASIC, Identique aux précédents, pour une routine à utiliser exclusivement sous assembleur pour des programmes en LM. Comme Indiqué en fin de paragraphe précédent, cette routine est uniquement destinée aux connaisseurs de langage machine. L'adresse d'implantation demandée par le chargeur BASIC n'a d'Intérêt que pour la sauvegarde de la routine en binaire. Comme il apparaît à la lecture du listing en langage d'assemblage, elle est logeable telle quelle à n'Importe qu'elle adresse, puisqu'elle n'effectue de saut à aucune adresse absolue, ni ne se modifie elle-même, comme le fait la routine de INITDOS1, pour que soient Injectées dans HL et DE les valeurs désirées pour l'appel de INIT BACK. Il s'agit en fait de la routine proposée dans INITDOS1. mais un peu simplifiée. Le DPB est placé en BEOO, qui est une zone très rarement utilisée. Les 3 octets précédents sont utilisés comme mémoire temporaire de lecteur et user. La routine a été ainsi conçue que l'adresse de ce buffer (mémoire tampon+DPB) n'est à indiquer qu'une fois, au début. On peut donc très rapidement le placer ailleurs. Cette routine est à utiliser en sus et place du simple appel à INIT BACK. Si on dispose d'assez de place, soit 63 octets sans "RET". on n'a qu'à remplacer le INIT BACK par elle. Sinon il faut remplacer l'appel original à INIT BACK par un appel à la routine. Il faut veiller alors à injecter les valeurs correctes dans HL et DE avant l'appel du INIT BACK à l'intérieur de la routine. L'extraordinaire intérêt de la routine proposée est qu'on peut utiliser alors les programmes binaires qui en sont pourvus avec des disquettes de tous formatages, standards ou non. et qu'en plus du INIT BACK les lecteur et user actifs sont préservés. Il n'y a nul besoin de détourner un seul vecteur ou d'utiliser la RSX |RUN. On se sert du RUN"XXXXXX du BASIC. Pour résumer, et en conclusion de ce paragraphe, grâce à cette routine, le lecteur, le user et le DPB du lecteur actifs avant la réinitialisation du système disque sont restaurés après.

5) MENU : enfin le programme attendu au moins par ceux qui ne Jurent que par le BASIC, faute de mieux. Il met en application toutes les explications données : Installation de DPB, RSXs, écriture d'une routine de remplacement pour INIT BACK. d'ailleurs détourné, et finalement modification de quelques vecteurs pour que le détournement effectué ne soit pas réduit à néant. Ce programme n'est pas exactement un menu, mais II prépare le terrain pour un véritable menu, comme il en sera donné un exemple avec MENU2, lancé par MENU. Je le redis encore une fols, mais mieux vaut trop que pas assez : MENU doit être le premier fichier sur la disquette, au sens physique du terme, c'est-à-dire résider en piste 0. On a 4,5 KO par piste en format Data. Les 2 premiers servant au dlrectory. Il en reste 2 pour un programme lisible indifféremment en Data ou Data+. MENU est très succintement commenté pour rester dans la limite des 2 KO (il y a cependant encore de la marge pour des ajouts personnels). Hormis des Initialisations de blocs et la modification de 2 vecteurs, tout a déjà été vu dans les programmes BOOT-DPB, LOADRUN et INITDOS1. Voyons de plus près le fonctionnement de MENU :

— Initialisations de blocs : c'est facultatif si on vient d'allumer l'ordinateur, sinon cela effectue une partie du travail du MC START PROGRAM, que l'on désactivera. On commence par restaurer les vecteurs originaux avec JUMP RESTORE (BD37). Cela verrouille sur le lecteur de cassette, ce qui explique ensuite l'instruction I DISC pour retourner au lecteur de disquette. On Initlalise les blocs :

  • son : BCA7 - SOUND RESET
  • gestion d'écran : BBFF - SCR INITIALISE
  • écran graphique : BBBA - GRA INITIALISE
  • écran de texte : BB4E - TXT INITIALISE
  • clavier : BB00 - KM INITIALISE

— Installation du DPB : absolument rien de nouveau Ici par rapport à ce qui est fait dans BOOT-DPB. On a seulement supprimé les commentaires et fait en sorte que cela prenne le moins de place possible. Le souci d'économie de place a été constant dans l'écriture de MENU, pour que l'utilisateur ait le maximum de liberté pour des apports dans la limite des 2 KO.

— Installation des RSX |LOAD et |RUN : se reporter à LOADRUN pour plus de détails. A noter l'utilisation d'un sous-programme commun à cette phase et à la suivante, toujours pour un gain d'espace. Comme on peut le constater à la lecture du listing, on peut très facilement loger à l'adresse que l'on désire les RSXs. Il n'y a qu'une variable dont il faut modifier la valeur, qui est celle d'implantation des RSXs.

— Ecriture du INITBACK détourné : se reporter à INI-TDOS1 pour plus de détails. Les remarques faites pour installer |LOAD et |RSX sont valables ici. On Installe la routine remplaçant le INITBACK, dont on détourne le vecteur vers elle, ainsi que celui de ROM WALK.

— Modification de 2 vecteurs : Il s'agit de MC START PROGRAM et de JUMP RESTORE. La nécessité de détourner ces routines a été expliquée dans le chapitre LES ROUTINES DU CPC EN CAUSE. Pour résumer, leur appel réinitialise les vecteurs, ce qui invalide tout détournement de vecteur. Examinons comment on opère :
* JUMP RESTORE : on annule tout simplement l'effet de cette routine en remplaçant le vecteur de saut par un retour immédiat. On fait par prudence un peu plus. En effet la plupart des vecteurs se décomposent ainsi : 1) 1 Restart (1 octet), soit un saut automatique à une des 7 premières adresses multiples de 8.

2) l'adresse sur 2 octets en ROM ou RAM de la routine. Aussi certains programmes, plutôt que a'appeler une routine via son vecteur, vont lire son adresse et exécutent directement eux-mêmes la routine en question. Ceci est très fâcheux dans notre cas. C'est pourquoi on remplace les 2 octets par une fausse adresse, sans conséquence. J'ai choisi l'adresse 000F. où se trouve l'instruction RET (RETour) : un CALL y est aonc sans effet. A noter que c'est une des rares adresses de même valeur pour les 3 types de CPC. Est-il nécessaire de préciser pour conclure qu'on a remplacé le restart par un RET ?

* MC START PROGRAM : comme vu au chapitre SYNTAXE DES ROUTINES, cette routine, après avoir effectué son travail, saute à l'adresse contenue dans HL. On remplace donc le Restart par un saut direct à cette adresse, grâce à l'instruction JP (HL). Aux 2 octets suivants ont été substitués l'adresse 001E, où l'instruction est encore commune aux 3 types de CPC; il s'agit d'un JP (HL), comme avalent pu le deviner les plus perspicaces.
* Lancement du menu : par un simple RUN» est lancé le véritable programme de MENU, MENU2. aue l'on va voir maintenant.

6) MENU2: ce programme de menu n'est là qu'à titre Indicatif et se propose simplement de donner l'exemple pour que chacun puisse utiliser ses propres menus avec l'acquis dû à MENU. MENU2 est donc très simple. Sa partie la plus Intéressante est la ligne de DATAs.
Examinons la :

DATA BASIC,BINAIRE,MIXTE,0,basic,1,binaire,0,mixte

On y trouve d'abord en majuscules les noms des 3 programmes au menu, tels qu'on veut les porter à la connaissance de l'utilisateur. Puis suivent en minuscules les noms des 3 fichiers correspondant dans l'ordre aux 3 programmes. Chaque nom de fichier est précédé d'un Indicateur : 0 ou 1. Un 0 indique un fichier qu'on peut lancer avec l'ordre BASIC RUN» tandis qu'un 1 signale un fichier qui nécessite l'emploi de la RSX |RUN. Cet indicateur donne en quelque sorte le type du fichier. D'où la ligne BASIC de lancement :

READ t,a$:IF t=0 THEN RUN a$ ELSE |RUN,@a$

La procédure à suivre s'avère donc, pour ceux qui en auraient douté jusque là, enfantine. Pour exemple encore, on peut consulter le listing de MIXTE, qui se contente de lancer avec |RUN le programme en LM «BINAIRE», lequel charge un écran. On va enfin pouvoir conclure.

CONCLUSION

Tout d'abord bravo au lecteur qui aura tout lu et tout compris du premier coup. Je me suis efforcé de rendre le maximum d'information accessible au plus grand nombre et espère y avoir réussi. C'est pourquoi Je n'ai pas hésité parfois à me répéter, au risque d'agacer les connaisseurs, pour que les notions fondamentales soient bien assimilées. Mon souhait le plus cher est que cet article et particulièrement les routines et trucs présentés puissent rendre de grands services, que les formatages spéciaux de disquette ne soient plus un problème. A une prochaine fois !

BIBLIOGRAPHIE :

  • LA BIBLE DU PROGRAMMEUR DE l'AMSTRAD CPC -Micro Application -1985
  • LE LIVRE DU LECTEUR DE DISQUETTE AMSTRAD - Micro Application- 1985
  • CLEFS POUR AMSTRAD - Système de base - Editions du P.S.I. - 1986
  • CLEFS POUR AMSTRAD - Système disque - Editions du P.S.I.-1986
  • CP/M APPROFONDI - Sybex - 1980

CPCINFOS n°34 p11-p21, Yannick GOUR

★ EDITEUR: CPCINFOS
★ ANNÉE: 1991
★ CONFIG: ???
★ LANGAGE:
★ LiCENCE: ???
★ AUTEUR: YANNICK GOUR
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Formatage  special  en  Lecteur  A  ou  B    (CPC  Infos)    FRENCH    LISTINGDATE: 2021-04-22
DL: 174
TYPE: PDF
SiZE: 484Ko
NOTE: 2 pages/PDFlib v1.6

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

Lien(s):
» Coding » Formatage spécial : TRANSFIL (CPC Infos)
» Coding » Formatage spécial: MAPFORMAT
» Coding » Formatage spécial : TRANSFIL v2 (CPC Infos)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (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 714 millisecondes et consultée 3193 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.