CODING ★ CREER UNE PISTE A PARTIR DU BUFFER ★

Fdc - 14 - Creation d'un Piste a Partir du Buffer (SOS Programmeurs)
Principe de fonctionnement : Après l'initialisation du programme , un appel à la routine FORMIRR permet à l'utilisateur de créer son format sur une piste donnée . Le formatage effectué , la zone buffer est recopiée par tranches d'octets équivalente à la longueur ID de chaque secteur . Le résultat est affiché après chaque écriture .
 En fin de travail , l'analyse de la piste nouvellement créée est effectuée .

;
   ; ------------------------------------------------------
   ; 1 : Demander si les secteurs doivent être écrits en CM
   ; ------------------------------------------------------
;
;- Creer une piste -
;
CREPIST LD HL,TCM  ;Control Mark (O/N) ?
  CALL PRT
TSTCM CALL #BB06
  AND #DF
  CP "N"
  LD B,#45   ;Non : Commande écriture normale
  JR Z,NOCM
  CP "O"
  LD B,#49   ;Oui : Commande écriture C.M. Effacé
  JR NZ,TSTCM
;
NOCM LD A,B
  LD (TYPSECT+1),A ;Adapter le programme en fonction du choix
;
      ;-------------------------------
      ;2 : Initialisation du programme
      ;-------------------------------
;
  LD HL,TLENBUF
  CALL PRT
  LD HL,(NBLUS)
  LD (VALEUR),HL
  LD (STOK),HL  ;Préserver longueur buffer
  PUSH HL
  CALL DEUCON16 ;et aficher
  POP DE
  LD HL,20000
  ADD HL,DE   ;Préserver adresse de fin du buffer
  LD (LASTBUF),HL
;
  LD A,#CD    ;Modifier FORMIRR en y ajoutant
  LD HL,CALIGAP  ;un CALL CALIGAP en entrée .
  LD (RECTGAP),A ;La longueur du GAP sera rectifiée automatiquement
  LD (RECTGAP+1),HL ;en cas de mauvaise entrée par le menu .
;
NEWPFRM LD HL,TPFRM   ;Donner le numéro de la piste à créer
  CALL INPUPRT2
  LD A,(PISTMAX)
  LD B,A
  LD A,(VALEUR)
  CP B
  JR NC,NEWPFRM  ;et tester si pas > que 41
;
  LD (PISTSEL),A ;Piste donnée = dernière piste à formater (1 seule)
  LD (DERPIST),A
  LD (PISTW),A   ;et piste où écrire
;
  LD HL,TAVERT2  ;Avertir qu'il vaut mieux ne pas remodifier
  CALL PRT    ;ce numéro à partir du menu .
;
           ;------------
           ;3 : Formater
           ;------------
;
  CALL FORMIRR ;Formater selon les paramètres fournis par l'utilisateur
  JP NC,SOURCE ;Erreur au formatage : Abandon
;
  CALL GOPIST1   ;En sortie , FORMIRR recalibre sur la piste 0 , il
;    ;faut donc revenir une nouvelle fois sur la piste à écrire
;
;- Initialiser boucle d'écriture -
;
  LD A,(NBSEC)  ;Nombre de secteurs dans B
  LD B,A
  LD HL,20000
  LD (ADBUFF),HL
  LD (POINBUF),HL
  CALL WRITPAR  ;Initialiser en écriture
  LD HL,IDOUTDA ;IDS secteurs
  LD A,1
  LD (COUNT),A  ;1er secteur sur la piste
;
;- Ecrire (Identique à WRITPHY vu précédement) -
;
BCLCREE CALL IDTRANS4 ;Initialiser IDS WRITE
  PUSH HL
  PUSH BC
  LD A,(QUATRID+2) ;Premier secteur
  LD (DERSEC),A ;= Dernier . On en écrit qu'un à la fois
  CALL DIFLENL  ;Tester rapport entre taille ID et taille réelle
  JR C,INFLEN
  JR Z,INFLEN
;
  LD HL,TECRASE ;Secteur > Taille
  CALL PRT
  CALL OUNO   ;Confirmer ecrasement
  JR NC,SECNEXT
;
INFLEN LD A,(COUNT)
  CP 1
  CALL NZ,VISESEC ;Pointer secteur
