This page is at least 12 years old !
|
Les ROMs (VSM)
Selon l'article du IEEES, ce furent les plus gros ROMs de l'époque, avec une capacité de 131072 bits, soit 16ko organises en mots de 8 bits. Ces ROMs se démarquent des mémoires parallèles et série qu'on trouve partout aujourd'hui par leur interface et leur brochage très particulier. En effet, dans le datasheet on voit que l'interface n'est comme aucune autre et que la moitié des broches ne servent en fait à... rien (voir la photo, une cartouche). Premièrement, on ne trouve pas deux bus pour l'adresse et les données mais seulement un bus 4 bits, exposé sur 4 broches non pas numérotées de 0 à 3 mais de 1,2,4,8, ce qui correspond à la puissance de 2 correspondante. A l'époque il semblerait que cette notation était préférée. Le datasheet explique que c'est un bus multiplexé et que deux autres broches appelées M0 et M1 servent à indiquer au ROM ce qu'on souhaite faire. Deuxièmement, il y a aussi une broche ROMCLK qui pourrait faire croire que le circuit est complètement synchrone. En réalité il ne l'est pas, c'est une vraie pagaille ! Voici ce à quoi les états de M0 et M1 correspondent :
Prenons les choses étape par étape. Pour lire des données, on souhaite d'abord fixer une adresse. Pour pouvoir adresser les 16ko entiers, il faudrait 14 bits, hors, on n'a qu'un bus 4 bits. On devrait donc faire un minimum de 4 écritures pour atteindre 16 bits. Cependant, la documentation expliqueque ce ne sont pas 4, mais 5 écritures que l'on va devoir faire. C'est ici que la réponse à la question des signaux Chip select absents se trouve. Ces ROMs possèdent en fait un compteur d'adresse interne sur non pas 14, mais 18 bits. Ces 4 MSB servent de Chip select. Par exemple, si le masque de Chip select d'un ROM est 0101 (5), il ne répondra que si son adresse est entre 01 0100 0000 0000 0000 (0x14000) et 01 0111 1111 1111 1111 (0x17FFF). Tout l'intérêt de ce système est dans le câblage de ROMs en parallèle. Dans la dictée on trouve 2 ROMs en parallèle, le premier a son masque CS à 0000 et le second à 0001. Si par exemple on fixe l'adresse à 0x025A7, les 4 MSB seront à 0000, et A13~A0 à 0x25A7. Comme ils sont en parallèle, tous les compteurs d'adresse des ROMs sur le bus sont fixés à cette adresse. Les 4 MSB correspondent au masque du premier ROM, c'est donc lui qui va répondre. Si on passe maintenant à l'adresse 0x06B13, les 4 MSB seront à 0001 et A13~A0 à 0x2B13, c'est donc le deuxième ROM qui va répondre C'est un concept assez spécial quand on est habitué à avoir un simple signal /CS pour choisir quel ROM doit "parler", mais cela permettait de pouvoir câbler de nombreux ROMs en parallèle (jusque 1111 = 16 donc) de manière totalement transparente pour le processeur et sans avoir de circuit arbitrant.
C'est important car le programme de la dictée magique garde M1 haut pendant plusieurs périodes de l'horloge ! A chaque écriture, on avance 4 bits dans le compteur d'adresse grâce à un pointeur interne au ROM. Ce pointeur est remis à zéro après une lecture.
Une fois que l'adresse est fixée, on veut commencer à lire les données. Pour cela, la documentation explique qu'on peut avoir deux choix : soit les lire par mots de 4 bits (sur le bus entier), soit bit par bit (sur la ligne ADD8). C'est une option programmée et il se trouve que c'est le mode bit-par-bit qui a été retenu pour tous les ROMs de la dictée magique. C'est maintenant que les choses se compliquent et m'ont fait m'arracher les cheveux.
C'est bien le cas, mais il y a deux particularités: la première c'est qu'il faut un "dummy read" juste après qu'on ait fixe l'adresse. C'est a dire une commande lecture seule pour que les rouages internes du ROM chargent le premier bit. C'est tout. Une fois ce "dummy read" effectué, on peut effectivement commencer a lire les données. La deuxième particularité est ici: la commande est bien validée sur le front descendant de l'horloge, mais la réponse sur ADD8 se font sur le front descendant de... M0 ! Je n'avais pas fait attention a ce détail, avec le temps "ta", alors que je me basais sur le chronogramme trouve sur la doc du synthétiseur, que voici:
C'est bien le cas, mais il y a deux particularités : la première c'est qu'il faut un "dummy read" juste après qu'on ait fixe l'adresse. C'est à dire une commande lecture seule pour que les rouages internes du ROM chargent le premier bit. C'est tout. Une fois ce "dummy read" effectué, on peut effectivement commencer à lire les données. La deuxième particularité est ici : la commande est bien validée sur le front descendant de l'horloge, mais la réponse sur ADD8 se fait sur le front descendant de... M0 ! Je n'avais pas fait attention à ce détail, avec le temps "ta", alors que je me basais sur le chronogramme trouve sur la doc du synthétiseur, que voici : Le réglage de l'adresse est très clair, on voit les 5 commandes avec les 20 bits. Le dummy read est aussi très clair, mais la lecture du premier bit l'est beaucoup moins. En effet, on ne voit pas vraiment si ADD8 prend la valeur D0 sur le front descendant de ROMCLK, ou de M0... C'est une erreur que j'ai mis beaucoup de temps à remarquer et qui a sévèrement infligé les résultats de mon essai de cartouche base d'AVR. |