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 numero 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(S): ???
AUTEUR: MICHEL MAIGROT
Page précedente : Coding Fdc - 13 - Edition Du Buffer   (SOS Programmeurs)

DOWNLOAD

Fichier(s):

» SOS_Programmeurs_3  (Fichier ZIP , télécharger 68 fois de 138 Ko)

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

» Coding Fdc - 05 - Deplacement Tete   (SOS Programmeurs)
» Coding Fdc - 12 - La Routine d'Ecriture De Secteurs   (SOS Programmeurs)
» Coding Fdc - 24 - Reproduction   (SOS Programmeurs)
» Coding Fdc - 04 - Test Drive   (SOS Programmeurs)
» Coding Fdc - 06 - Entree Programme   (SOS Programmeurs)
» Coding Fdc - 21 - Programme De Copie   (SOS Programmeurs)
» Coding Fdc - 23 - Ecraser Les Secteurs   (SOS Programmeurs)
» Coding Fdc - 08 - Test Interrupt   (SOS Programmeurs)
» Coding Fdc - 23 - Etude De La Piste   (SOS Programmeurs)
CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ
CPCrulez[Content Management System] v8.00 par hERMOL
Page créée en 038 millisecondes et consultée 107 fois