CODING ★ FDC - FORMATAGE ET ECRITURE DE LA PISTE ★

Fdc - 25 - Formatage et Ecriture Piste (SOS Programmeurs)

   ; Cette courte routine se passe fort bien de préambule .

-------------------

;
;- Stocker une piste complete . Si buffer plein retour avec NC -
;
FORMATER LD HL,TFORMATE  ;Afficher texte formatage
  CALL PRT
;
  LD HL,(POINPIS)  ;Prendre le pointeur
  INC HL
  LD A,(HL)    ;et recuperer FLAGFNC
  LD (FLAGFNC),A
  INC HL
  LD (POINPIS),HL  ;Pointe sur piste suivante si pas formatee
;
  ;BIT 3,A
  JP NZ,DEFORMA   ;Piste origine pas formatee , deformater piste
;
  INC A     ;Inutilise dans cette version
  RET Z     ;Piste en attente
;
;- Piste formatee . Reprendre parametres piste et remettre dans programme -
;
GOFORM LD E,(HL)  ;Recupere longueur de secteur
  INC HL
  LD D,(HL)
  LD (LONGSEC),DE
  INC HL
;
  LD DE,LENSEC ;Recuperer LENSEC - NBSEC - GAPFORM - OCREMP
  LD BC,4
  LDIR
;
  LD A,(NBSEC)
  LD C,A
  LD B,0
  PUSH BC
  ;SLA C   ;C = C*4
  ;SLA C
  LD DE,IDOUTDRA ;Recuperer les IDS et les stocker dans la liste
  LDIR    ;de sortie
  POP BC
;
  PUSH BC
  LD DE,LISTERR ;Et la liste des etats d'erreur
  LDIR
  POP BC
;
  LD (POINPIS),HL ;Stopper pointeur sur 1ers octets adresse buffer
;
;- Formater -
;
WAITDIS LD HL,IDOUTDRA
  CALL FORMATE ;La piste est formatee par la routine FORMATE
  LD DE,#0213  ;Locate pour erreur drive
  CALL TSMISPROT ;Voir si erreur drive . NC si oui
  JR NC,WAITDIS ;Attendre que drive ready
  ;SCF    ;Marquer format effectue
  RET    ;Fini
;
;- Deformater -
;
DEFORMA LD HL,TDEFORM ;Texte deformatage
  CALL PRT
  LD A,1    ;Un seul secteur
  LD (NBSEC),A
  LD A,6    ;De taille 6
  LD (LENSEC),A
;
WAITDIS1 LD HL,TABDEFOR ;Avec des IDS bidons suffit a deformater une piste
  CALL FORMATE
  LD DE,#0213  ;Locate pour erreur drive
  CALL TSMISPROT ;Voir si erreur drive . NC si oui
  JR NC,WAITDIS1
  XOR A    ;Enlever CARRY pour signaler deformatage
  RET
;
TABDEFOR DB #FF,#FF,#FF,6
TFORMATE DB 31,2,20,24," FORMATAGE PISTE ",24,#80
TDEFORM DB 31,2,20,24," DEFORMATE PISTE ",24,#80
;

----------------------
— ECRITURE DE LA PISTE -
----------------------

   C'est exactement l'inverse de la routine de stockage .

;
;- Ecrire une piste complete -
;
ECRIRE LD HL,TECRIPI ;Textes ecriture
  CALL PRT
  LD HL,TGAPRW ;GAP RW
  CALL PRT
  LD A,(GAPRW)
  CALL PRTHEX1
  LD HL,TSECTS ;et secteurs
  CALL PRT
;
  LD HL,(POINPIS) ;Recuperer le debut de la zone des adresses
  PUSH HL   ;de stockage et mettre dans IX
  POP IX
;
  LD HL,LISTERR ;Etats d'erreur
  LD (POINTER),HL
  LD HL,IDOUTDRA ;Et IDS a ecrire
  LD (POINTID),HL
;
;- Routine ecriture physique -
;
  XOR A    ;Compteur à 0
  LD (COUNT),A
  LD A,(NBSEC)
  LD B,A
