CODING ★ Déplacement tête ★

Fdc - 05 - Deplacement Tete (SOS Programmeurs)
POSITIONNER LA TETE

Nous abordons maintenant les choses sérieuses . Si vous avez eu la curiosité de faire un "CAT" sur la face FDC , vous comprendrez pourquoi seules les instructions de recherche de piste sont traitées dans ce numéro !
Pour la même raison , les routines de présentation et d'affichage ne sont que peu ou pas du tout évoquées . Tous les sous programmes appelés par GOZERO ou GOPISTE figurent dans la section SOUS PROGRAMMES .

1 - Aller en piste 0 : GOZERO

Cette routine effectue un CALIBRE . En sortie , elle affiche en bas d'écran la valeur binaire de ET0 ainsi que le numéro de piste (toujours 0) .

En cas d'erreur , un message est affiché sur l'avant dernière ligne de l'écran .

;           ; --------------------
;           ; - ALLER EN PISTE 0 -
;           ; --------------------
GOZERO LD A,"0"   ;"0" ASCII pour numéro de piste
  CALL PRTGO
  CALL CALIBRE ;Calibrer
;
;- Commun a GOZERO et GOPISTE -
;
PRTRES1 PUSH AF   ;Preserver l'eventuel flag d'erreur mis par RESULT
  CALL PRTBIN ;Lire et afficher resultat
  LD HL,TPSFIND
  CALL PRT
  LD A,(ET1) ;Ici ET1 contient la piste trouvee et non un registre
  CALL PRTHEX1 ;Afficher en HEXA
  CALL AFFPIST ;Modifier numéro de piste en face le texte etat drive
  POP AF   ;Recuperer flag erreur
  JR NC,ERRPIST ;Si NC c'est rate
;
INCPTPIS LD HL,PISTDRA ;Avance le pointeur pour parametres
  LD A,(ET1)  ;et range la piste dans l'octet concerne
  JR INCPTR   ;(PISTDRA ou PISTDRB)
INCPTET3 LD HL,ETDRA ;La même pour l'etat des drives
INCPTR PUSH AF
  CALL QUELDRV
  POP AF
  LD (HL),A
  RET
;
AFFPIST PUSH HL   ;Affiche piste en cours en face drive concerne
  PUSH AF
  LD HL,#3001 ;X-Y Position texte
  CALL QUELDRV ;Incrementer HL revient a descendre d'une ligne
  CALL #BB75 ;LOCATE pour les intimes
  POP AF
  POP HL
  JP PRTHEX1 ;Afficher et fini
;
QUELDRV LD A,(DRSELEC) ;Incremente HL si drive B selectionne
  OR A
  RET Z
  INC HL
  RET
;
PRTGO LD HL,TGOZERO ;Afficher commande GOZERO ou GOPIST
  CALL PRT   ;Seul le contenu de A differe en entree
  CALL #BB5A
  JP SPACE
;
ERRPIST LD HL,TERRPIS
  JP PRTLOC2
;
TERRPIS DEFB 24," ERREUR : ",24," Pas trouve piste ",7,13+#80
TGOZERO DEFB " Aller en piste : ","&"+#80
TPSFIND DEFB " Sur piste : " ,"&"+#80

ALLER VERS UNE PISTE DONNEE

Tout d'abord , il faut indiquer un numéro de piste . Ensuite , il faut voir si ce dernier n'est pas susceptible de faire grimper le drive aux rideaus ! La valeur de PISTMAX ne pourra donc être dépassée .

NBTENT représente le nombre d'essais à effectuer en cas d'échec de l'instruction . Il faut savoir qu'un échec dans l'opération CALIBRE ou GOPISTE ne peut avoir que 2 causes :

1 - Votre drive est très très fatigué

2 - Mauvaise temporisation WAITPIS avant lecture de la cause interruption (Voir chapitre commandes routine CALIBRE)

En conséquence NBTENT n'est pas vraiment indispensable , seulement prudent .

GOPISTN (Voir chapitre commandes) s'occupe de placer la tête selon les règles et de lire le résultat . Si c'est incorrect , on enlève une tentative au compteur et on recommence .

Si le résultat est convenable , il est sage de vérifier que le numéro de piste indiqué par la lecture de l'état d'interuption corespond bien au numéro souhaité . Sinon on procède comme ci-dessus .

