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