|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Note : traduction par David Brunet. Droit d'auteur et distribution Ce projet est librement distribuable. Vous pouvez m'envoyer ce que vous voulez, juste pour me dire si cela vous a plu ou non. L'histoire Il y a quelques mois, j'ai réfléchi à la limite des 8 Mo de mémoire de la carte accélératrice Big Bang de Hardital pour Amiga 500 (et sa variante Super Big Bang pour A2000). J'ai trouvé cela inhabituel car la quantité maximale de mémoire adressable est généralement de 4 Mo. J'ai jeté un coup d'oeil à la puce du contrôleur DRAM de cette carte. C'est un circuit DP8421A produit par National Semiconductor. J'ai trouvé la page Internet de National Semiconductor répertoriée dans les archives de Chip Directory. Après quelques recherches, j'ai pu mettre la main sur les fiches techniques de cette puce. La lecture de ces documents fut suffisante pour confirmer mon hypothèse. Le DP8421 peut contrôler jusqu'à 16 Mo de mémoire avec l'utilisation de puces de 1 Mo. Je savais à présent que cette extension mémoire pouvait être réalisée, mais la question était : serait-ce facile ? Aujourd'hui, je peux répondre "oui, assez facilement", mais j'ai rencontré de nombreux problèmes au cours de son projet et de sa réalisation. En tout cas, j'ai finalisé le projet ! Et cela ne coûte pas cher ! Limites J'ai fabriqué cette extension mémoire avec deux barrettes SIMM EDO de 8 Mo. Si vous choisissez d'utiliser des barrettes SIMM, il est impératif qu'elles soient assemblées avec des puces de 1 Mo. Actuellement, l'une de mes cartes SIMM utilise 16 puces avec une densité de 1Mbx4, l'autre utilise 4 puces avec une densité de 1Mbx16. Pour vérifier si le module SIMM est fonctionnel, vous devez vous assurer que la broche 19 n'est pas utilisée (connectée à aucune des puces du module SIMM). J'ai dû créer un adaptateur ZIP vers SIMM pour connecter les deux barrettes SIMM sur les emplacements ZIP de la carte Big Bang. J'ai réalisé les connexions en utilisant des fils fins. Essayez de garder ces fils aussi courts que possible, car ils introduisent des bruits et des délais, entraînant des lectures et écritures erronées à partir de/vers la mémoire. Les connexions /RAS semblent être les plus délicates. Ce n'est que lorsque j'ai soudé ces fils directement sur l'emplacement du DP8421 (au lieu des bancs ZIP) que je me suis débarrassé de toutes les erreurs de lecture/écriture. C'est probablement à cause des bruits de cet adaptateur que le surcadençage de la carte à 33 MHz provoque la réapparition des erreurs de lecture/écriture en mémoire. Il y a quelque temps, j'ai repassé l'horloge de ma carte à 25 MHz, car j'ai découvert que mon processeur et mon FPU fonctionnaient à l'origine à 20 MHz, et qu'ils étaient donc déjà surcadencés à 25 MHz par Hardital lui-même. Les 16 Mo de mémoire ne se configurent pas automatiquement. Ceci est dû à la limite de 8 Mo des Amiga 500/2000 en matière d'espace d'adresse AutoConfig. Par conséquent, vous devez ajouter de la mémoire lors du démarrage à l'aide d'une commande comme "Addmem". De plus, les 16 Mo de mémoire sont formés de deux blocs de 8 Mo chacun. Il est également possible que vous ne puissiez plus basculer vers le mode 68000, car il pourrait y avoir un conflit entre les deux barrettes SIMM, mais je n'ai pas testé car je n'ai aujourd'hui plus de raison de dégrader mon système. J'utilise quelques portes CMOS pour cette extension. Elles introduisent un délai de l'ordre de 20 à 40 ns. J'ai également développé quelques circuits logiques alternatifs (voir chapitre annexe en fin d'article) basés sur des portes logiques ; ils peuvent être plus rapides que ma première solution si vous les fabriquez avec des puces TTL. Réalisation théorique Pour comprendre le fonctionnement de ma bidouille, vous devez connaître la signification de certains signaux.
Pour fonctionner correctement, le DP8421 doit être programmé. La programmation est faite en lisant l'état de certains signaux (B0, B1...) au moment où le signal /ML est activé. Normalement, le composant IC32 (une puce programmable personnalisée) gère les valeurs B0 et B1 en mode normal et en mode programme. Lorsque /ML est activé, les valeurs correctes sont envoyées au DP8421 pour le programmer. Lorsque /ML est annulé, le signal B1 est toujours égal à 0 et seul B0 est utilisé pour sélectionner l'une des deux banques de mémoire présentes sur la carte Big Bang. Mon idée est simplement d'utiliser le signal B1 également en mode normal, pour pouvoir adresser quatre banques au lieu de deux. Pour faire cela, j'ai utilisé deux commutateurs électroniques, appelés "portes de transmission", connectés comme indiqué ci-dessous. ![]() Lorsque /ML est activé, la sortie d'IC32 est envoyée normalement au DP8421. Le contrôleur DRAM est donc correctement programmé. Lorsque /ML est annulé, la ligne d'adresse A26 est connectée au DP8421. Lorsque la valeur de A26 est 0, les deux banques de mémoire habituelles sont adressées via /RAS0 et /RAS1. Lorsque sa valeur est 1, les deux nouvelles banques de mémoire sont adressées via /RAS2 et /RAS3. Si vous n'êtes pas familier avec la notation hexadécimale, vous pouvez lire cette petite explication. Il est important de configurer les deux blocs de mémoire avec des adresses qui diffèrent par le bit 26. Par exemple, les deux banques de mémoire habituelles sont adressées dans la plage $1200000-$19FFFFF (0000 0001 xxxx xxxx xxxx xxxx xxxx xxxx). Les deux nouvelles banques, à la place, sont adressées dans la plage $5200000-$59FFFFF (0000 0101 xxxx xxxx xxxx xxxx xxxx xxxx). Comme vous pouvez le constater, les deux adresses diffèrent par la valeur du bit A26. Par exemple, si vous exécutez la commande "addmem 1200000 19FFFFF" puis "addmem 3200000 39FFFFF" (0000 0011 xxxx xxxx xxxx xxxx xxxx xxxx), vous configurerez deux fois la même banque de mémoire, car les deux adresses ont la même valeur dans le bit A26 ! Vous pouvez choisir d'utiliser une ligne d'adresse différente, puis configurer la mémoire dans différentes plages, mais rappelez-vous que le bit 24 est toujours égal à 1 en mode non AutoConfig. Les autres bits les plus significatifs sont inutilisés. Ainsi, avec mon exemple de connexion, je peux configurer le deuxième bloc de la plage $D200000-$D9FFFFF (0000 1101 xxxx xxxx xxxx xxxx xxxx xxxx). Réalisation pratique Les choses dont vous avez besoin pour construire cette extension sont les suivantes :
Ensuite, vous devez connecter les puces CMOS. Les connexions sont montrées plus haut et résumées dans les tableaux suivants :
Enfin, j'ai construit un adaptateur SIMM vers ZIP, mais si vous possédez d'autres types de puces mémoire (ZIP, DIP, SIMM 30 broches...), vous pouvez construire votre propre adaptateur. Un adaptateur SIMM vers ZIP peut être construit selon le schéma ci-dessous. Notez que plusieurs broches des deux SIMM peuvent être connectées ensemble, mais certaines ont une connexion exclusive. Les dénominations M1....M16 se rapportent aux emplacements ZIP de la carte Big Bang. Les dénominations de la Super Big Bang sont différentes. Il semble que les correspondances soient celles contenues dans le tableau suivant :
Correspondance des dénominations des emplacements ZIP
Adaptateur SIMM vers ZIP
J'ai également connecté une dizaine de condensateurs de dérivation 10 microFarad entre les entrées +5V et GND à proximité des barrettes SIMM, afin d'éviter une chute de tension pendant les transitions. Mais peut-être ne sont-ils pas strictement nécessaires, car il existe déjà des condensateurs de dérivation sur les barrettes SIMM et près des emplacements ZIP. Vérifiez chaque fois si la connexion n'est pas défectueuse et qu'il n'y a pas de court-circuit ! Vous devez maintenant régler les commutateurs et cavaliers de la carte Big Bang sur 8 Mo de mémoire, en mode non automatique, comme expliqué dans le manuel. Utilisez ensuite la commande "addmem" (fournie avec la carte) pour configurer votre mémoire dans les plages d'adresses appropriées. Notes finales Voici mon estimation des coûts de cette bidouille :
Salutations à ma compagnie (surtout les filles ;)), aux utilisateurs Amiga à Padoue et à Vérone (en Italie, dans le monde...), à mon ami canadien Rino, à ma famille et à tous ceux qui me connaissent. Annexe : les circuits logiques alternatifs Le premier circuit utilise des portes logiques, le second utilise un multiplexeur. Ces solutions peuvent être plus rapides que celle que j'utilise actuellement, mais je ne les ai pas testées. Théorie Lorsque /ML=0, la sortie doit être égale à B1. Lorsque /ML=1, le résultat doit être égal à A26. La table de vérité est la suivante : ![]() Nous suivons maintenant l'approche standard, basée sur la table de Karnaugh, qui donne un réseau logique à "trois niveaux". Notre table Karnaugh est la suivante : ![]() Il est clair que nous avons besoin d'une porte NOT, de trois portes AND avec deux entrées chacune et d'une porte OR avec trois entrées. La connexion est indiquée ci-dessous. ![]() Comme expliqué par la table de vérité, une autre solution évidente peut être obtenue en utilisant un multiplexeur 2/1, simplement connecté comme indiqué dans le schéma suivant : ![]() Réalisation pratique Vous pouvez utiliser des puces TTL, éventuellement de la famille logique FAST (codes 74Fxx). Quoi qu'il en soit, votre objectif devrait être de minimiser les délais. Je ne connais pas le brochage de ces puces, donc je ne peux pas vous expliquer comment établir les véritables connexions.
|