Quand on est sur d'être au bon emplacement , on saute en PRTRES1 .

PRTRES1 Affiche en binaire le contenu de ET0 et en HEXA le numéro de piste trouvé . Ce même numéro de piste est affiché en face du texte d'état du drive et rangé dans l'octet PISTDRA ou PISTDRB selon le cas . En cas d'echec de l'instruction , on affiche un message d'erreur .

NOTES : En cas d'échec de l'une de ces 2 commandes , le numéro de piste renvoyé par ET1 est toujours 0 .

La temporisation donnée en CALIBRE , correspond à un déplacement de 41 pistes . Il va de soit que si le déplacement envisagé est d'un intervalle inférieur , le retard peut être diminué d'autant . La solution parfaite serait : En entrée de GOZERO et GOPISTE : Calculer l'intervalle entre la piste en cours et la piste ou l'on veut aller , utiliser le résultat comme valeur de retard (WAITPIS) .

;       ;---------------------------
;       ;- PLACER TETE SUR PISTE N -
;       ;---------------------------
GOPISTE LD A,"N"   ;Afficher les textes et demander numéro piste
  CALL PRTGO  ;Afficher texte commande
  CALL #BB78  ;Memoriser position curseur
  PUSH HL   ;et preserver
NEWNUM LD HL,TQUELPS ;Input Piste ?
  CALL INPUPRT2
  LD A,(PISTMAX) ;Tester si numéro donne > maxi
  LD B,A
  LD A,(VALEUR)
  CP B
  JR NC,NEWNUM ;Oui c'est rate
  CALL EFFLIN1 ;Non OK effacer ligne input
  LD (PISTSEL),A
  POP HL   ;Recuperer position curseur
  DEC H    ;Reculer de 2
  DEC H
  CALL #BB75
  LD A,(PISTSEL)
  CALL PRTHEX1 ;Remplacer "N" par numéro choisi
;
  LD A,(NBTENT) ;Section active proprement dite
  LD B,A   ;Nombre d'essais dans B
BCLPIST CALL GOPISTN
  JR C,SURPIST ;Si CARRY mis par result , operation reussie
  DEC B
  JR Z,FINPIS1 ;Si echec après N tentatives , c'est fini
  CALL RAZINTE ;Sinon vidange des interruptions
  CALL CALIBRE ;Recalibrer
  JR BCLPIST  ;Recommencer
;
SURPIST PUSH AF
  LD A,(PISTSEL) ;Pas d'erreur du FDC
  PUSH BC   ;Preserver compteur tentatives
  LD B,A   ;Verifier que l'on est bien sur la piste voulue
  LD A,(ET1)  ;en comparant le numéro donne avec celui donne
  CP B    ;par la phase resultat
  POP BC
  JR Z,FINPIST ;Fini et reussi
  POP AF
  DEC B    ;Si non B=B-1 et recommencer
  JR NZ,BCLPIST ;Fini mais erreur
FINPIST POP AF
FINPIS1 PUSH AF
  LD HL,TRETRY
  CALL PRT
  LD A,(NBTENT) ;Compter le nombre de tentatives effectuees
  DEC B
  ;SUB B
  CALL PRTHEX1 ;et l'afficher .
  POP AF
  JP PRTRES1
;
TQUELPS DEFB 18,"Numero de piste ?"," "+#80
TRETRY DEFB " Tentatives : ","&"+#80

SOS Programmeurs n°1

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

Page précédente : Fdc - 04 - Test Drive
★ AMSTRAD CPC ★ DOWNLOAD ★

Dump disquette:
» SOS  Programmeurs  1    FRENCHDATE: 2011-05-26
DL: 1219
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 - 06 - Entree Programme (SOS Programmeurs)
» Coding » Fdc - 13 - Edition du Buffer (SOS Programmeurs)
» Coding » Fdc - 24 - Reproduction (SOS Programmeurs)
» Coding » FDC - 23 - Etude de la Piste (SOS Programmeurs)
» Coding » FDC - 26 - Sub Routines Pour le FDC (SOS Programmeurs)
» Coding » Fdc - 30 - Fdc Exemple de Bidouilles (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.732-desktop/c
Page créée en 009 millisecondes et consultée 2134 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.