CODING ★ LA QUETE DES DIX SECRETS ★

Bidouilles ACPC n°29 - Le secret des disquettes
Le secret des disquettes ...

Voilà une chouette contrepéterie. Nous allons aborder un sujet dont tout les bidouilleurs parlent sans jamais dévoiler le face cachée et infernale de cette immonde interface. Utiliser le système se révèle simple et ergonomique, mais aussi lent et rigide que gourmand en mémoire. Vas-y Lipfy, faut que ça s'éloigne ...

Comme vous le savez, le CPC dispose de l'Amsdos. Ams comme Amstrad, et Dos comme Disk Operating System, soit, en clair, le gestionnaire de disque

d'Amstrad. Je tiens à crier haut et fort que ce système dérivé du CPM est un des plus beaux désastres informatiques parfaitement réussis qu'il m'ait été donné de voir dans ma longue vie de tirlipoteur de claviers.

Même des petites machines ne méritant pas le nom de micro-ordinateur se sont vues dotées de gestionnaires mieux pensés. Bref, notre CPC n'est pas gâté à ce niveau, mais il reste tout de même notre micro préféré. Que voulez-vous, de très jolies filles peuvent aussi sentir mauvais des pieds, ce n'est pas pour cela qu'elles'vont seules au resto (Hé, Miss X. qu'est-ce que tu fous ce soir ?). Bref, nous allons tenter de pallier ce défaut du CPC en le forçant à travailler plus vite, surtout en ce qui concerne les accès disque.

Sachez que s'il est possible de gagner du temps, cela sera, dans la plupart des cas, forcément aux dépens des capacités de stockage. M'enfin, nous verrons cela plus tard, car pour le moment, nous allons nous attaquer aux vecteurs. Il faut bien commencer ar quelque chose et c'est tout de même plus simple de travailler sur des bases existantes et conhues. Taille haut!

QUOI DE NEUF
VECTEURS ?

Dit-il sarcastiquement au sortir d'un soupir agacé, une carotte dans la bouche et du persil dans... l'oreille. Deux types d'appel système existent. Le premier concerne les vecteurs situés dans la zone bien connue qui s'étend de &B000 à plus loin, et le second vise à appeler les RSX contenus par la ROM.

En parlant de Rom, sachez que bien des chemins y mènent et que sur CPC, qu'il soit 464 ou 664, voire 6128, l'Amsdos se trouve toujours surIe slot numéro 7 de &C000 à &FFFF. Ce ship contenant 16 Ko à lecture seule est strictement le même quel que soit le CPC utilisé.

Bref, pas de galère de compatibilité, tout baigne dans l'huile, on peut taper directement dans cette ROM sans se demander sur quelle machine on est, cela passe à tous les coups. En parlant d'huile et comme dirait Snake: "Ça sert de mettre de l'huile car quand on n'en met pas, ça serre !".

Dis Miss X, tu viens au resto avec moi, ce soir?

Dans un certain sens, les programmeurs de l'Amsdos ne se sont pas trop mal débrouillés, puisque tous les vecteurs existimts pour cassette ont étéfidèlement adaptés au gestionnaire de disque. Ce peut être un bel avantage pour ceux qui programmaient en assembleur sur cassette et qui ont pu passer au disque sans modifier la moindre ligne de code.

Bref, chapeau pour ça, mais coup de pied au c... pour le reste. Aucun avantage majeur n'a été retiré de la nouvelle interface disque si ce n'est la vitesse de transfert et la fiabilité pourtant déjà correcte. Pas d'accès direct, pas de sécurité des données, pas de possibilité de marquage des zones défectueuses... Je préfère passer sur le reste de peur d'attraper des boutons. Trève de bavardage, et en avant les vecteurs.

Ce qui suit est consacré à l'entrée. Nous verrons le plat de résistance plus tard. Voici les équivalents assembleur de l'OPENIN et du LOAD.

Sésame, ouvre-toi:

Avant tout, lorsqu'on parle de fichiers, il faut pouvoir les ouvrir. Un vecteur sert à cela. C'est l'adresse &BC77 qu'il faut appeler pour disposer du canal de lecture. Il arrive parfois (la vie n'est malheureusement pas toujours aussi rose et tendre que la peau satinée de Miss X), que l'ouverture ne fonctionne pas et génère une erreur. Dans ce cas, ce vecteur ne vous renvoie pas la carry. Le drapeau C vaut donc O. Si C vaut 0, il Y a des cheveux à se faire.
Dans ce cas, fermez le canal de lecture et recommencez. Si l'erreur persiste, vérifiez le nom du fichier. Suis-je bête, je vous donne l'adresse du vecteur, mais sans les conditions d'entrée, c'est comme une voiture sans ses clefs. Voici comment initialiser les registres:

  • HL doit contenir l'adresse du nom du fichier.
  • B doit représenter la longueur du nom du fichier (le point de l'extension étant compris dans cette longueur). - DE doit pointer sur un buffer de 2 048 octets libres, soit 2 Ko ou encore &800.

Voilà, vous mettez les bonnes valeurs dans les bons registres, puis vous appelez le bon vecteur. Là, le système, après avoir tirlipoté la disquette avec amour et la tête de lecture, vous renvoie des informations qu'il est bon de consulter avant d'aller plus en avant:

  • HL adresse l'en-tête du fichier (souvent &A755).
  • DE pointe sur les données.
  • BC détient la longueur du fichier.
  • A est un des types bien connus de la zone.

Vous voyez tout cela est très explicite. Pas besoin de longs discours là où des informations précises sont données. Nous allons maintenant voir ou analyser la structure de ces diverses comptes rendus du système.

L'en-tête est composé d'une suite d'informations dont je vous livre le déplacement et la signification:

  • 0 : user du fichier.
  • 1 à 8 : nom du fichier.
  • 9 à 11 : extension du fichier.
  • 18 : type du fichier.
  • 21 et 22 : adresse d'écriture des données (le poids faible de ce mot avant le poids fort, comme d'habitude).
  • 24 et 25 : longueur du fichier sur deux octets, rangés comme ci-dessus.

Comme vous pouvez le constater (en un mot), rien de plus de ce qui est renvoyé dans les registres. M'enfin, il vaut mieux que vous sachiez où se trouve est dans le cas d'un éventuel travail perdant les informations contenues dans les registres.

Les valeurs données ci-dessus sont en décimal et indiquent des valeurs incluses. Nous avons tout saufIe type du fichier que l'on vient d'ouvrir. Il est tout de même important de savoir à quoi on a affaire. Voici la configuration binaire de l'octet si convoité. C'est parti pour la rencontre du troisième type.

— Le bit 0 est le bit de protection. Si ce bit est à l, le fichier est protégé comme l'option SAVE"",P du Basic. Sauf que dans le mode de programmation en assembleur, cela fonctionne aussi pour le binaire.

— Les bits 1 et 2 forment un couple dont les possibilités forcent les types suivants:

Bit 1 = 0, 2 = 0 : type Basic
Bit 1 = l, 2 = 0 : type binaire
Bit 1 = 0, 2 = 1 : type binaire
Bit 1 = 1, 2 = 1 : type Ascii

— Le bit 4 signale une erreur de Checksum dans l'en-tête du fichier. Cela peut arriver en cas d'erreur de lecture ou lorsque le type est Ascii. En effet, ce bit est souvent à 1 lorsque les bits 1 et 2 sont aussi vrais.

— Les autres bits sont inutilisés.

Il faut savoir que le renseignement sur ce type est d'une importance incommensurable au regard de ce qui suit. En effet, il faut absolument savoir à quel genre de fichier on a affaire. Il n'est pas possible de charger un fichier ASCII d'un seul coup d'un seul, alors que c'est parfaitement réalisable avec du binaire ou du Basic. Le vecteur à utiliser pour la lecture du fichier est directement et implicitement dicté par le type du fichier ouvert.
En fait, seul l'ASCII se détache (quelle tâche ?) des autres, car il est le seul à devoir être lu caractère par caractère. Un peu plus, et il aurait fallu y aller bit par bit (de quoi réjouir ma petite sœur). Bref, du début à la fin en passant par le milieu, il faut lire les caractères un par un, tout en faisant attention de ne pas dépasser la fin du fichier; ce qui serait un comble, voire une erreur.

Quoi qu'il en soit, on a ouvert ce fichier en lecture, il faut maiiltenant passer à l'acte. Deux cas se présentent donc. Le premier concerne l'Ascii, le second, le reste. Facile!

PLACE ME MANQUE,
LES MOTS AUSSI

Je vous propose ,un listing qui, je l'espère, vous permettra de patienter jusqu'au mois prochain. En attendant, que le plus fort lance son disque le plus loin.

;
ORG #9000
;
LD HL,NOM ; HL pointe sur le nom du fichier
LD DE,X ; DE sur le tampon de 2ko
LD B,X-NOM ; N contient la longeur du nom
CALL #BC77 ; Call OPENIN
JR NC,ERR ; Pas de carry => erreur
AND #10 ; Fichier ASCII ??
JR Z,BLOC ; Non alors mode bloc
LD HL,#8000 ; Mode ASCIII Octet par octet
LIT CALL #BC80 ; Implantation a l'adresse #8000
LD (HL),A ; Octet lu dans l'accumulateur
INC HL ; Pointeur incrémenté
JR C,LIT ; Lecture si pas finit
JR FERM ; Fermeture du canal
BLOC LD HL,X ; Tampon de 2 ko
CALL #BC83 ; Lecture totale du fichier
FERM JP #BC7A ; Fermeture er retour au Basic
ERR LD A,7 ; Bip émis lors de la
JP #BB5A ; Generation d'erreur
;
NOM DEFM FICHIER.TXT
X
;

Sined strikes back, ACPC n°29

Page précédente : Bidouilles ACPC n°17 - Le catalogue AMSDOS

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

Lien(s):
» Coding » ASM 48: Quand Elmar fait des siennes
» Coding » Bidouilles ACPC n°36 - Direct disk Access
» Coding » Bidouilles ACPC n°13 - Bidouilles pas bidon - MODE 1 en 13 couleurs
» Coding » Assembleur ACPC n°37 - Les transferts
» Coding » Assembleur ACPC n°35 - Dossier assembleur
» Coding » Bidouilles ACPC n°37 - Gestion de la matrice de caractere
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 632 millisecondes et consultée 1926 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.