CODING ★ TEST DES DRIVES ★

Fdc - 04 - Test Drive (SOS Programmeurs)

Le chapitre précédent vous a prévenu ! Ce n'est pas simple si l'on tient compte qu'il peut y-en avoir 1 ou 2 (Ce qui est la moindre des choses ...)

Les tests ont été effectués sur 464 + 2 Drives . Les connections de l'interface drive 6128 ont été établies différement . Un test rapide sur 6128 révèle des résultats un peu plus cohérents ! (Sur 464 , les connexions du signal 'Ready' A & B sont reliées à la même broche) .

Dans le cas ou seul 1 drive est connecté il n'y-à pas de problème . Dans le second , on distingue 2 possibilités : B est branché et allumé , B est branché mais éteint . Cette petite différence est fondamentale ! Si vous avez un drive B connecté et allumé , tout va bien . S'il est éteint , LES VALEURS RENVOYEES PAR ET3 SONT FAUSSEES !

Si votre configuration comporte 2 drives , faites l'essai suivant depuis le BASIC : Enlevez la disquette de A , éteignez B et envoyez une commande "SAVE" quelconque . Rien ! Aucun message d'erreur ... Sans rien toucher , mettez une disquette dans A et ça repart !

Autre essai : A est allumé , actif et contient une disquette . B est allumé et contient une disquette . Enlevez la disquette de A et tapez 'ùB' . Vous obtiendrez le message : "Drive B Disc missing" . Tapez 'R'etry . Tiens ? Il est revenu !

Dernière tentative si vous disposez d'un programme de copie quelconque : Lancez une opération de copie sur B avec celui-ci éteint et constatez le plantage .

L'explication du phénomène rèside à la fois dans les connections électroniques et dans la lecture des états d'interruption (LE BIT 5 DE ET3 N'EST A 0 QUE DANS LE CAS D'UN DISQUE ABSENT ET PAS D'UN DRIVE HORS SERVICE)

Entrer dans le détail déborde largement du cadre de l'étude en cours . Notez simplement que un drive B eteint mais branché faussera tout programme d'exploitation directe du FDC . Ci dessous un exemple de résultat obtenu dans ce cas :

Commande 4 : Tester état drive avec B éteint et absence de disque dans A renvoie dans ET3 : A = Protégé écriture et B OK .

Le programme devra donc déterminer avec précision si :

  1. B est déconnecté    ; : Interdire usage de B
  2. B est connecté mais éteint : Imposer l'allumage de B
  3. B est connecté et allumé : Tout va bien

Fonctionnement de la routine

On mémorise le drive utilisé actuellement puis on sélectionne le drive A qui ne peut qu'être connecté et allumé . On renvoie la tête en piste 0 . (Ce n'est pas indispensable) . Si la tête est déja sur la piste 0 la commande CALIBRE ne génère pas d'erreur il est donc inutile de tester où se trouve la tête avant la commande .

La routine TSTDRIV remet à zéro les causes d'interruption (ABSOLUMENT INDISPENSABLE !) , envoie la commande 4 et le numéro de drive au FDC , lit l'état d'interruption et range ET3 dans l'octet déterminé par INCPTE3 .

Ensuite on sélectionne le drive B et on essaye de placer la tête sur la piste 0 . C'EST OBLIGATOIRE : CALIBRE NOUS DIRA SI B EST ETEINT . La lecture des états après calibre nous dira :

  1. B Présent et allumé : ET0 = Opération réussie !
  2. B Absent    ; : ET0 = Erreur équipement .
  3. B Présent et éteint : ET0 = #80 pour INVALID COMMAND .

Dans le 1er cas on continue . On ignore le second qui sera de toute manière traité par TSTDRIV . Pour le 3ème , on boucle sur le test de B tant qu'il n'est pas allumé ou débranché !

L'appel suivant à TSTDIRV pour le drive B verra tous les bits 7 à 2 de ET3 (Tous sauf le numéro de drive) à zéro si le drive B n'est pas branché .

La seconde partie de la routine est plus longue mais plus simple . On va rechercher l'état du drive A et on interprête les bits 6 & 5 . La tête étant mise sur la piste 0 par CALIBRE , le bit 4 ne nous interesse pas de même que 7 , 3, 2 inutilisables sur Amstrad . (Revoyez le chapitre signification des registres d'état) .

Un second tour est effectué pour le drive B et c'est fini .

