|
||||
Pour pouvoir �crire sur une disquette vous devez absolument faire trois choses indispensables :
Inhiber les interruptions Tester si la disquette est prot�g�e contre l'�criture, ce n'est pas seulement pour ne pas faire de b�tises mais bien une n�cessit� pour que le SEQUENCER fonctionne correctement. Donc toutes les routines d'�critures commencent par ce test. Respecter le timing d'�criture de 32 cycles. Les routines d'�criture sur la disquette sont CRITIQUES en ce qui concerne le timing. Entre le moment ou vous avez charg� le DATA REGISTER pour �crire un nibble et le moment ou vous le rechargerez pour �crire le suivant, il doit IMPERATIVEMENT y avoir 32 cycles machines du CPU. |
||||
Ah oui ? Et pourquoi ?
Nous avons vu que l'�criture d'un bit sur la disquette se fait en 4�s ... et comme il y a 8 bits � �crire il faut donner au SEQUENCER 4 * 8 = 32�s ce qui correspond � 32 cycles machine. (trop fort non ? mais si vous voulez plus fort : Le pourquoi ici ! mais n'oubliez pas de revoir avant le fonctionnement du LSS) |
||||
Voici un exemple d'�criture sur la disquette de quelques nibbles qui montre le d�compte. Vous noterez qu'entre deux manipulations de $C08C ou de $C08D il y a TOUJOURS 32 cycles. Le premier nibble est �crit d�s l'acc�s $C08F,X alors que les suivants le sont par les acc�s $C08D,X |
DELAY |
LDA $C08D,X LDA $C08E,X BMI ERROR LDA DATA1 STA $C08F,X ORA $C08C,X JSR DELAY LDA DATA2 STA $C08D,X ORA $C08C,X JSR DELAY LDA DATAFIN STA $C08D,X ORA $C08C,X JSR DELAY NOP NOP ORA $C08E,X RTS PHA PLA RTS |
; Erreur, la disquette est prot�g�e contre l'�criture ;(4 cycles) On supposera des load absolus ici et pour la suite ;(5 cycles) c'est parti pour l'�criture, comptons les cycles ;(4 cycles) ;(6 cycles) + les 13 de la routine DELAY � ne pas oublier ;(4 cycles) <--- jusque l�... il y a 32 cycles exactement ;(5 cycles) <--- Puis d'ici cette fois ;(4 cycles) ;(6 cycles) + les 13 de la routine DELAY � ne pas oublier ;(4 cycles) <--- jusque l�, il y a encore 32 cycles exactement ;(5 cycles) <--- Puis d'ici c'est le dernier d�compte ;(4 cycles) ;(6 cycles) + les 13 de la routine DELAY � ne pas oublier ;(2 cycles) ;(2 cycles) <--- jusque l�, il y a encore 32 cycles exactement ;(4 cycles) Ici on arr�te le mode "�criture" ;(3 cycles) Le total des cycles est de 13 pour la routine ;(4 cycles) ;(6 cycles) |
|
Il faut bien comprendre que les instructions NOP, PHA PLA JSR et RTS n'ont pas
d'autre raison d'�tre QUE DE PERMETTRE A LA ROUTINE D'ECRITURE D'AVOIR LE NOMBRE DE CYCLES MACHINES ADEQUAT ce
qui permet au SEQUENCER d'�crire correctement les nibbles ! C'est en cela que les routines d'�criture sont dites
avoir un timing critique.
|
S'il n'y avait pas 32 cycles que se passerait-il ? | ||||
CAS 1 : je laisse moins de cycles | ||||
Cela signifie que votre DATA REGISTER est recharg� alors que tous les bits n'ont pas �t� �crits sur la disquette, la r�ponse est d'une �vidence biblique : le NIBBLE est �crit incompl�tement si vous interrompez sur des multiples de 4�s et de fa�on totalement illisible pour les autres coupures. | ||||
CAS 2 : je laisse plus de cycles | ||||
Eh bien votre DATA REGISTER �tant rempli de 0 le SEQUENCER se fait un joie d'�crire un 0 tous les 4�s... ce qui est
pr�cisement la m�thode pour �crire des nibbles de synchronisation (revoir ici la rubrique
ad hoc). Mais attention... vous savez qu'au del� de deux 0 votre relecture sera al�atoire car il y aura
sans doute d�synchronisation rapide, mais �videment si vous faites un syst�me de protection c'est autre chose !
|
||||
LES ROUTINES D'ECRITURE DU DOS 3.3 | ||||
La routine d�crite ci-dessus est bien gentille mais on ne peut pas se laisser aller � d�rouler un tel code pour �crire un ent�te, 342 nibbles et un checksum, etc... admirons donc la routine d'�criture de la RWTS avec toutes ses subtilit�s lorsqu'il y a des branchements qui sont r�alis�s ou non r�alis�s, des d�lais diff�rents selon le besoin etc ... curieusement cela devient un peu plus sportif ! La routine d'�criture du champ adresse d'un secteur C'EST ICI La routine d'�criture du champ des donn�es d'un secteur C'EST ICI |
||||
|
||||
|