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: 1023
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 - 07 - Routines Annexe (SOS Programmeurs)
» Coding » Fdc - 13 - Edition du Buffer (SOS Programmeurs)
» Coding » FDC - 26 - Sub Routines Pour le FDC (SOS Programmeurs)
» Coding » Fdc - 03 - Commandes du Fdc (SOS Programmeurs)
» Coding » Fdc - 12 - la Routine d'Ecriture de Secteurs (SOS Programmeurs)
» Coding » Fdc - 11 - la Routine de Lecture Tous Secteurs (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 407 millisecondes et consultée 2235 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.