;
BCLWRIP PUSH BC
  LD HL,(POINTID) ;Passer les 4IDS au programme y compris la piste .
  CALL IDTRANS4
  LD A,(QUATRID+2) ;Les secteurs sont ecrits un a un , le dernier
  LD (DERSEC),A ;secteur a ecrire est donc le meme
  LD (POINTID),HL ;Pointer la suite des IDS
;
  LD L,(IX+0)  ;Adresse de deépart ecriture
  LD H,(IX+1)
  LD (ADBUFF),HL ;Dans ADBUFF
;
  LD HL,(POINTER)
  LD A,(HL)   ;Marque secteur ecrase ?
  CP #7F    ;Oui . Ce secteur a ete detruit par l'ecriture
  JP Z,CRUNCHE ;precedente . Sauter SANS AVANCER LE COMPTEUR .
;
  CP #FF   ;Voir si le secteur a ete stocke sous forme compactee
  LD B,#45   ;Si oui ecrire en repetant OCREMP par routine speciale
  JR Z,NOCMCOMP ;Sans CM
  CP #F7   ;Avec CM
  JR NZ,PACOMPAC ;Octet a subi un XOR #FF si compacte d'ou #FF & #F7 !
;
  LD B,#49
NOCMCOMP LD A,B   ;Ecrire avec la routine speciale qui transemet
  LD HL,WRITFDC2 ;toujours le même octet .
  CALL SETCOM2
  JR ECRIR1   ;Aller ecrire
;
PACOMPAC LD A,(QUATRID+3) ;Voir si taille 0
  OR A
  JR NZ,PASTZER ;Non
;
  LD HL,(POINTER) ;N'ecrire taille 0 que si MAM ou DAM
  LD A,(HL)
  AND %00000011 ;MAM - DAM ?
  JP Z,RIENECRI ;NON
;
  LD B,#45
  JR CMNOT1   ;Sinon ecrire n'importe quoi pour reproduire MAM
;
PASTZER LD A,(FLAGFNC) ;Si piste a reparer , ignorer ce qui suit et tenter
  AND %01000000 ;l'ecriture de toute maniere
  JR NZ,ECRIR2
;
  LD HL,(POINTER)
  LD A,(HL)
  AND %00110111 ;Si pas d'erreur PROVOQUEE sauf EP-HD-CM , c'est bon
  JP NZ,RIENECRI ;Sinon ne rien ecrire
;
ECRIR2 LD B,#45   ;CM or not CM ?
  LD HL,(POINTER)
  LD A,(HL)
  AND %00001000
  JR Z,CMNOT1
  LD B,#49
;
CMNOT1 LD A,B    ;Commande ecrire secteur
  LD HL,WRITFDC
  CALL SETCOM2
;
ECRIR1 CALL VISINST ;Viser d'apres COUNT et executer instruction
;
  LD DE,#0213 ;Locate pour erreur drive
  CALL TSMISPROT ;Voir si erreur drive . NC si oui
  JR NC,ECRIR1 ;Boucler si FDC pas content
;
  CALL TSTERRS ;Tester etat d'erreur
;
  LD A,"&"   ;Afficher resultat d'ecriture
  CALL #BB5A
  LD A,(QUATRID+2)
  CALL PRTHEX1
  CALL INV
  CALL PRT3ERR
  CALL INV
;
RIENECRI LD HL,COUNT ;Au suivant
  INC (HL)
CRUNCHE LD HL,(POINTER)
  INC HL
  LD (POINTER),HL
  INC IX
  INC IX
  POP BC
  DEC B
  JP NZ,BCLWRIP ;S'il en reste
;
  LD L,(IX+0) ;Adresse de deépart prochaine ecriture
  LD H,(IX+1)
  LD (POINPIS),HL
  LD A,23
  CALL EFFLINE
  ;SCF
  RET
;
TECRIPI DB 31,2,21,24," ECRITURE PISTE ",24,18,#80
TSECTS DB 31,20,22,24," SECTEURS : ",24,32,18,#80
TGAPRW DB 31,2,22,24," GAP RW : ",24,32,"&",18,#80
;

-------------------------

 Voilà . C'est la fin de la grosse tartine ! Reste à parcourir la section routines pour y trouver les quelques modifications apportées par rapport à la version précédente .

-------------------------

--------------------------
— SUB ROUTINES POUR LE FDC -
--------------------------

 Pour la dernière du FDC , cette section est reproduite intégralement . Les parties collées à la marge n'ont pas subi de modification notables .

