TRANSFERT DE FICHIERS ENTRE DES DISQUETTES
A FORMATAGE STANDARD OU SPECIAL
Yannick GOUR
Valable pour CPC 664 - 6128
Le programme propose permet de transferer des fichiers BASIC, binaires
ou ASCII entre des disquettes de formatage quelconque, que ce soit sur
un lecteur A, ou B, ou entre les deux.
PREAMBULE
*********
L'utilitaire propose est donc un transfereur de fichiers. Il est certes
moins pratique d'utilisation que certains utilitaires CP/M ou que
DISCOLOGY, mais il est beaucoup plus performant car il peut travailler
avec toutes sortes de formatages (ce que ne savent pas faire DISCOLOGY
et d'autres). Cet utilitaire, baptise TRANSFIL, fait suite a FORMAT+,
utilitaire de formatage dans le format de son choix, et a la serie de
programmes proposes pour l'exploitation de disquettes a formatage
special.
La lecture de l'article concernant ces derniers est fortement conseillee
pour comprendre comment sont determines les formatages sur les CPCs.
CHOIX DES FORMATAGES
********************
1) Mise en route de TRANSFIL
----------------------------
Apres avoir remis a zero le CPC, lancez TRANSFIL.BAS. Suit une attente
de 3 ou 4 secondes pendant laquelle le magnifique ecran de choix est
cree.
NB : je parlerai de blanc ou de noir pour les couleurs, ce qui sera
evident pour le possesseur d'un ecran couleur; le possesseur d'un ecran
monochrome traduira aisement cela en clair ou obscur. Le possesseur de
moniteur couleur, generalement beaucoup moins net en haute resolution
qu'un monochrome, modifiera a sa convenance les couleurs en ligne 250.
2) Choix des formatages
-----------------------
La partie interessante est le tableau central ou apparaissent dans une
ligne et dans une colonne les differents formatages connus de TRANSFIL
(pour l'adaptation a ses formatages personnels, voir le chapitre
Personnalisation de TRANSFIL). Les noms sont blancs sur fond noir, sauf
pour les 2 "DATAS", noirs sur fond blanc et pour la case a
l'intersection de leurs lignes et colonne.
Dans cette version de TRANSFIL, on a le choix entre DATA (format de
donnees standard), VENDOR (format systeme standard), DATA+ (extrapole de
DATA en ajoutant un secteur &CA et en utilisant les pistes 40 et 41, ce
qui donne 208ko de capacite), DB1-198ko (meme formatage par piste que
pour DATA+, mais restreint aux pistes 00-39) et DB2-198ko (meme chose
que DB1-198ko sauf qu'il s'applique entre les pistes 40 et 79 ; ce
format n'a donc d'utilite que sur un lecteur 80 pistes. Avec DB1-198ko,
il permet de partager une disquette 80 pistes en deux disquettes
virtuelles de 40 pistes, avec tout le profit que l'on peut en tirer,
surtout si on a lu mon article sur les trucs pour l'exploitation de
disquettes a formatage special en lecteur A ou B.
Comme indique sur la ligne sous le tableau, on change de selection au
moyen des touches curseur. Un coup a droite et on passe a DATA+ sur la
ligne, un coup en haut et on passe a VENDOR (le tableau est defini
circulairement; on saute d'un bord a l'autre, ce qui est plus agreable).
La case du tableau a l'intersection des ligne et colonne des formatages
selectionnes est toujours "allumee". Pas besoin d'etre Einstein donc
pour comprendre comment choisir deux formatages.
3) Validation du choix
----------------------
Comme ecrit a l'ecran. Il suffit de taper "ENTER" ou "RETURN". L'ecran
s'efface alors et on doit patienter 3 ou 4 secondes avant que l'ecran de
transfert n'apparaisse.
TRANSFERT DE FICHIERS
*********************
1) Description de l'ecran
-------------------------
L'ecran est compose de 4 parties qui sont, de haut en bas :
a) Le bandeau superieur avec le nom, le numero de version et le
copyright a gauche et des informations beaucoup plus
interessantes a droite, a savoir : les formatages choisis, les
lecteurs et users actuellement actifs ainsi que le sens de
transfert.
Par exemple, on lira : A(0):DATA "--"" B(A):DATA+
Cela signifie qu'on transfert du lecteur A/User 0 en format DATA
vers le lecteur B:/User 10 en format DATA+.
b) La fenetre source, surmontee d'une ligne en gris avec "SOURCE"
inscrit dessus. C'est ici que s'afficheront le catalogue ou le
directory de la disquette source.
c) La fenetre source, surmontee d'une ligne en gris avec
"DESTINATION" inscrit dessus. C'est ici que s'afficheront le
catalogue ou le directory de la disquette destination.
d) La fenetre du menu principal ou des messages pour les transferts
ou effacements. Le menu principal est en fait le seul qui soit.
Il indique les commandes de modification des parametres de
transfert, de copie et d'effacement. On va sans plus tarder les
decrire.
2) Modification des parametres de transfert
-------------------------------------------
"TAB" :
Inversion du sens de copie. Bien evidemment, la fleche designe le
formatage de la disquette destination. Ceci explique que le choix dans
le tableau au debut se fait sans indication de sens. En prenant DATA en
ligne et VENDOR et colonne, ils se retrouvent seulement places dans le
bandeau superieur respectivement a gauche et a droite. A l'origine, le
transfert se fait donc dans le sens DATA -" VENDOR mais une pression de
la touche "TAB" suffit a l'inverser.
"Fleche vers la gauche" :
Permutation du lecteur source, qui passe de A a B, et vice versa.
"Fleche vers la droite" :
Permutation du lecteur destination, qui passe de A a B, et vice versa.
"Fleche vers le haut" :
Incrementation du User source. Il y a retour apres 15 a 0. Le numero est
exprime en hexadecimal (chiffres 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F).
"Fleche vers le bas" :
Incrementation du user destination. Meme remarque que pour le user
source.
3) Catalogue ou directory
-------------------------
"F1" (touche du pave numerique ou bien touche "1" du clavier !) :
Permet de cataloguer la disquette source. La fenetre source est effacee
et un message invite a inserer le disc source, avant de presser une
touche pour lancer le catalogue. Le catalogue apparait ensuite.
Une remarque d'ordre general : les messages d'erreur eventuels dus a
l'AMSDOS ne sont pas detournes et sont ceux sous BASIC. Il ne devrait
donc pas y avoir de difficulte pour y reagir.
On peut interrompre cette operation lors de l'attente de touche en
pressant la touche "ESC", auquel cas s'affiche dans la fenetre de
catalogue "*Abandon*". Il y a retour alors au menu.
"F4" (touche du pave numerique ou bien touche "4" du clavier !) :
Permet de faire le Directory (fichiers sans indication de taille) de la
disquette source. Meme processus que pour "F1".
"F2" :
Fonction similaire a "F1", mais pour le disc destination.
"F5" :
Fonction similaire a "F4", mais pour le disc destination.
4) Effacage de fichiers
-----------------------
Il suffit de presser la touche "DEL". Le menu en bas s'efface, remplace
par une phrase invitant a inserer le disc source dans le lecteur adequat
et a taper le nom du fichier a effacer. A noter que cette operation
n'est faisable que sur le disc source.
Si par exemple, on vient de transferer par erreur un fichier, il suffit
d'inverser le sens de la copie pour pouvoir l'effacer.
Le nom de fichier est saisi sur la deuxieme ligne. Les minuscules sont
automatiquement converties en majuscules. Les caracteres admis sont
entre l'espace et le Z, ce qui comprend tous les caracteres autorises
par l'AMSDOS. On ne put pas entrer plus de 12 caracteres.
La touche "DEL" permet d'effacer le dernier caractere entre.
Une pression de la touche "ESC" interrompt le processus et il y a retour
au menu.
Les jokers ("?" et "*") sont autorises; c'est en fait comme sous BASIC.
Une pression de la touche "ENTER" (ou "RETURN", selon le CPC) valide
pour l'effacage le nom entre (si un nom a bien ete entre, sans quoi
c'est inoperant). Puis s'affiche en dessus "efface... ". Il y a enfin
retour au menu apres execution de la routine d'effacage.
5) Transfert de fichiers
------------------------
Presser la touche "ENTER" ou "RETURN". Inserer le Disc source dans le
lecteur adequat puis entrer le nom du fichier a transferer. Toutes les
remarques pour la saisie du nom de fichier a effacer sont valables ici,
hormis celle pour les jokers. On transfere les fichiers un par un et il
ne peut y avoir d'ambiguite sur le nom.
Une fois le nom valide, un message sur la troisieme ligne, "lit...",
indique l'operation de lecture. Si le fichier est introuvable, il y a
retour immediat a la saisie d'un nom de fichier. Si une erreur de
lecture apparait, alors la copie est interrompue. Il y a affichage sous
"lit..." de "* Abandon *" et attente d'une pression de touche pour
saisir un nouveau nom. Ceci peut se produire "aisement" si on tente de
lire, par exemple, une disquette formatee en DATA comme si elle etait en
DATA+.
Cela arrive aussi des le debut si un fichier BASIC ou binaire est trop
long ou en cours de lecture si un fichier ASCII l'est (cf remarque no
1).
La lecture achevee, il est demande d'inserer le disque destination dans
le lecteur adequat, puis de presser une touche pour lancer l'ecriture.
On peut ici aussi interrompre le processus en pressant "ESC", pour
retourner aussitot a la saisie de nom. Le processus d'ecriture est
signale par le message "ecrit...".
Un probleme lors de cette operation se traduit comme pour la lecture par
un messsage d'abandon. Lorsque l'ecriture est finie, il y a retour a une
nouvelle saisie de nom.
Remarques :
1) Les fichiers sont copies en une seule fois. Aussi sont-ils 'limites'
en taille pour les fichiers BASIC et BINAIRE a environ 42ko et des
poussieres et pour les fichiers ASCII a environ 40ko. Autant dire que
99,99% des fichiers existant sur CPC seront transferables.
2) bien attendre lors d'une ecriture l'apparition du message de saisie
d'un fichier a transferer avant de changer de disquette, meme si l'on
croit que c'est termine. En effet, apres la sauvegarde, le fichier est
rapidement reouvert (sur le disque destination) pour en modifier l'en-
tete et y inscrire les valeurs originelles (et non resultant de la
sauvegarde). Les specialistes du langage machine trouveront plus de
details au dernier chapitre.
Resume des commandes
- Touches curseur et "TAB" pour selectionner les lecteurs et Users de
source et destination, et pour changer le sens de copie.
- Touches du pave numerique ou du clavier "1","4" et "2","5" pour faire
les catalogues/directory des disques sources et destination.
- Touche "DEL" pour efacer un (ou des) fichier(s) sur le disque source
dans une syntaxe similaire a celle de la commande RSX ùERA.
- Touche "ENTER" ou "RETURN" pour transferer un fichier.
- Touche "ESC" pour interrompre les operations de catalogue/directory,
effacage ou transfert avec retour au niveau precddent (au menu de la
saisie de nom de fichier a transferer).
6) Personnalisation de Transfil
-------------------------------
Comme son precedesseur FORMAT+, TRANSFIL a ete concu dans un souci de
simplicite, d'emploi et de modification. De meme que pour FORMAT+, la
personnalisation porte sur les formatages utilises. Comme on va le voir,
l'adaptation est enfantine, pour peu que l'on sache ce qu'est un DPB.
Mais encore une fois je renvoie pour cela a mon article sur
l'exploitation des disquettes a formatage special.
Les lignes de donnees de formatage, dans la version de TRANSFIL
proposee, vont de 870 a 1090. Chaque formatage est compose de trois
lignes. Voyons-les par l'exemple :
930 DATA "DATA+"
940 DATA 028,03,07,00,00D1,003F,00C0,0010,0000
950 DATA C1,0A,18,24,E5,02,04,00,00,FF
Sur la premiere ligne, on trouve le nom du format.
Sur la deuxieme ligne, on trouve les 9 premiers parametres du DPB,
exprimes en hexadecimal sur un ou deux octets (parametres SPT a OFF).
Sur la troisieme ligne sont les parametres FDC, de FSC au flag LOGIN.
On a donc tout simplement le nom du formatage (entre guillemets pour
eviter au Basic des confusions), suivi du DPB exprime en hexadecimal.
Ce n'est que pour des raisons de facilite de lecture que l'on a mis cela
en trois lignes et aussi separa les formatages les uns des autres.
On n'a donc qu'a modifier ces lignes selon ses besoins personnels. On
peut mettre aussi le nombre de formatages que l'on desire, (en ajouter
mais attention au remplissage de l'ecran, ou en supprimer ) : le
programme s'occupe de tout le reste et gere toute la mise en page. Il ne
faut pas oublier apres le dernier DPB le DATA "FIN".
OCCUPATION DE LA MEMOIRE PAR TRANSFIL (partie binaire)
******************************************************
Ce chapitre interessera surtout ceux connaissant le langage machine.
Quant aux autres, ils pourront ameliorer leur connaissances de la RAM du
CPC.
Comme TRANSFIL travaille par chargement de fichier entier en memoire, un
souci constant a ete de reserver le maximum de memoire (en continu)
comme buffer I/O. D'ou l'utilisation de zones peu orthodoxes pour caser
des routines ou des donnees, comme le montre la pagination memoire ci-
apres. En deuxieme lieu, il me semble interessant d'expliquer comment il
est procede au transfert de tous les fichiers, dans les limites du
BUFFER, independamment de toute adresse de chargement.
1) Pagination sous TRANSFIL binaire
* 0000 Routine d'affichage d'un texte qui s'acheve par un zero
0006
* 0007 Type du fichier en transfert
* 0008 Sauts standards en RAM ROM
002F
* 0030 TXT OUTPUT (copie du vecteur en BB5A)
0032
* 0030 RAM standard
* 003F
* 0040 Programme principal de gestion des commabdes de transfert et
d'effacage avec les messages
02FF
* 0300 BUFFER I/O
ABFF
* ABFC 4 octets requis par l'AMSDOS
ABFF
* AC00 debut de la RAM du DOS (RAMDOS)
* AD64 buffer pour les vecteurs cassette utilise ici pour stocker les
LOC, LEN, EXEC, nom et longueur des fichiers + chiffres hexa
AD8A
* B0FF Fin de la RAMDOS
* B100 RAM necessaire au systeme d'exploitation
B8FF
* B900 Vecteurs du systeme d'exploitation
BBB9
* BBBA Vecteurs des packs GRA, SCR et CAS remplaces par routines de
BC67 saisie de nom, chargmeent, sauvegarde, verification, arret.
* BC68 Vecteurs du systeme d'exploitation
BD37
* BD38 Vecteur JP RESTORE + vecteur BASIC remplaces par routines de
BDCC parametrage, gestion de fenetres, activation de lecteur, DPB...
* BDCD Indirections du systeme d'exploitation
BDF0
* BDF1 Adresse pour FAR CALL des RSXs de lecture/ecriture de secteur,
BDFF recherche de piste, DIR et ERA.
* BE00 DPB numero 1 et DPB numero 2
BE31
* BE32 Parametres pour determination des lecteur et user source et
BE3F destination et pour le sens de copie.
* BE40 RAM strictement reservee a l'AMSDOS (pas touche).
BE7F
* BE80 Texte du menu
BF41
* BF42 RAM affectable par la pile
BFFF
* C000 RAM Video
FFFF
COmme on peut le voir, on s'est servi de deux restarts : le numero 0,
qui ne sert qu'a remettre a zero le CPC et le numero 6 (RST 30H), qui
n'est utilise qu'a l'initialisation avan d'etre inhibe. On peut donc les
employer dans tout programme pour loger de tres courtes routines ou des
sauts a des routines.
Dans la RAM reservee a l'AMSDOS, il y a un buffer de stockage des
vecteurs cassette detournes par le DOS. Comme on n'aura pas besoin de
ces vecteurs avec TRANSFIL, cette zone sert pour le stockage de donnees.
Les vecteurs auxquels on peut toucher sans risque, si on n'utilise pas
le BASIC, sont justement ceux dedies au BASIC, de BD3A a NDCC. Comme de
plus ici il n'est aucunement fait appel a des routines graphiques, tous
les vecteurs du Pack graphique ont pu etre recouverts par des routines.
De meme ceux du pack "ecran" (SCR), qui est certes utilise par le Pack
Texte, mais directement en ROM. Enfin, les 6 premiers vecteurs du Pack
Cassette etant exclusivement destines au travail sur cassette, on peut
eux aussi utiliser leur place a loisir.
En BDF1, on empiete sur un vecteur d'indirection lie a l'impression, qui
n'est pas mise a profit dans TRANSFIL. Donc aucun risque. A la suite, la
RAM libre jusqu'a BE3F est pleinement employee.
Enfin, l'occupation de la RAM par TRANSFIL s'acheve par le texte du
menu, loge en BE80 et s'etendant jusqu'a environ BF40. Apres, il vaut
mieux laisser trop de place a la pile du processeur que pas assez.
2) Procede de transfert
Pour un fichier ASCII, il n'y a pas d'en-tete et pas d'adresse de
chargement donc, ce qui est assez logique. Les octets sont simplement
lus un par un et ecrits un par un.
Pour un fichier BASIC ou BINAIRE, on procede a la sauvegarde de son
adresse de chargement, de sa longueur et de son type apres son ouverture
et a la sauvegarde de son adresse d'execution apres son chargement.
Cependant, il est toujours charge a une adresse constante, 0300H dans la
version presentee de TRANSFIL. Il est donc sauvegarde avec cette adresse
de chargement, les autres valeurs etant elles cependant egales aux
originales. Le fichier est ensuite normalement ferme avant d'etre
aussitot simplement ouvert. Cette ouerture permet en effet d'obtenir a
l'adresse RAMDOS+19H, soit ici AC19, le numero du premier bloc du
fichier sauvegarge, bloc qui debute par l'en-tete du fichier. Par
calcul, on fonction du formatage employe, on determine les pistes et
secteurs correspondants. On lit ce secteur. On remplace l'adresse de
chargement 0300H en position 15H par la veritable que l'on avait
stockee. Ensuite, on calcule la nouvelle somme de controle ou CHECKSUM.
Cette valeur est la somme des 67 premiers octets du header et elle est
ecrite en position 67. Si oui, il s'agit d'un fichier a en-tete, sinon,
c'est interprete comme un fichier ASCII.
Bref, le nouveau CHECKSUM est calcule et sa valeur ecrite la ou il faut.
Enfin, le secteur ainsi modifie est ecrit sur la disquette. Ceci
explique pour les experts du suivi a l'oeil des operations du lecteur de
disquette qu'il se passe "quelque chose" apres la sauvegarde normale, ce
'quelque chose" etant donc l'ecriture de la vraie adresse de chargement
du fichier.
CONCLUSION
**********
Ce programme TRANSFIL et cet article concluent ma serie d'articles et
programmes sur l'utilisation des formatages speciaux de disquettes.
Avec FORMAT+, je vous ai offert la possibilite de formater selon votre
fantaisie des disquettes (mais je me permet de preconiser le format
DATA+). Grace a TRANSFIL vous pouvez transferer d'une disquette a une
autre, du moment que vous en connaissiez les formatages, tous les
fichiers de toutes sortes (ou au moins 99,99%).
Enfin, avec l'ensemble des routines proposees dans mon premier article
maintes fois cite, vous pourrez adapter les programmes transferes pour
qu'ils les reconnaissent sans modification, selon vos competences en
BASIC et langage machine. Ces articles et programmes sont le fruit d'une
tres longue experience dans ce domaine des formatages speciaux de
disquette sur CPC. J'ai ainsi pu utiliser pleinement les possibilites
d'un lecteur B a 80 pistes, avec autant de souplesse qu'un lecteur A.
De surcroit, je dispose de 792ko par disquette (5.1/4 a quelques francs
l'unite). Je ne peux donc que souhaiter a tous autant de profit dans
l'utilisation de leur systeme de disque sur CPC, qui est un des plus
souples qui soient ou qui aient ete, grace a la compatibilite CP/M.
Vive l'Amsdos !