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
★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 305 millisecondes et consultée 1692 foisL'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. |
|
|