;
;- Routines completes FDC -
;
;- AFF.RESU. -
;
AFFRES1 LD IY,#2018
AFFRESU PUSH HL
PUSH BC
CALL LOCATE
LD B,3
LD HL,ET0
BCLARES LD A,(HL)
CALL PRTBIN
INC HL
DJNZ BCLARES
LD B,4
BCLARE1 LD A,"&"
CALL #BB5A
LD A,(HL)
PUSH HL
CALL PRTHEX1
POP HL
INC HL
DJNZ BCLARE1
POP BC
POP HL
RET
;
;- Moteur -
;
MOTON LD A,(FLAGMOT)
CP 1
RET Z
LD A,1
CALL MOTCOM
LD A,(TEMPMOT) ;Mini 55
JP TEMPAMS
MOTCOM LD (FLAGMOT),A
LD BC,#FA7E
OUT (C),A
RET
;
MOTOFF XOR A
JR MOTCOM
;
;- Tester les 2 drives -
;
TST2DR XOR A    ;REMANIE EN FONCTION DE LA NOUVELLE PRESENTATION
  LD (DRSELEC),A ;MAIS PRINCIPE IDENTIQUE A VERSION PRECEDENTE
  LD (PISTSEL),A
  LD (PISTL),A
  LD (PISTW),A
;
TST2DR1 CALL CALIBRE ;Aller piste 0
  CALL TSTDRIV ;Tester etat drive . A = ET3 au retour
  LD (ETDRA),A
  LD HL,#0D02 ;Locate pour texte etat
  CALL AFRESDR ;Tester etat et afficher
;
  LD A,1   ;Idem sur drive B
  LD (DRSELEC),A
RECALI CALL CALIBRE
  CP #80
  JR NZ,BALLUME
;
  LD HL,TJEVEUB  ;B doit etre allume
  CALL PRT
  CALL #BB06
  LD A,17    ;Effacer texte
  CALL #BB5A
  JR RECALI
;
BALLUME CALL TSTDRIV
  LD (ETDRB),A
  LD HL,#2E02
;
;- Afficher etat drives -
;
AFRESDR PUSH AF    ;Preserver ET3
  CALL #BB75   ;Placer texte
  LD HL,TNOLECT
  POP AF    ;Recuperer ET3
  CP 1
  JR Z,DRHS   ;Lecteur HS
  ;BIT 5,A
  JR NZ,DREADY
;
  LD HL,TMISS   ;Disque manque
  JR DRHS
;
DREADY LD HL,TPROT
  ;BIT 6,A
  JR NZ,DRHS   ;Protege ecriture
;
  LD HL,TNOPROT  ;OK Ecriture
DRHS JP PRT
;
TJEVEUB DB 31,46,2,24," ALLUMER DRIVE B ! ",24,7,13+#80
TNOLECT DB " Lecteur absent ",#80
TMISS DB " Disque manquant ",#80
TPROT DB " Protege ecriture",#80
TNOPROT DB " OK en ecriture ",#80
;
TSMISPROT CALL TSTMISS ;Tester disc missing ET write protected
  RET NC
  JP TSTPROT
;
TSTMISS LD A,(ET0)   ;Tester 'Disc missing'
  AND %00001000
  ;SCF
  RET Z
;
  LD HL,TMISS
  JR STOPDRV
;
TSTPROT LD A,(ET1)   ;Tester 'Write protected'
  AND %00000010
  ;SCF
  RET Z
;
  LD HL,TPROT
;
STOPDRV PUSH HL   ;De doit contenir coordonnees locate
  EX DE,HL
  CALL #BB75
  CALL INV
  CALL SPACE
  LD A,(DRSELEC)
  ADD A,#41
  CALL #BB5A
  LD A,":"
  CALL #BB5A
  POP HL
;
  CALL PRT
  CALL SPACE
  CALL INV
  CALL SONNE
  CALL #BB06
  LD A,17
  CALL #BB5A
  XOR A
  RET
;
;- Aller en piste PISTSEL -
;
GOPISTE PUSH DE   ;QUELQUE PEU RETOUCHEE ET REMPLACE 'GOPIST1'
  LD A,(NBTENT)
  LD B,A
