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: 1010
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 - 13 - Edition du Buffer (SOS Programmeurs)
» Coding » Fdc - 21 - Programme de Copie (SOS Programmeurs)
» Coding » Fdc - 25 - Formatage et Ecriture Piste (SOS Programmeurs)
» Coding » Fdc - 05 - Deplacement Tete (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.732-desktop/c
Page créée en 164 millisecondes et consultée 2340 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.