;
TYPSECT LD A,#45   ;#45 ou #49 selon état C.M. donné en entrée
  LD HL,WRITFDC
  CALL SETCOM2
  CALL INSTRSEC ;Initialiser commande et ecrire
;
  LD A,(ET1)
  BIT 1,A
  JP NZ,ABANDON4 ;Etait protegee en ecriture
;
  CALL AFFRESW ;Affiche resultat ecriture (Me^me routine que WRTIPHY)
;
  LD HL,(ADBUFF) ;Tester si total ecrit >= contenu buffer
  LD DE,(NBLUS)
  ADD HL,DE
  LD (ADBUFF),HL
  LD DE,(LASTBUF)
  AND A
  SBC HL,DE
  JR C,SECNEXT ;Non continuer l'écriture sur secteur suivant .
;
  POP BC
  POP HL
ABANDON5 LD HL,TPLURIE ;Oui : Avertir qu'il n'y a plus rien à écrire
  CALL PRT
  CALL #BB06
  JR FINCREE   ;et stopper
;
SECNEXT LD A,(VRAILEN) ;Restaurer longueur
  LD (LENSEC),A
  POP BC
  POP HL
;
  LD A,(COUNT) ;Encore secteurs à écrire ?
  CP B
  JR Z,FINCREE ;Non
  INC A
  LD (COUNT),A
  JR BCLCREE
;
FINCREE CALL EFFLB1 ;Effacer textes
;
;- Configurer routine analyse suivant les besoins -
;
  LD A,(STOPANA)   ;Analyse ON .
  LD (STATANA),A
  XOR A
  LD (STOPANA),A
  LD A,#C9
  LD (RETCREE),A   ;Bloquer l'affichage du résultat
  LD (RETCRE1),A
  LD HL,RETCREE
  LD (PASFOR1+1),HL ;Modifier saut si non formaté
;
;- Analyser la nouvelle piste -
;
  CALL FEN2
  LD A,(PISTW)
  LD HL,QUATRID
  CALL ANAL2  ;Sauter le début normal de l'analyse
;
  LD A,(STATANA) ;Restaurer les paramétres courants de analyse
  LD (STOPANA),A
  LD HL,PASFORM
  LD (PASFOR1+1),HL
  XOR A
  LD (RETCREE),A
  LD (RETCRE1),A
  LD HL,0
  LD (RECTGAP),A ;et de FORMIRR
  LD (RECTGAP+1),HL
;
;- Afficher les données de la piste créée -
;
  CALL FEN1
  LD HL,TRESCRE
  CALL PRT
  LD A,(LENSEC)   ;LS
  CALL PRTHEX1
  LD HL,TLSEC
  CALL PRT
  LD HL,(LONGSEC) ;Nombre d'octets
  LD (VALEUR),HL
  CALL DEUCON16
;
  LD HL,TG1    ;GAP
  CALL PRT
  LD A,(VALGAPF)
  CALL PRTHEX1
  LD HL,TG2
  CALL PRT
  LD A,(GAPFORM)  ;Longueur GAP
  CALL PRTHEX1
;
  LD HL,TLENORG   ;Origine buffer
  CALL PRT
  LD HL,(STOK)
  LD (NBLUS),HL   ;Restaurer au passage les valeurs début
  LD (VALEUR),HL  ;et longueur buffer
  CALL DEUCON16
  LD HL,TLENEND   ;Fin buffer
  CALL PRT
  LD HL,(ADBUFF)
  AND A
  LD DE,(POINBUF)
  ;SBC HL,DE
  LD (VALEUR),HL
  LD (ADBUFF),DE
  CALL DEUCON16
  CALL #BB06   ;Attendre
  JP SOURCE    ;Restaurer paramètres source et c'est fini
;
ABANDON4 LD BC,TPROT1   ;Afficher protégé écriture et fini .
  CALL PRTERR
  POP BC
  POP HL
  JP SOURCE