BCLPIST CALL GOPISTN
  JR C,SURPIST
  DEC B
  JR Z,FINPIS1
  CALL CALIBRE
  JR BCLPIST
;
SURPIST PUSH AF
  LD A,(PISTSEL)
  PUSH BC
  LD B,A
  LD A,(ET1)
  CP B
  POP BC
  JR Z,FINPIST
  POP AF
  DEC B
  JR NZ,BCLPIST
FINPIST POP AF
FINPIS1 POP DE
  RET
;
;- Initialisation des bits de FLAGERR selon interpretation resultat
;
TSTERRS LD IY,FLAGERR ;RAZ Erreurs
LD (IY+0),0
LD A,(QUATRID+1) ;Test des erreurs
OR A
JR Z,OKHEAD
SET 6,(IY+0)
OKHEAD LD HL,ET1  ;Sur ET1
BIT 5,(HL)
JR Z,NOERCRC
SET 5,(IY+0)
NOERCRC BIT 2,(HL)
JR Z,OKDATA
SET 4,(IY+0)
OKDATA BIT 0,(HL)
JR Z,OKMA
SET 1,(IY+0)
OKMA INC HL ;Sur ET2
BIT 6,(HL)
JR Z,OKCM
SET 3,(IY+0)
OKCM BIT 5,(HL)
JR Z,OKDD
SET 2,(IY+0)
OKDD BIT 0,(HL)
JR Z,OKDA
SET 0,(IY+0)
OKDA LD A,(QUATRID)
LD L,A
LD A,(PISTSEL)
SUB L
RET Z
SET 7,(IY+0)
RET
TEMPAMS PUSH AF   ; Temporisation de A*27 Ms
LD A,12
CALL TEMPMIL
POP AF
DEC A
JR NZ,TEMPAMS
LD A,15
CALL TEMPMIL
JR LITSTAT
;
TEMPMIL PUSH AF
LD A,#F6
BCLTEMP DEC A
JR NZ,BCLTEMP
POP AF
DEC A
JR NZ,TEMPMIL
RET
;
RAZINTE CALL LITSTAT ;- Attendre que le FDC soit bien dispose -
CP #80
JR NZ,RAZINTE
RET
;
TSTDRIV CALL RAZINTE ;- Test drive -
LD A,4
CALL INSTRU1 ;Envoyer instruction & drive
JP RESULT
;
LITSTAT LD A,#08 ;Lire statuts FDC -
CALL ENVOFDC
JP RESULT
;
;- Tete sur la piste 0 -
;
CALIBRE LD A,7    ;RESTRUCTURE DE MANIERE A TESTER UN EVENTUEL
  CALL INSTRU1 ;'DISC MISSING' LORS DE GOPISTE
  CALL TEMP1
  LD A,(ET1)
  OR A
  JR NZ,CALIBRE
  RET
;
GOPISTN LD A,#F   ;Aller en piste N
  CALL INSTRU  ;Envoyer instruction , drive et piste selectionnes
TEMP1 LD A,(WAITPIS)
  CALL TEMPAMS
;
RETTSDR DB 0   ;Ici un RET pour ne pas bloquer en entree de programme
  LD DE,#0213  ;si drive B absent ou sans disc (TSTDRIV)
  CALL TSTMISS
  JR NC,GOPISTN
  RET
