Seules les instructions employées dans l'état actuel du programme sont décrites ici . Ces sections resteront invariables . C'est la manière de les employer (décrite dans les chapitres suivant) , qui fera toute la différence. C'est également dans ces chapitres que tous les détails seront donnés . Routines INSTRU : Outre la commande proprement dite la phase instruction attend d'autres paramètres . On regroupe le tout dans les routines INSTRU . ; ; - Envoyer l'instrucion suivie du numéro de drive et de la piste - ; INSTRU CALL ENVOFDC ;A doit contenir l'instruction LD DE,(DRSELEC) ;E=Drive - D=Piste LD A,E ;Drive CALL ENVOFDC LD A,D ;Piste HOP JP ENVOFDC ; ;- Idem avec seulement le drive - ; INSTRU1 CALL ENVOFDC LD A,(DRSELEC) JR HOPTEST DES DRIVE Apparament d'une simplicité enfantine à opérer , un test convenable des drives fait partie des opérations les plus complexes à mettre en œuvre ! Etudiez très attentivement le chapitre TEST COMPLET DES DRIVES , il vous apprendra énormément . ; ;--------------------- ; ;- TESTER ETAT DRIVE - ; ;--------------------- TSTDRIV CALL RAZINTE ;VITAL !!! Voir un peu plus bas . LD A,4 CALL INSTRU1 ;Expedier instruction + drive CALL RESULT ;Resultat JP INCPTET3 ;A ranger dans la case du drive concerne LIRE LES INTERRUPTIONS
Cette routine devra être employée systématiquement pour lire ET3 après une instruction TSTDRIVE ou après une instruction de positionnement sur une piste pour ET0 et piste . Elle est systématiquement appelée en sortie de TEMPAMS . ; ; ---------------------------- ; ; - LIRE CAUSE INTERRUPTIONS - ; ; ---------------------------- LITSTAT LD A,#08 ;Code sense interrupt statuts CALL ENVOFDC ;Envoyer l'ordre JP RESULT ;Aller lire le resultatREMISE A 0 DE L'ETAT D'INTERRUPTION Le FDC peut mémoriser plusieurs causes d'interruption à la suite . Ce fait est très génant pour la bonne interprétation de certains résultats . Cette routine provoque une lecture des causes d'interruption et boucle tant que le message FDC INVALID COMMAND (&80) , n'est pas renvoyé par la phase résultat . Quand &80 est renvoyé , il n'y à plus rien à lire . ; ; ------------------------- ; ; - RAZ ETAT INTERRUPTION - ; ; ------------------------- RAZINTE CALL LITSTAT ;Interroger l'etat d'interruption tant que le CP #80 ;message commande invalide n'est pas renvoye JR NZ,RAZINTE ;par ET0 RET DEPLACER LA TETE La tête de lecture met un certain temps à se déplacer . Le signal d'interruption spécifique n'est pas envoyé tant que ce déplacement n'est pas terminé ! Il faut donc attendre faute de quoi on lirait une cause d'interruption sans rapport avec l'opération effectuée ! ; ;--------------------------- ; ;- PLACER TETE SUR PISTE 0 - ; ;--------------------------- CALIBRE LD A,7 ;Commande CALL INSTRU1 ;Instruction + drive TEMP1 LD A,(WAITPIS) ;Attente assez longue (sinon piste jamais trouvee du JP TEMPAMS ;1er coup et execution ralentie) et lire status . ; ; ----------------------- ; ; - PLACER TETE PISTE N - ; ; ----------------------- GOPISTN LD A,#F ;Instruction chercher piste CALL INSTRU ;Envoyer instruction - drive - piste JR TEMP1 ;Comme pour CALIBREDESCRIPTION DE LA ZONE DES VARIABLES Notez les noms et la signification des variables avant de passer à la suite ! Cette section est destinée à évoluer . Elle comporte déja quelques octets réservés à un usage ultérieur . Le commentaire des octets non utilisés dans l'état actuel du programme est marqué : "***" . La zone des variables commencera toujours en 40000 quelque soit l'origine et la longueur du programme . Vous pouvez donc lire ou modifier des paramètres avec PEEK et POKE . CALE DEFS 40000-CALE ;Truc pour tenir le debut des variables en 40000 ;quelque soit l'adresse d'assemblage du programme ; ;--- Variables et flags divers --- ; FLAGMOT DEFB 0 ;1 si moteur en route 0 si arrete ; 40000 ADBUFF DEFW 0 ;*** Adresse de debut du buffer donnees 40001 NBALIRE DEFW 0 ;*** Nombre d'octets a lire pour execution 40003 ; ;- Zone stockage octets resultat - ; ETOCLUS DEFB 0 ;Nombre d'octets transmis par le resultat 40004 ET0 DEFB 0 ;Les 3 registres d'etat ; 40005 ET1 DEFB 0 ; 40006 ET2 DEFB 0 ;*** ; 40007 ETPIST DEFB 0 ;*** Piste trouvee ;40008 ETHEAD DEFB 0 ;*** Tete trouvee ; 40009 ETNUMSEC DEFB 0 ;*** Numero de secteur trouve ; 40010 ETLENSEC DEFB 0 ;*** Longueur secteur trouve ; 40011 ; ;- Parametres generaux - ; DRSELEC DEFB 0 ;Drive selectionne suivi de piste en cours.Ces 2 octets sont PISTSEL DEFB 0 ;charges dans DE . Ne rien inserer entre les 2 ! 40012 - 13 DERPIST DEFB 0 ;*** Piste de fin pour operations multipistes . PISTMAX DEFB 42 ;Piste a ne pas depasser + 1 pour test sur CARRY 40014 - 15 WAITPIS DEFB 41 ;Temporisation pour deplacement tete de lecture 40016 NBTENT DEFB 4 ;Nombre repetitions en cas d'echec d'une instruction 40017 TEMPMOT DEFB 55 ;Temporisation moteur ;40018 ; ;- Parametres des drives - ; ETDRA DEFB 0 ;ET3 Pour drive A et B ; 40019 ETDRB DEFB 0 ;Ne rien inserer entre ces 2 DEFB ; 40020 ; PISTDRA DEFB 0 ;Piste en cours pour drive A et B ; 40021 PISTDRB DEFB 0 ;Ne rien inserer entre ces 2 DEFB ; 40022 ; ;-------------------------- ;- TEXTES DE PRESENTATION - ;-------------------------- TUS DEFB 24," SOS PROGRAMMEURS - Etude du FDC - (C) M.MAIGROT Nov 88 " DEFB 24,26,0,79,1,24+#80 TEFFLB1 DEFB 31,1,23,18+#80 ; ;- Textes du menu principal - ; TMENU DEFB 31,1,5," [A] Tester etat drive ",10,13 DEFB " [B] Bascule drive A/B ",10,13 DEFB " [C] Convers.numerique ",10,13 DEFB " [D] Aller en piste 0 ",10,13 DEFB " [E] Aller en piste ? ",10,13 DEFB " [Q] Quitter programme ",10,13+#80SOS Programmeurs n°1 ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 818 millisecondes et consultée 2000 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. |
|
|