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 meme 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 , tete 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: 949
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 - 23 - Ecraser les Secteurs (SOS Programmeurs)
» Coding » Fdc - 30 - Fdc Exemple de Bidouilles (SOS Programmeurs)
» Coding » Fdc - 08 - Test Interrupt (SOS Programmeurs)
» Coding » Fdc - 04 - Test Drive (SOS Programmeurs)
» Coding » Fdc - 03 - Commandes du Fdc (SOS Programmeurs)
» Coding » Fdc - 07 - Routines Annexe (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 043 millisecondes et consultée 1873 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.