;
FORMATE PUSH DE ;- Formater -
PUSH BC
LD B,#4D
CALL COMPCOM
CALL INSTRU2
LD A,(LENSEC) ;Env.Par.
CALL ENVOFDC
LD A,(NBSEC)
CALL ENVOFDC
LD A,(GAPFORM)
CALL ENVOFDC
LD A,(OCREMP)
CALL ENVOFDC
DI
LD BC,#FB7E
CALL WRITFDC1
POP BC
POP DE
RET
;
TSTDIDC DI
PUSH BC   ;- Lire les IDS -
LD B,#4A   ;Passer en double densite
LD A,#A
CALL INSTRU1 ;Lire les IDS en simple densite pour provoquer erreur
CALL RESULT
JR NC,RANGCOM ;Si erreur c'est bien DD et c'est fini
;
DI
LD B,#A;Si non passer en SD
LD A,#4A   ;Et lire en DD pour erreur
CALL INSTRU1 ;SD=Err.
CALL RESULT
;
RANGCOM DI
LD A,B
LD (COMMAND),A
POP BC
SCF
RET
;
INSTRU CALL ENVOFDC ;- Envoyer au FDC drive , tête et piste -
LD DE,(DRSELEC) ;E=Dr.D=P.
LD A,(HEAD)
OR E
CALL ENVOFDC
LD A,D
HOP  JP ENVOFDC
;
INSTRU2 LD A,(COMMAND) ;- Envoyer au FDC , commande , head , drive -
INSTRU1 CALL ENVOFDC
PUSH DE
LD A,(HEAD)
LD E,A
LD A,(DRSELEC)
OR E
POP DE
JR HOP
;
INSTRU9 CALL COMPCO1 ;- Envoyer commande et 9 octets pour read write -
CALL INSTRU2
PUSH BC
PUSH HL
LD B,7
LD HL,QUATRID
NEXT9 LD A,(HL)
CALL ENVOFDC
INC HL
DJNZ NEXT9
DI
LD BC,#FB7E
POP HL   ;Reprendre adresse buffer variable pour LITFDC3
PUSH HL
CODEOPE CALL LITFDC ;CALL VARIABLE
POP HL
POP BC
RET
;
ENVOFDC DI    ;Envoyer un octet au FDC
PUSH BC
LD BC,#FB7E
PUSH AF
WAITFDC IN A,(C)
ADD A,A
JR NC,WAITFDC
ADD A,A
JR NC,VEUTOCT
POP AF
POP BC
EI
RET
;
VEUTOCT POP AF
INC C
OUT (C),A
DEC C
LD A,5
DIGERE DEC A
NOP
JR NZ,DIGERE
POP BC
EI
RET
;
WRITFDC LD HL,(ADBUFF) ;- Ecrire dans le FDC -
WRITFDC1 LD DE,0
JR TESTFDC
BCLWRT INC C
LD A,(HL)
OUT (C),A
DEC C
INC DE
INC HL
TESTFDC IN A,(C)
JP P,TESTFDC
AND #20
JR NZ,BCLWRT
OUTWRIT LD (NBLUS),DE
JP RESULT
;
WRITFDC2 LD DE,0   ;REPETER LE MEME OCTET EN ECRITURE
  LD HL,(ADBUFF) ;HL n'est jamais incremente
  JR TESTFDC2
BCLWRT1 INC C
  LD A,(HL)
  OUT (C),A
  DEC C
  INC DE
TESTFDC2 IN A,(C)
  JP P,TESTFDC2
  AND #20
  JR NZ,BCLWRT1
  JR OUTWRIT
;
LITFDC LD DE,(NBALIRE) ;- Lire et stocker le nombre d'octets donnes
LD HL,(ADBUFF)
LITFDC3 PUSH HL
JR TSTFDC
RETEST LD A,D
OR E
JR Z,TSTFDC
INC C
INI
DEC C
INC B
DEC DE
TSTFDC IN A,(C)
JP P,TSTFDC
AND #20
JR NZ,RETEST
EXILIT POP DE
AND A
SBC HL,DE
LD (NBLUS),HL
JP RESULT
;
LITFDCX PUSH HL
JR TSTFDCX
RETESTX INC C
IN A,(C)
DEC C
INC HL
TSTFDCX IN A,(C)
JP P,TSTFDCX
AND #20
JR NZ,RETESTX
JR EXILIT
;
LITFDC2 LD HL,(LONGSEC) ;Lecture pour Chercher la vraie taille d'un secteur
INC HL
TSTFDC3 LD A,H
OR L
JR Z,TSTGAP
TSTFDCA IN A,(C)
JP P,TSTFDCA
AND #20
JP Z,RESULT
INC C
IN A,(C)
DEC C
DEC HL
JR TSTFDC3
;
TSTGAP IN A,(C)
JP P,TSTGAP
LD HL,BUFGAPS
LD DE,267
JR LITFDC3
;
;------------------------
;- LITFDC4 Lire et stocker l'octet de remplissage et sauter -
;- LITFDC5 Compter les octets de remplissage jusqu'au CRC et sauter -
;- LITFDC6 Lire et compter le GAP -
;- LITFDC7 Attendre la fin de la lecture -
;
LITFDC4 PUSH HL
  LD DE,-2   ;Longueur secteur a -3 pour 2 CRC
  JR TSTFDC4
