CODING ★ LA ROUTINE D'ECRITURE DE SECTEURS ★

Fdc - 12 - la Routine d'Ecriture de Secteurs (SOS Programmeurs)

Cette routine est appelée par appui sur CTRL+W depuis le programme d'édition buffer . Sa structure est quasi identique au sous programme de lecture . Une seule différence fondamentale : Si la longueur ID est plus grande que la longueur réelle l'écriture du secteur détruira les IDS suivants . Une confirmation est donc demandée .

;
;- Routine ecriture physique -
;
WRITPHY PUSH HL ;Préserver les paramètres édition buffer
PUSH DE
CALL FEN1 ;Fenetre pour affichages
;
CALL WRITPAR ;Initialiser en écriture
CALL PUTDEST ;Texte mettre disque destination
LD A,(PISTW) ;Piste écriture devient
LD (PISTSEL),A ;piste sélectionnée .
CALL AFFPIST ;Afficher numéro piste
CALL GOPIST1 ;Aller sur piste
JR C,OKPIS1
;
CALL ERPFORM ;Si NC , il n'y à sans doute pas de disquette
JR ABANDON1
;
OKPIS1 LD HL,(ADID) ;Récupérer zone IDS ecriture
LD A,(COUNT) ;et la position physique du secteur lu
;
FINDWRI DEC A ;Pointer l'ID écriture concerné
JR Z,SECWRIT
INC HL
INC HL
INC HL
INC HL
JR FINDWRI
;
SECWRIT CALL IDTRANS4 ;Copier les IDS dans QUATRID
LD A,(QUATRID+2)
LD (DERSEC),A ;1 seul secteur à écrire
CALL DIFLENL ;Voir si LS ID > LS réel
JR C,LENINF
JR Z,LENINF
;
LD HL,TECRASE ;Si oui . Avertir et confirmer écrasement
CALL PRT
CALL OUNO
JP NC,ABANDON2
;
LENINF LD A,(COUNT) ;COUNT contient le numéro d'ordre du secteur
CP 1 ;a lire
CALL NZ,VISESEC ;Si ce n'est pas le premier , viser juste
;
LD HL,(POINTER) ;Zone de stockage des états lecture
LD A,(HL)
AND %00001000 ;Tester si CM a été détecté et écrire
LD A,#45 ;selon CM ou non .
JR Z,NOWCM
LD A,#49
NOWCM LD HL,WRITFDC ;Commande écrire buffer sur disque .
CALL SETCOM2
;
LD HL,20000 ;Restaurer adresse d'origine du buffer
LD (ADBUFF),HL
CALL INSTRSEC ;Ecrire sur disque
;
CALL AFFRESW ;Afficher statuts ecriture
ABANDON2 LD A,(VRAILEN) ;Restaurer vraie longueur
LD (LENSEC),A
CALL SOURCE ;Reprendre les parametres source pour
; ;prochaine lecture
;
ABANDON1 CALL FENBUF1 ;Restaurer fene^tre buffer
POP DE ;Et récupérer paramètres édition
POP HL
RET
;
;- Afficher resultats ecriture -
;
AFFRESW CALL EFFLB1 ;Effacer lignes du bas
CALL DEUXNB ;Initialiser conversions 2 chiffres
;
LD HL,TWSECT
CALL PRT
LD B,4
LD HL,QUATRID ;Afficher IDS écrits
BCLWSE LD A,(HL)
CALL PRTHEX1
INC HL
DJNZ BCLWSE
;
LD HL,TWDR
CALL PRT
LD A,(DRSELEC) ;Drive écriture
ADD A,#41
CALL #BB5A
;
LD HL,TWPIST
CALL PRT
LD A,(PISTSEL) ;Piste écriture
CALL PRTDECIA
CALL CINQNB
;
CALL TSTERRS
LD HL,TWERR
CALL PRT
CALL PRT3ERR ;Erreurs écriture
;
LD HL,TOCWRIT
CALL PRT
LD HL,(NBLUS) ;Nombre d'octets effectivement écrits
LD (VALEUR),HL
CALL DEUCON16
LD IY,#2518
CALL AFFRESU ;Afficher ET1-ET2-ET3
;
LD A,7
CALL #BB5A ;Bip et attendre touche
JP #BB06
;
;- Textes et variables en rapport avec LITPHY et WRITPHY -
;
TWSECT DB 31,2,22,24," ECRITURE SECTEUR : ",24," "+#80
TLDR DB " "
TWDR DB " ",24," DRIVE : ",24," "+#80
TWPIST DB " ",24," PISTE : ",24," "+#80
TWERR DB 31,2,23,24," ERREURS ECRITURE : ",24," "+#80
TOCWRIT DB 31,2,24,24," OCTETS ECRITS : ",24," "+#80
TECRASE DB 31,2,22,20,24," ATTENTION !! SECTEUR > QUE TAILLE FORMAT !"
DB " ECRASEMENT ",24," ",7+#80
;
TLITPHY DB 31,2,22,24," Secteur : ",24," ","&"+#80
TLITPH1 DB 31,20,22,24," - Position sur la piste : ",24," "+#80
TLITPH2 DB 31,52,22,24," - Octets lus : ",24," ","&"+#80
TLITPH3 DB 31,2,23,24," Taille ID : ",24," ",32+#80
TLITPH4 DB 31,20,23,24," - Taille reelle : ",24," "+#80
TLITPH5 DB 31,2,24,24," Etat d'erreur : ",24," "+#80
POINTID DW 0
STATANA DB 0
FLAGPHY DB #FF
TREPROD DB 31,2,22,24," Reproduire format ? (O/N) ",24,7,18+#80
TOUPIST DB 31,2,22,18,"Donner numéro piste pour ecriture ? ",7+#80
TCOPDRV DB 31,2,21,24," Placer disquette destination dans : ",24," A"
DB 7,10,13+#80
TIDCONF DB 31,2,21,24," Conformer IDS Piste ? (O/N)",24,7,18+#80
TREMET DB 31,2,21,24," Remettre disquette source dans : ",24," A",7,#80
FLAGREP DB 0
T0 DB 239,210,185,163,144,126,110,96,83,71,59,50,38,31,24,17,10,3
T1 DB 216,171,134,102,74,49,16,8
T2 DB 230,129,50
T3 DB 191
IDSLECT DS 4
ADID DW 0
;

SOS Programmeurs n°3

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

Page précédente : Fdc - 11 - la Routine de Lecture Tous Secteurs
★ AMSTRAD CPC ★ DOWNLOAD ★

Dump disquette:
» SOS  Programmeurs  3    FRENCHDATE: 2003-03-29
DL: 828
TYPE: ZIP
SiZE: 144Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding » Fdc - 14 - Creation d'un Piste a Partir du Buffer (SOS Programmeurs)
» Coding » Fdc - 01 - Fonctionnement Fdc (SOS Programmeurs)
» Coding » Fdc - 21 - Programme de Copie (SOS Programmeurs)
» Coding » Fdc - 10 - Affichages Causes d'Interruptions Secondaires du Fdc (SOS Programmeurs)
» Coding » Fdc - 30 - Fdc Exemple de Bidouilles (SOS Programmeurs)
» Coding » Fdc - 04 - Test Drive (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 489 millisecondes et consultée 1844 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.