CODING ★ Deplacement tete ★

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 meme 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 apres 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: 1006
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 - 30 - Fdc Exemple de Bidouilles (SOS Programmeurs)
» Coding » Fdc - 23 - Ecraser les Secteurs (SOS Programmeurs)
» Coding » Fdc - 11 - la Routine de Lecture Tous Secteurs (SOS Programmeurs)
» Coding » Fdc - 04 - Test Drive (SOS Programmeurs)
» Coding » FDC - 23 - Etude de la Piste (SOS Programmeurs)
» Coding » Fdc - 12 - la Routine d'Ecriture de Secteurs (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.7-desktop/c
Page créée en 427 millisecondes et consultée 1690 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.