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: 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 - 12 - la Routine d'Ecriture de Secteurs (SOS Programmeurs)
» Coding » Fdc - 22 - Analyse de la Piste (SOS Programmeurs)
» Coding » Fdc - 07 - Routines Annexe (SOS Programmeurs)
» Coding » Fdc - 01 - Fonctionnement Fdc (SOS Programmeurs)
» Coding » Fdc - 02 - Transmission Fdc (SOS Programmeurs)
» Coding » Fdc - 05 - Deplacement Tete (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 305 millisecondes et consultée 1692 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.