RETEST4 INC C
  IN A,(C)
  DEC C
  LD (OCREMP),A ;Lire le 1er octet (remplissage) et stocker
  JR LITFDC5
TSTFDC4 IN A,(C)
  JP P,TSTFDC4
  AND #20
  JR NZ,RETEST4
  JP RESULT   ;Securite
;
LITFDC5 LD L,A   ;Memoriser valeur remplissage
  LD H,3   ;2 octets CRC a sauter et lire GAP
  JR TSTFDC5
RETEST5 INC DE   ;Compter les octets de remplissage
  INC C    ;on aura ainsi la vraie longueur
  IN A,(C)
  DEC C
  CP L    ;Voir si on est arrive au 1er octet du CRC
  JR Z,TSTFDC5
  DEC H    ;Sauter CRC
  JR Z,LITFDC6
TSTFDC5 IN A,(C)
  JP P,TSTFDC5
  AND #20
  JR NZ,RETEST5
  JP RESULT
;
LITFDC6 LD (VALGAPF),A ;Ranger le GAP
  LD H,A   ;Memoriser le GAP
  LD L,1   ;Compteur pour longueur GAP
  JR TSTFDC6
RETEST6 INC C
  IN A,(C)
  DEC C
  CP H
  JR NZ,LITFDC7
  INC L
TSTFDC6 IN A,(C)
  JP P,TSTFDC6
  AND #20
  JR NZ,RETEST6
  JP RESULT
;
LITFDC7 LD (LONGSEC),DE ;Ranger longueur
  LD A,L
  LD (GAPFORM),A ;et GAP
  POP HL
;-------------------------
LITFDC1 IN A,(C)   ;- Lire sans rien stocker -
JP P,LITFDC1
AND #20
JP Z,RESULT
INC C
IN A,(C)
DEC C
JR LITFDC1
;
RESULT DI ;- Resultat -
PUSH BC
LD BC,#FB7E
PUSH HL
PUSH DE
LD D,0
LD HL,ET0
PUSH HL
JEBOSSE IN A,(C)
CP #C0
JR C,JEBOSSE
INC C
IN A,(C)
LD (HL),A
INC HL
INC D
DEC C
;
TEMPRES DEC A
JR NZ,TEMPRES
IN A,(C)
AND #10
JR NZ,JEBOSSE
POP HL
LD A,(HL)
AND #C0
DEC HL
LD (HL),D
POP DE
POP HL
POP BC
LD A,(ET0)
EI
RET NZ
SCF
RET
;
RESU1 LD BC,#FB7E ;LECTURE RESULTAT RAPIDE ET SANS DI POUR LITRE IDS
  LD HL,ET0
JEBOS1 IN A,(C)
  CP #C0
  JR C,JEBOS1
  INC C
  IN A,(C)
  LD (HL),A
  INC HL
  DEC C
  LD A,5
TEMPR1 DEC A
  JR NZ,TEMPR1
  IN A,(C)
  AND #10
  JR NZ,JEBOS1
  RET
;
;- Avancer d'une piste -
;
INCPIST PUSH HL   ;Avancer d'une piste
  LD HL,DERPIST
  LD A,(PISTSEL)
  CP (HL)   ;P.Max.
  JR Z,PASINC
  INC A
  LD (PISTSEL),A
  LD A,1
  LD (WAITPIS),A
  ;SCF    ;Flag C si encore piste , NC si non
  POP HL
  RET
PASINC LD A,41
  LD (WAITPIS),A
  POP HL
  XOR A
  RET
;
;- Composer les commandes -
;
COMPCO1 LD A,(COMMAN2)
LD B,A
COMPCOM LD A,(FLAGDEN) ;Entree avec commande dans B
LD C,A
LD A,B    ;B=Octet commande
AND C
LD C,A    ;+Densite
LD A,(FLAGMT)
OR C    ;+Multitrack
LD (COMMAND),A
RET
;
COMLIPI LD A,#42
SETCOM2 LD (COMMAN2),A
LD (CODEOPE+1),HL
RET
;
;- Sub routines selection parametres lecture / ecriture -
;
SETLECT LD A,(DRL)  ;Selection drive - head - piste lecture
  LD (DRSELEC),A
  LD A,(HDL)
  LD (HEAD),A
  LD A,(PISTL)
  LD (PISTSEL),A
  RET