;
;- Textes et variables -
;
TCM  DB 31,2,21,"Control mark (O/N) ? ",#80
TLENBUF DB 31,2,21,18,"Buffer : ",32+#80
TPFRM DB 31,2,22,"Donner le numéro de la piste a creer : ",7+#80
TAVERT2 DB 31,2,23,24," EVITEZ DE MODIFIER LE NUMERO DE PISTE ",24,7+#80
;
TRESCRE DB 31,2,22,24," VOTRE PISTE ... : ",24
TTSEC DB " Taille reelle :",32+#80
TLSEC DB "= ",#80
;
TLENORG DB 31,2,23,24," LONGUEUR ORIGINE : ",24,32+#80
TLENEND DB 31,40,23,24," LONGUEUR ECRITE : ",24,32+#80
TG1  DB 31,40,24,24," GAP : ",24,32,"&"+#80
TG2  DB 24," LONG : ",24,32,"&"+#80
;
TPLURIE DB 31,2,22,24," PLUS RIEN A ECRIRE : ABANDON !! ",24,7+#80
;
STOK DW 0
LASTBUF DW 0
;
      ; -----------------------------------
     ;- ROUTINES SAUVER ET CHARGER BUFFER -
      ; -----------------------------------
;
;- Sauver buffer -
;
SAVEBUF CALL FICHIER ;Entrer le nom de fichier
  LD A,(DRW)   ;Y ajouter le drive écriture
  ADD A,#41
  LD (BUFFNOM),A
  CALL #BC8C   ;Openout
  JR NC,ERRDRIV
  JR Z,ERRDRIV
  LD HL,20000  ;Adresse de départ
  LD DE,(NBLUS) ;Longueur du fichier
  LD A,2
  CALL #BC98   ;Sauver
  JR NC,ERRDRIV
  JR Z,ERRDRIV
  CALL EFFLB1  ;Effacer textes
  JP #BC8F   ;Closeout
;
;- Charger buffer -
;
LOADBUF CALL FILLBUF ;Effacer le buffer
  CALL FICHIER ;Entrer le nom de fichier
  LD A,(DRL)   ;Y ajouter le drive lecture
  ADD A,#41
  LD (BUFFNOM),A
  CALL #BC77   ;Openin
  JR NC,ERRDRIV
  JR Z,ERRDRIV
  LD (NBLUS),BC ;Longueur du buffer
  LD HL,20000  ;Forcer tout chargement en début de buffer
  CALL #BC83   ;Load
  JR NC,ERRDRIV
  JR Z,ERRDRIV
  CALL EFFLB1  ;Effacer texte
  CALL #BC7A   ;Closein
  JP AFFBUF   ;Afficher - Editer buffer
;
FICHIER LD HL,TFICHIER ;Edition d'un nom de fichier
  CALL PRT
  CALL EDITNOM ;Limité à 12 caractères
;
  LD HL,TTXEDIT ;Recopier dans BUFFNOM
  LD DE,BUFFNOM+2
  PUSH BC   ;Longueur du nom dans B
  LD C,B
  LD B,0
  LDIR
  POP BC
  INC B    ;+2 pour le drive suivi de ':'
  INC B
;
  LD HL,#0101 ;Pour ne pas avoir scrolling en cas de message
  CALL #BB75  ;d'erreur du drive .
  LD HL,BUFFNOM
  LD DE,17000 ;Buffer disquette
  RET
;
ERRDRIV LD HL,TERDRIV
  CALL PRT
  CALL #BC7D ;Closein !
  JP #BC92   ;Closeout !
;
EFFLB1 LD HL,TEFFLB1
  JP PRT
;
BUFFNOM DB "A:" ;Drive choisi
  ;DS 12 ;Nom du fichier
;
TFICHIER DB 31,2,22,"Nom du fichier :"," "+#80
TERDRIV DB 31,2,22,18,24," ERREUR FICHIER ! ",24,7+#80
;

SOS Programmeurs n°3

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

Page précédente : Fdc - 13 - Edition du Buffer
★ AMSTRAD CPC ★ DOWNLOAD ★

Dump disquette:
» SOS  Programmeurs  3    FRENCHDATE: 2003-03-29
DL: 1009
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 - 26 - Sub Routines Pour le FDC (SOS Programmeurs)
» Coding » Fdc - 24 - Reproduction (SOS Programmeurs)
» Coding » Fdc - 13 - Edition du Buffer (SOS Programmeurs)
» Coding » FDC - 23 - Etude de la Piste (SOS Programmeurs)
» Coding » Fdc - 25 - Formatage et Ecriture Piste (SOS Programmeurs)
» Coding » Fdc - 02 - Transmission Fdc (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 153 millisecondes et consultée 2152 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.