                         - FDC THEORIE 2{me PARTIE -
              - Chapitre 3 : Signification des registres d'{tat -
               -------------------------------------------------
 
     NOTE : Lisez essentiellement les  en-te^te  de chapitre . La signification 
 des bits de registres d'{tat  ne  prendra  tout  son  sens qu'au moment de la 
 pratique . Dans l'imm{diat une {tude prolong{e serait fort indigeste . Chaque 
 exemple pratique vous dira quels bits  de  quel  registre sont @ consid{rer . 
 Vous pourrez alors revenir sur ces  points  sp{cifiques . Le dernier chapitre 
 doit par contre e^tre lu avec la plus grande attention .
 
        Il y-a 5 registres d'{tat . Chacun d'eux se compose d'un octet
 
                       --------------------------------
                       - LE REGISTRE D'ETAT PRINCIPAL -
                       --------------------------------
 
     Il se lit par une instruction IN  sur  le  port &FB7E : 'LD BC,#FB7E - IN 
 A,(C)' . C'est le seul registre qui  peut  (et  doit !) e^tre lu @ tout moment 
 d'une phase quelconque . Il informe  notament  de  l'op{ration en cours et de 
 l'aptitude du FDC @ recevoir ou non une commande .
     
     BIT 7 : Si ce BIT est @  1  ,  le  FDC est disponible sinon il traite une 
 instruction quelconque . 1 = La ligne est libre , 0 = La ligne est occup{e .
     BIT 6 : Si le bit pr{c{dent indique  une  disponibilit{ du FDC , le BIT 6 
 indique la direction dans laquelle doit aller  l'octet  de donn{e . BIT = 1 = 
 La donn{e va du FDC vers le CPC (lecture  ou  r{sultat) . BIT = 0 = La donn{e 
 va du CPC vers le FDC (Commande ou {criture) .
     BIT 5 : En lecture ,  il  permet  de  diff{rencier  les octets lus sur la 
 disquette et les octets transmis par la  phase  r{sultat . Ce BIT est mis d}s 
 le d{but de la phase ex{cution et enlev{ en  fin d'ex{cution . Donc : 1 = Les 
 octets lus sont ceux du disque . 0 = Les octets lus sont ceux du r{sultat .
     BIT 4 : Il est mis @ la r{ception  du  1er octet de commande et reste @ 1 
 tant que  le  FDC  est  en  train  d'accomplir  une  op{ration  de lecture ou 
 {criture . Il n'est remis @ 0 qu'apr}s la transmission du dernier octet de la 
 phase r{sultat . En bref : BIT = 1 = Je bosse allez vous faire voir ! BIT = 0 
 = Je suis @ votre disposition mai^tre ...
     BIT 3 au BIT 0 : Ces 4  bits correspondent @ 4 lecteurs possibles . Sito^t 
 qu'une instruction de  positionnement  sur  une  piste  est  lanc{e  , le bit 
 correspondant est mis . Aucune  instruction  de  lecture  ou {criture ne peut 
 e^tre envoy{e tant que l'un d'eux est @ 1 . Par contre , une autre instruction 
 de recherche de piste peut e^tre lanc{e sur  un  autre drive . Un autre de ces 
 bits sera alors mis @ 1 .  Le  seul  moyen  de  les  remettre @ 0 est de lire 
 l'{tat d'interruption du FDC ,  ceci  explique  le petit probl}me {voqu{ dans 
 les instructions 'Positionner piste' .
 
                         ----------------------------
                         - 2 - LE REGISTRE D'ETAT 0 -
                         ----------------------------
     On le trouve en  1er  octet  de  la  phase  r{sultat  .  On peut aussi le 
 consulter isol{ment par l'instruction 'Lire {tat d'interruption' .
     
     BIT 7 & 6 : Ces deux bits fonctionnent conjointement et peuvent fournir 4 
 informations :
     7=0 6=0 : L'op{ration en cours @ r{ussi .
     7=0 6=1 : Ou l'ex{cution @ {chou{  ou une op{ration de lecture - {criture 
 vient de se terminer . Ambigu et peu utilisable ...
     7=1 6=0 :  Instruction  ill{gale  !  Ne  nourrissez  pas  votre  FDC avec 
 n'importe quoi !  Ce  bit  est  aussi  mis  si : 
     A - On essaye de lire un  {tat  d'interruption alors que celle-ci n'a pas 
 eu lieu 
     B - Une instruction est  envoy{e  vers  un drive branch{ mais {teint .
     Dans ces 2 cas tous les autres bits seront @ 0 . ET0 = &80 .
     7=1 6=1 : Il faut enlever la  disquette  ou {teindre le drive pendant une 
 op{ration pour obtenir cette combinaison . Etes vous pervers @ ce point ?
     BIT 5 : Se met @ 1 d}s la fin d'une instruction .
     BIT 4 : Mis @  un  si  l'{lectronique  du  lecteur  de disquette en cours 
 signale une erreur .
     BIT 3 : BIT = 1 Si le  lecteur de disquette est d{connect{ , la disquette 
 absente ou que vous vouliez faire croire  au  FDC  que votre DD1 a 2 te^tes de 
 lecture .
     BIT 2 : Num{ro de la  te^te  s{lectionn{e  lors  de la phase instruction . 
 Restera toujours @ 0 sauf si vous voulez plaisanter ...
     BIT 1-0 : Combinaison de 0 @ 3 qui vous indique quel drive {tait actif au 
 moment de l'interruption .
 
                         ----------------------------
                         - 3 - LE REGISTRE D'ETAT 1 -
                         ----------------------------
 
       C'est le 2{me octet du r{sultat . Il ne peut e^tre lu s{par{ment .
 
     BIT 7 : Mis @ 1 sito^t la fin de la piste rencontr{e .
     BIT 6 : Inutilis{ , n'est me^me pas d{coratif .
     BIT 5 : DATA ERROR  .  Lors  d'une  op{ration  d'{criture , une valeur de 
 contro^le est sauvegard{e avec  chaque  secteur  (CRC)  .  En  lecture , cette 
 valeur est reconstitu{e . Si la  valeur  reconstitu{e est diff{rente de celle 
 lue , il y-@ un probl}me et ce bit  est  mis  @  1 . De me^me si les 4 valeurs 
 d'ID transmises lors d'une commande de  lecture ne correspondent pas @ celles 
 pr{sentes sur la disquette .
     BIT 4 : BIT mis si le  temps  de transmission des donn{es est incorrect . 
 Respectez la valeur  standard  de  26  Ms  et  n'oubliez  pas d'interdire les 
 interruptions et vous n'aurez pas @ vous en soucier .
     BIT 3 : Comme BIT 6
     BIT 2 : Est mis @ 1 si  une op{ration quelconque de lecture - {criture ne 
 trouve pas le secteur sp{cifi{ .
     BIT 1 : Mis si on veut {crire sur une disquette prot{g{e .
     BIT 0 : Se met @ 1 si  un  ID  secteur  ne peut e^tre trouv{ ou si la Data 
 Adress Mark est absente .
 
                           ------------------------
                           - LE REGISTRE D'ETAT 2 -
                           ------------------------
 
     C'est le 3}me octet du r{sultat il compl}te les informations fournies par 
 ET2 et ne peut e^tre lu s{par{ment .
 
     BIT 7 : Inutilis{
     BIT 6 : Mis @  1  si  un  secteur  'effac{'  est rencontr{ au cours d'une 
 op{ration de lecture {criture .
     BIT 5 : Est mis lors d'une erreur  lecture {criture comme le bit 5 de ET1 
 mais ne concerne que la zone de donn{es .
     BIT 4 : Mis @ 1 si le  FDC  constate  une diff{rence entre la piste ou se 
 trouve la te^te et la piste mentionn{e dans l'ID secteur .
     BIT 3 : Mis @ 1 si une des 3 instruction de comparaison @ r{ussi .
     BIT 2 : Mis @ 1 si une des 3 instruction de comparaison @ {chou{ .
     BIT 1 : Comme BIT 4 .
     BIT 0 : Mis si la Data Adress Mark ne peut e^tre trouv{e .
 
                           ------------------------
                           - LE REGISTRE D'ETAT 3 -
                           ------------------------
 
  Ce registre ne peut e^tre lu que par l'instruction 'Tester {tat des drives'
 
     BIT 7 : N'est pris en compte que pour certains drives , @ ignorer .
     BIT 6 : Si ce bit est mis , la disquette est prot{g{e en {criture . 
     BIT 5 : Si ce bit reste @ 0 , il n'y-a pas de disquette dans le lecteur .
     BIT 4 : Il est @ 1 si la te^te est positionn{e en piste 0 .
     BIT 3 : Si vous avez un lecteur @ double te^te ce bit sera @ 0 sinon @ 1.
     BIT 2 : Contient le num{ro de te^te s{lectionn{ si 2 te^tes .
     BIT 1 - 0 : Unit{ de drive actuellement prise en compte par le FDC .
 
    ----------------------------------------------------------------------
 
                    - NOTIONS GENERALES DE PROGRAMMATION -
                      ----------------------------------
 
     Une lecture attentive de ce qui  suit  vous {vitera bien des erreurs lors 
 de vos tentatives personnelles . Un  ordre  imp{ratif est @ respecter lors de 
 la cr{ation de vos programmes .
 
     1 - Avant toute commande :
         
         A - Initialiser les param}tres n{c{ssaires @ la commande envisag{e .
         B - Mettre le moteur en route !
         C - Attendre qu'il tourne @ plein r{gime .
         D - Lire le registre d'{tat 0 : 
     Lors d'un acc}s disque  ,  l'AMSDOS  lit  ce  registre AVANT ex{cution de 
 l'instruction et revient au BASIC sans l'avoir relu ! Comme la lecture de ET0 
 est indispensable  avant  de  pouvoir  accomplir  une  op{ration  de  lecture 
 {criture , le non respect de cette r}gle pourrait bloquer votre programme d}s 
 le commencement !
         E - Placer la te^te sur la piste voulue et v{rifier qu'elle s'y trouve
         F - Envoyer l'instruction .
         G - Lire ou {crire les octets de donn{es si l'instruction l'exige .
         H - Lire la phase r{sultat .
         I - R{agir en fonction du r{sultat (L@ tout est possible) .
         J - Stopper le moteur .
 
      L'ordre des instructions de D @  H  est  IMPERATIF  ! Pour le reste , on 
 peut se permettre quelques fantaisies comme  de  mettre le moteur en route et 
 le laisser tourner en permanence ...
     
     2  -  Le  FDC  ne  peut  travailler  sous  interruption  .  Toute  s{ries 
 d'instructions E/S adress{es au  FDC  doit  commencer  par  DI (Interdire les 
 interruptions) et finir par EI (R{tablir les interruptions) .
 
     3 - Les d{lais de  temporisation  doivent  e^tre  respect{s . Il n'est pas 
 interdit de les  modifier  mais  dans  la  plupart  des  cas  cela posera des 
 probl}mes de fonctionnement .
 
     4 - Certaines routines de la  ROM  AMSDOS pourraient e^tre utilis{es (Lire 
 ET0 , chercher piste , recalibrate  ,  Etc...)  .  Dans le cas pr{sent , cela 
 nuirait @ la p{dagogie du  sujet  .  Autrement  vous pouvez les utiliser pour 
 {conomiser de la RAM mais  attention  !  Certaines d'entre elles transmettent 
 des donn{es dans la zone param}tres de drive utilis{e par le BASIC . Si cette 
 zone se trouve modifi{e  avec  des  valeurs  hors  AMSDOS vous pourriez avoir 
 quelque surprises de retour au BASIC .
 
     5 - Si votre drive {met un son anormal , ETEIGNEZ IMMEDIATEMENT LE CPC !
 
 