;
SETWRIT LD A,(DRW)  ;Selection drive - head - piste ecriture
  LD (DRSELEC),A
  LD A,(HDW)
  LD (HEAD),A
  LD A,(PISTW)
  LD (PISTSEL),A
  RET
;
;- Sub routines comparaisons -
;
CPDRIVE LD A,(DRL)  ;Comparer drive source et destination
  LD B,A
  LD A,(DRW)
  CP B
  LD A,0
  RET Z
  INC A
  ;SCF
  RET
;
CPPIST LD A,(PISTL) ;Comparer pistes source/destination
  LD B,A
  LD A,(PISTW)
  CP B
  RET
;
DIFLENL LD A,(LENSEC) ;Comparer taille ID secteurs et vraie taille
  LD (VRAILEN),A
  LD B,A
  LD A,(QUATRID+3)
  CP B
  RET Z
  LD (LENSEC),A
  RET
VRAILEN DB 0
;
;- Verif.Valid pist. -
;
VERIPIS LD A,(PISTMAX)
  LD B,A
  LD A,(DERPIST)
  CP B     ;Fin > Maxi ?
  RET NC    ;Oui
  LD B,A
  LD A,(PREMPIS)
  INC B
  CP B     ;Deb.>Fin ?
  RET
;
TSTNBSE LD A,(NBSEC) ;Tester nombre secteurs . NC si rate .
OR A
RET Z
CP 33
RET
;
CALIGAP LD A,(LENSEC) ;Calibrer le GAP
  OR A
  LD HL,T0DD
  LD C,15
  JR Z,GAPVERI
;
  DEC A
  LD HL,T1DD
  LD C,12
  JR Z,GAPVERI
  DEC A
;
  LD HL,T2DD
  LD C,8
  JR Z,GAPVERI
  DEC A
  JR Z,GAPVERI
;
  LD HL,T3DD
  LD C,5
  DEC A
  RET NZ
;
;- Rectifier le GAP lu -
;
GAPVERI LD A,(NBSEC) ;Nombre secteurs < nombre a probleme
  CP C
  RET C
;
BCLGAPV CP C    ;Pointer GAP MAXI dans table
  JR Z,GAPVERI1
  INC HL
  INC C
  JR BCLGAPV
;
GAPVERI1 LD A,(GAPFORM);Voir si GAP hors limite
  LD B,A
  LD A,(HL)
  CP B
  RET NC
;
  LD (GAPFORM),A ;Rectifier si oui
  RET
;
SETGRW LD A,(GAPFORM)
  CP 1
  JR Z,SETGRW1
  ;SRL A
SETGRW1 LD (GAPRW),A
  RET
;
T0DD DB 239,210,185,163,144,126,110,96,83,71,59,50,38,31,24,17,10,3
T1DD DB 216,171,134,102,74,49,16,8
T2DD DB 230,129,50
T3DD DB 191
;
;- Variables buffer
;
ADBUFF DW 0 ;Adresse buffer
;
EFFLB1 RET
AFFPIST RET
TCOPDRV DS 100
;

-------------------------

 Fin des programmes commentés FDC . Les sections comprenant les sous routines d'affichage , d'edition , etc ... Ainsi que la section variables n'ayant pas subi de modifications depuis le numéro 2 ne sont pas reproduites ici .

-------------------------

SOS Programmeurs n°4

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

Page précédente : Fdc - 24 - Reproduction
★ AMSTRAD CPC ★ DOWNLOAD ★

Dump disquette:
» SOS  Programmeurs  4    FRENCHDATE: 2003-03-28
DL: 1161
TYPE: ZIP
SiZE: 128Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding » Fdc - 03 - Commandes du Fdc (SOS Programmeurs)
» Coding » Fdc - 02 - Transmission Fdc (SOS Programmeurs)
» Coding » Fdc - 12 - la Routine d'Ecriture de Secteurs (SOS Programmeurs)
» Coding » Fdc - 08 - Test Interrupt (SOS Programmeurs)
» Coding » Fdc - 07 - Routines Annexe (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 159 millisecondes et consultée 2414 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.