NOTES : La routine PRT affiche la chaîne pointée par HL . Le dernier caractère doit avoir son bit 7 à 1 (+#80) . PRTDRIV affiche le drive en cours à une position donnée . Ces deux routines sont dans la section sous programmes .

;       ;---------------------------
;       ;- ROUTINE TESTER 2 DRIVES -
;       ;---------------------------
TST2DR LD HL,TCOMDRV ;Afficher texte commande
  CALL PRT
  LD A,(DRSELEC) ;Preserver le drive en cours
  PUSH AF
  XOR A
  LD (DRSELEC),A ;Selection drive A
;
;     ; - Effectuer un test pour A et 1 pour B -
;
TST2DR1 CALL CALIBRE ;Initialiser en piste 0
  CALL TSTDRIV ;Tester etat du drive dont le numéro est dans A
  LD A,1
  LD (DRSELEC),A ;Passer en drive B
RECALI CALL CALIBRE ;Tester si il est actif en essayant de trouver
  CP #80   ;la piste 0 . Si le test d'etat apres CALIBRE
  JR NZ,BALLUME ;renvoie #80 , B est connecte mais eteint
;
  LD HL,TJEVEUB ;Interdire fonctionnement avec B:ETEINT
  CALL AFFERR
  JR RECALI
;
BALLUME CALL TSTDRIV ;Si ET3 = 1 , B est debranche
;
;- Afficher l'etat des 2 drives selon les flags -
;
AFRESDR LD A,"A" ;Drive A
  LD DE,ETDRA ;ET3 pour drive A
;
  LD HL,TETDRV1
BCLAFRD PUSH AF
  PUSH AF
  CALL PRT
  POP AF
  CALL INV
  CALL #BB5A ;A ou B
  CALL SPACE
  CALL INV  ;Video inverse
  LD A,(DE) ;ETDRA ou B
  CP #1   ;Si 1 Drive B hors service
  JR Z,DRBHS
  ;BIT 5,A   ;Si BIT 5 ET3=0 . Disque manque
  JR NZ,DREADY
  LD HL,TMISS
  CALL PRT  ;Afficher Disque manque et fini
  JR FINDRIV
DREADY LD HL,TPROT
  ;BIT 6,A   ;BIT 6 ET3 : 1=Protege ecriture , 0=Ouvert ecriture
  JR NZ,OUIPROT
  LD HL,TNOPROT
OUIPROT CALL PRT
  LD HL,TECRIT
  CALL PRT
  LD HL,TPISTZ
DRBHS CALL PRT
;
FINDRIV CALL CR
  POP AF
  CP "B"
  JR Z,FINDR1
  INC DE
  INC A
  LD HL,TETDRIV
  JR BCLAFRD
FINDR1 POP AF   ;Recuperer drive en cours a l'entree
  LD (DRSELEC),A
  RET
;
;- Textes concernant l'etat des drives -
;
TCOMDRV DEFB " Tester Drives"," "+#80
TETDRV1 DEFB 31,1,1
TETDRIV DEFB 24," Etat lecteur : ",24,18+#80
  DEFB " Pas de lecteur",7+#80
TMISS DEFB " Disque manque !",7+#80
TPROT DEFB " Prot","."+#80
TNOPROT DEFB " Read","y"+#80
TECRIT DEFB " Ecritur","e"+#80
TPISTZ DEFB " Sur piste : &0","0"+#80
TDRSELE DEFB 31,1,3,24," Drive choisi : A ",24+#80
TJEVEUB DEFB 24," ALLUMER DRIVE B ! ",24,7,13+#80

CHANGER DE DRIVE

Rien de plus simple mais il faut vérifier que le passage en drive B est possible !

;       ; -----------------------------
;       ; - CHANGER LE DRIVE EN COURS -
;       ; -----------------------------
CHGDRIV LD A,(DRSELEC)
  DEC A
  JR Z,DR0   ;Si etait 1 , devient 0 , c'est bon
;
  LD A,(ETDRB)  ;TESTER SI B EST PRESENT
  CP 1
  RET Z
;
  LD A,1    ;Si non etait 0 , passer en 1
DR0  LD (DRSELEC),A
  LD HL,TCHGDR  ;Afficher commande
  CALL PRT
  ADD A,#41   ;Decalage ASCII pour "A"ou"B"
  LD HL,TDRSELE+20
  LD (HL),A   ;Modifier texte du drive en cours
  ;SUB #41    ;Revenir en numéro reel
  JP PRTDRIV
;
TCHGDR DEFB " Change drive"," "+#80

SOS Programmeurs n°1

★ ANNÉE: ???
★ AUTEUR: MICHEL MAIGROT

Page précédente : Fdc - 03 - Commandes du Fdc
★ AMSTRAD CPC ★ DOWNLOAD ★

Dump disquette:
» SOS  Programmeurs  1    FRENCHDATE: 2011-05-26
DL: 1042
TYPE: ZIP
SiZE: 95Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding » Fdc - 01 - Fonctionnement Fdc (SOS Programmeurs)
» Coding » Fdc - 08 - Test Interrupt (SOS Programmeurs)
» Coding » Fdc - 07 - Routines Annexe (SOS Programmeurs)
» Coding » FDC - 23 - Etude de la Piste (SOS Programmeurs)
» Coding » Fdc - 13 - Edition du Buffer (SOS Programmeurs)
» Coding » FDC - 26 - Sub Routines Pour le FDC (SOS Programmeurs)
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.73-desktop/c
Page créée en 114 millisecondes et consultée 1967 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.