CODING ★ DIRECT DISK ACCESS ★

Bidouilles ACPC n°36 - Direct disk Access

Comme précisé le mois dernier, nous voici dans une phase importante et cruciale de notre rubrique. Elle concerne la programmation directe des accès disques en Assembleur. Ce n'est pas une tâche trop difficile mais surtout rigoureuse. Je ne vous compte même pas le nombre de nuits blanches que j'ai pu passer à essayer de comprendre pourquoi mes premières routines ne fonctionnaient pas. Il me semble que ce n'était qu'une question de vitesse mais nous allons voir cela de plus près illico.

Avant tout, nous allons vous proposer une routine de formatage permettant de stocker environ 210 Ko de données par face. Sympathique, surtout que cela nous apprendra à gérer 5 secteurs de 1 024 octets par piste, ce que le CPC ne nous offrait pas dans sa version système, si ce n'est par des pokes à tire-larigot. Si vous désirez faire ce genre de manipulations (pokes et repokes dans la zone des variables systèmes), achetez-vous directement un Comodore 64 ; il ne fonctionne que comme cela, même sous Basic. Non, mes chers frères, je vous le dit, mieux vaut programmer soi-même ce genre de choses ; en fin de travail, on sait vraiment comment marche son micro. A ce propos, j'adresse un grand bravo à RUBI pour sa routine de chargement musical utilisée dans THE DEMO : du grand art.

Dans cette rubrique, nous nous contenterons de formater, de lire et d'écrire, sans tenter de battre des records, si ce n'est en vitesse de traitement (de quoi mettre l'Amsdos dans le vent une bonne fois pour toute). Sachez tout de même que ce programme a nécessité une disquette de sources datant d'hebdogiciel, malencontreusement formatée vers quatre heures du matin, alors que le café et mon attention commençaient à se faire rares.

M'enfin, c'est de ma faute, j'avais qu'à faire attention. Quoi qu'il en sot, veillez à ce que ce genre de connerie ne vous arrive pas aussi. Un imbécile suffit et pas la peine de le copier dans sa stupidité d'endormi... Et le Prout d'or de l'année est décerné à Sined le Barbare pour un formatage à la con. M'enfin, passons (le premier qui rigole, je lui retourne une cacahuète!.

STRUCTURE DES PORTS

Pour contrôler le FDC à partir du Z80, nous possédons 3 ports dont voici la description :

  • &FA7E : accès au moteur ( OUT &FA7E,1 pour la mise en marche et OUT &FA7E,0 pour l'arrêt ).
  • &FB7E : lecture du registre d'état principal ( IN &FB7E permet de savoir où en est le FDC ).
  • &FB7F : accès au bus de données du FDC (OUT &FB7F,DATA envoie une donnée au FDC et IN &FB7F récupère ce que le FDC envoie). Ces choses mises à jour, nous allons passer maintenant à la description exacte de ce que fait notre petit programme. Appelez cela un algorithme si vous voulez, c'est pour moi un pense-bête, voire un descriptif, pour faire une petite répétition, Chaque étape sera précédée de l'étiquette s'y référant, si celle-ci existe.
  • DEB : mise en marche du moteur et affichage d'un message d'accueil et attente de la pression d'une touche (cela permet au moteur d'atteindre sa vitesse de croisière et de se stabiliser). Après le DI, on recale le lecteur en déplaçant la tête de lecture sur la piste zéro et on initialise le compteur de piste à zéro itou.
  • START : il est alors vérifié qu'une disquette non protégée est bien dans le lecteur, sans quoi un message d'erreur est affiché.
  • Dans le cas où tout se passe bien, IX pointe sur une table contenant les noms logiques des secteurs à formater finie par &FF et HL pointe sur la ligne de commande à envoyer au FDC pour le formatage.
  • FORM : permet l'envoi des 6 octets nécessaires à l'ordre de formatage. Les quatre registres simples H, L, D et E sont ensuite inftialisés pour l'étape suivante.
  • DATA : commencement de la boucle séquentielle d'envoi de descripteurs de secteurs au FDC. 4 octets sont transférés par secteur et contiennent respectivement le numéro de piste actuelle, la tête de lecture/écriture active, le nom logique du secteur et son type.
  • TESTX : chacun de ces labels permet d'attendre que le FDC nous donne son consentement d'envoi de données. Après le contrôle du dernier secteur limité par l'octet &FF, nous passons à la phase résultat en lisant les 7 octets que nous renvoie le FDC. Si le FDC reconnaît s'être trompé sur un positionnement de piste, il recommence. S'il voit qu'une erreur a été rencontrée, il affiche le message adéquat et rend la main. Dans tous les cas, un test est effectué pour savoir si un petit rigolo n'a pas oté la disquette du drive. Cela fait, un dièse est affiché et on passe à la piste suivante.
  • SEEK : est l'ordre de positionnement sur une piste.
  • RESTART : permet de recaler le lecteur sur la piste zéro et de relancer le formatage.
  • READY : assure que tout ordre de déplacement de tète sur une piste s'est bien passé.
  • SUIT : permet d'en finir avec cette routine en recalibrant le lecteur.
  • MOTOFF : éteint le moteur.
  • ERROR : édition du message redouté. PRINT : routine de sortie de chaînes.
  • PUTFDC : envoie un octet au FDC.
  • GETFDC ; lit une donnée en provenance du FDC.
  • FORMAT : contient la ligne de commande de formatage formée des octets suivants ; ordre (&4D), tête (0), type des secteurs (3), nombre de secteurs (5), valeur du gap 3 (80) et enfin octet de remplissage des secteurs (&AC).

GULLIVER EST RUDE CETTE ANNEE

Encore pas assez de place. Je me sens comme un Gulliver au pays des petits lorsqu'il fait froid et qu'on ne trouve pas d'endroit où se mettre à l'abri de la tempête et du vent. Le mois prochain, nous verrons de plus près cette routine que ces quelques explications vous permettront peut-être de comprendre, si le Cœur vous en dit.

Ciné d'hiver , ACPC n°36 Avril 91

Page précédente : Bidouilles ACPC n°35 - Disk Court
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» asm36DATE: 2012-08-27
DL: 35
TYPE: ASM
SiZE: 4Ko
NOTE:

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

Lien(s):
» Coding » Assembleur ACPC n°26
» Coding » Assembleur ACPC n°36 - Dis moi, c'est quoi l'assembleur
» Coding » Assembleur ACPC n°28 - Les rotations & divisions
» Coding » Bidouilles ACPC n°34 - Banques de mémoire
» Coding » Bidouilles ACPC n°37 - Gestion de la matrice de caractere
» Coding » Bidouilles ACPC n°32 - Bip, son and sound
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 268 millisecondes et consultée 2649 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.