| |
|
|||
|
Pour pouvoir écrire sur une disquette vous devez absolument faire trois choses indispensables :
|
||||
|
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 ! |
||||
| |
||||
|
|
||||