
                        -- ETUDE DU FDC 1{re partie --
                         - Chapitre 1 : G{n{ralit{s -
                           ------------------------
 
     Le Floppy Disc Controller est  un  petit animal parall{l{pip{dique pourvu 
 de nombreuses pattes et vivant dans  une  jungle  de circuits divers . Prenez 
 toute suite note qu'il ob{it @  des  lois  tr}s  strictes  . Il est @ me^me de 
 perturber gravement son  habitat  si  il  se  trouve  contrari{  ! Ses moeurs 
 particuli}res  lui  interdisent  toute  cohabitation  avec  le  BASIC  .  Les 
 instructions d'Entr{e - Sortie (E/S)  ,  r{dig{es  en assembleur sont le seul 
 mode de communication envisageable avec ce sp{cimen de l'{lectronique CPC .
 
                             --------------------
                             - Chapitre 2 : E/S -
                             --------------------
 
     D{finition d'une E/S : Tout d'abord ,  il  faut savoir ou l'envoyer si il 
 s'agit d'un sortie (OUT) et  ou  l'attendre  si  c'est  une  entr{e (IN) . La 
 source ou la destination d'une  E/S  se  nomme  un  PORT  . Ce dernier permet 
 d'acheminer ou pr{lever  une  information  en  un  point  pr{cis d'un circuit 
 d{termin{ . C'est la valeur  16  bits  pr{c{dant  OUT  ou  IN qui op}re cette 
 s{lection . Elle est contenue  dans  le  registre  BC  . En cons{quence , les 
 instructions Z80 du type OTIR qui  modifient le registre B sont difficilement 
 utilisables . La transmission  d'un  octet  par  OUT  ressemble @ l'op{ration 
 consistant @ ouvrir ou fermer  un  maximum  de  8  interrupteurs . Un bit mis 
 correspond @ un contact ferm{ , un bit  @  0  et le courant ne passe plus (En 
 r{alit{ il  est  d{riv{  vers  la  masse)  .  Une  simple  conversion  (PRINT 
 BIN$(valeur,8) vous permet de visualiser  la  valeur  d'une E/S de fa\on plus 
 claire (Voir DETBANK dans la partie r{ponses) .
 
                     -------------------------------------
                     - Chapitre 3 : Les  ports E/S du FDC 
                     -------------------------------------
 
     On dispose de 3 possibilit{s selon la nature du port :
     1 - On peut envoyer une donn{e sur le port : C'est une sortie .
     2 - On peur recevoir une donn{e sur le port : C'est une entr{e .
     3 - On peut faire les 2 .
 
  Adresse du port ! Fonction sortie ! Fonction entr{e ! Ro^le 
  &FA7E           !       OUI       !        NON      ! Mise en route moteur
  &FB7E           !       NON       !        OUI      ! Information {tat FDC
  &FB7F           !       OUI       !        OUI      ! Transmission donn{es
 
     A / Le port moteur &FA7E :
     Ici rien de plus simple . Envoyer  une  valeur non nulle met le moteur en 
 route , envoyer une valeur nulle  le  stoppe  .  Vous  pouvez me^me le faire @ 
 partir du BASIC : OUT &FA7E,1 , le moteur  se met en route . OUT &FA7E,0 : Il 
 s'arre^te .
     Mais si on veut lire ou {crire des  donn{es sur le disque , ce n'est plus 
 aussi simple . Il faudra attendre que  le  moteur  tourne @ plein r{gime ! La 
 vitesse de transmission des donn{es de la te^te de lecture au FDC est en effet 
 constante et suppose  un  temps  de  r{volution  d{termin{  du  disque  . Une 
 rotation trop rapide , et le d{but  de l'information se trouve lu une seconde 
 fois . Un peu trop lent et une partie des donn{es est omise .
 
     B / Le port &FB7E {galement nomm{ registre d'{tat :
     Ce registre ne peut e^tre que lu  .  Il vous permettra de connai^tre @ tout 
 moment le bilan de sant{ du FDC .
 
     C / Le port &FB7F ou registre de donn{es :
     On peut lire ou  {crire  sur  ce  registre  .  En  {criture  ,  il sert @ 
 transmettre les ordres au  FDC  ou  @  envoyer  les  donn{es  @ {crire sur la 
 disquette . Employ{ en lecture , il lit  la zone sp{cifi{e de la disquette ou 
 le r{sultat d'une op{ration .
 ----------------------------------------------------------------------------
                         - ETUDE DU FDC 2}me PARTIE -
                          -- Les commandes du FDC --
                         - Chapitre 1 : G{n{ralit{s -
                           ------------------------
 
     Il est temps de voir  ce  qu'il  faut  transmettre  au  FDC pour en tirer 
 quelque chose . Chaque commande est constitu{e  d'un octet soit 8 Bits . Elle 
 doit souvent e^tre suivie d'autres octets  donn{s  en param}tres . Dans ce qui 
 suit certains bits seront annot{s : Toujours @ 1 ou toujours @ 0 pour AMSDOS. 
 Entendez par la que  la  modification  de  ce  bit  n'est pas impossible mais 
 totalement  hors  des  normes  AMSDOS   3,1/4   .  Dans  l'imm{diat  ,  toute 
 modification serait susceptible de produire  un crash spectaculaire faute des 
 pr{cautions idoines .
     Il ne suffit pas d'envoyer un  ordre  au  FDC  pour obtenir un r{sultat . 
 Plusieurs octets doivent souvnet e^tre transmis en phase instruction . De plus 
 la plupart des commandes travaillent en plusieurs phases . On distingue :
     LA PHASE  INSTRUCTION  :  On  envoie  une  s{rie  d'octets  au  FDC  pour 
 l'informer de l'op{ration @ accomplir ainsi que  du drive , piste , secteur , 
 etc ... Concern{s
     LA PHASE EXECUTION : Indispensable pour lire ou {crire des donn{es sur la 
 disquette . Inutile pour les autres commandes  .
     LA PHASE RESULTAT : Ou on lit  une  s{rie d'octets transmis par le FDC et 
 notament les registres d'{tat .  Indispensable  pour  toutes les op{rations . 
 Dans le chapitre suivant la signification et le ro^le des registres d'{tat .
 
                   ----------------------------------------
                   - Chapitre 2 : Les 15 commandes du FDC -
                   ----------------------------------------
 
     La phase  commande  s'adresse  syst{matiquement  au  port  &FB7F  en mode 
 {criture : LD BC,&FB7F
            OUT (C),octet dans registre A
 
     Etudions d'abord l'{tat et le role  des  bits sp{cifiques AMSDOS . (Les 8 
 bits d'un octet se comptent de 7 @ 0 & de gauche a droite) .
     
     BIT 7 : Utilis{ pour s{lectionner le syst}me multi piste sur les lecteurs 
 @ 2 te^tes : 1 si mode multipistes . 0 Sinon . Pour AMSDOS toujours 0 .
     BIT 6 : 1 : le FDC  travaille  en  double  densit{ . 0 : simple densit{ . 
 Pour AMSDOS toujours 1 .
     BIT 5 : Mis @ 1 ,  les  secteurs  "effac{s" seront ignor{s , 0 ils seront 
 lus . Toujours 0 sous AMSDOS . La notion de secteurs "effac{s" sera expliqu{e 
 plus loin .
     
     Ceci nous donne la base suivante :
     Bits   7 6 5 4 3 2 1 0
            0 1 0 X X X X X
 
     Les bits marqu{s d'un croix recevront le code de l'op{ration @ effectuer. 
 Bien que ces op{rations soient au nombre de 15 , 5 bits sont n{c{ssaires pour 
 certains codes . Ce sera le premier  octet  @  transmettre au FDC . Dans tous 
 les exemples et tableau de commandes , il figurera sous le nom de "COMMANDE". 
     Presque toutes les commandes demandent  d'autre  informations , il faudra 
 donc envoyer d'autres octets au FDC . Le second sera compos{ de :
     BIT 2 : Utilis{ par les lecteurs @  double  te^te . Mis @ 1 on lit l'autre 
 face de la disquette . Toujours 0 Pour AMSDOS .
     BITS 0 & 1 S{lection du num{ro de drive  de 0 @ 4 . 00=Drive A , 01=Drive 
 B , 10=Drive C , 11=Drive D .
 
     Ceci nous donne la base suivante : 
     Bits   7 6 5 4 3 2 1 0
            - - - - - 0 D D
 
     Les bits marqu{s d'un trait  doivent  rester  @  0  . Ce second code sera 
 nomm{ DRIVE dans tout ce  qui  suit  .  Viendront ensuite d'autres octets qui 
 peuvent varier selon  l'instruction  employ{e  .  Les  commandes d{crites ci-
 dessous sont class{es par nombre  de  phases  n{c{ssaires  . La valeur donn{e 
 comme octet COMMANDE est donn{e avec les bits 7-6-5 aux normes AMSDOS .
 -----------------------------------------------------------------------------
     1 - PHASE COMMANDE SEULE : Seule 1 instruction r{pond @ cette condition . 
 Elle transmet au FDC les donn{es sp{cifiques au lecteur de disquette connect{ 
 et n'est utile que si le lecteur employ{ n'est  pas un 3,1/4 . Il y-@ assez @ 
 faire avec les autres instructions . Restons en 3,1/4 pour l'instant .
 -----------------------------------------------------------------------------
                 2 - PHASE COMMANDE SUIVIE DE PHASE RESULTAT :
 
     A - INTERROGER ETAT D'INTERRUPTION :  Cette  commande se contente de lire 
 le registre d'{tat 0  afin  de  d{terminer  les  causes d'une interruption de 
 fonctionnement du FDC . La cause  de  l'interruption peut e^tre la fin normale 
 d'une phase d'instruction ou une erreur quelconque .
 
     INSTRUCTION : 1 octet
     1 COMMANDE  : &8 - %00001000
     --------------------------------------
     RESULTAT    : 2 octets
     1 Registre d'{tat 0
     2 Num{ro de piste ou se trouve la te^te
 
     B - INTERROGER L'ETAT DES LECTEURS  :  C'est la seule commande qui permet 
 de lire le registre ET3 .  ET3  vous  dira  (presque)  tout sur l'{tat de vos 
 drives (Connect{ ou non , disque  manquant  ,  prot{g{  {criture etc) . Si le 
 lecteur est connect{ mais {teint , le r{sultat se plante .
     
     INSTRUCTION : 2 octets
     1 COMMANDE  : &4 - %00000100
     2 DRIVE     : De 0 @ 3 pour A @ D
     ---------------------------------
     RESULTAT    : 1 octet 
     1 Registre d'{tat 3
     
     NOTE : Dans ces deux commandes , les bits 7-6-5 ne sont pas employ{s . La 
 lecture des registres d'{tat n'a  pas  besoin  de  connai^tre la densit{ ni le 
 mode d'{criture !
 