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