Hardware

    Le port cartouche ATARI

Auteur: Sébastien FAVARD
 

INTRODUCTION
 

Dans des moments aussi froids, où la neige tombe jour et nuit sous une tempête sibérienne et que seul reste allumé votre Atari pour vous réchauffer, je vais vous narrer quelques contes autour du port cartouche... sujet fort intéressant, et en même temps assez vieux, puisque beaucoup de personnes en ont déjà parlé. Cependant, quelques explications rapides seront nécessaires avant d'attaquer le vif du sujet, c'est-à-dire la réalisation d'une petite carte se connectant dessus, facilitant son utilisation. De ce fait, les bidouilleurs pourront plus rapidement, facilement et pour un coût moins élevé, créer des cartes d'extensions..... 
 

 Le port cartouche est assez spécial, puisqu'il n'a pas été conçu à la base pour ajouter d'autres cartes d'extensions, mais plutôt comme la philosophie Atari XL, d'origine console de jeux, afin de connecter des cartouches (il porte finalement assez bien son nom :-D ), et notamment la fameuse cartouche de diagnostic. Cependant, certains périphériques ont réussi à utiliser ce port, comme par exemple ST Replay, et profite pleinement de cet accès direct au bus du processeur. 
   Or, étant donné que c'est un port cartouche, l'accès est uniquement accessible en mode lecture, puisqu'il est destiné à connecter des mémoires mortes principalement. Reste à savoir, que ceci est très facilement détournable, et peut permettre de connecter diverses cartes d'entrées/sorties comme : analyseur 
logique, carte cible, interface de communication...
 
 

PRESENTATION DU PORT
 

  Le connecteur Atari permet d'enficher des circuits imprimés encartables, c'est-à-dire des cartes possédant une sorte de rangé de grosses pistes, afin de se glisser dans cet étrange connecteur. Il suffit de voir par exemple les cartouches de la Jaguar, ou ceux des XL, pour comprendre tout de suite la nature physique de ces cartes. Cependant, les concepteurs de chez Atari ont choisi un connecteur très rare, puisqu'il ne correspond pas aux différents standards actuels de pas de 2,54 mm ou 3,96 mm (séries 8607, 928, 908, 901...). De ce fait, il est assez difficile de créer une rallonge pour ce port cartouche (cf. ST Mag 121). Voilà donc pour la     présentation, passons aux choses sérieuses... Le port cartouche est un connecteur encartable de 40 contacts, offrant une large gamme de signaux : 

    - un bus de données sur 16 bits ; 
    - un bus d'adresses sur 16 bits (en comptant LDS/ et UDS/) ; 
    - deux CS/ (Chip Select) ; 
    - deux alimentations +5V ; 
    - trois masses. 
 



 


                                             Port cartouche de l'Atari vue de face.
 
               Voyons rapidement le brochage de ce port d'extension : (le 1er chiffre correspond au numéro de broche)
 
                                           dessus       dessous
                                              1 : +5V           2 : +5V
                                              3 : D14           4 : D15 
                                              5 : D12           6 : D13 
                                              7 : D10           8 : D11 
                                              9 : D8           10 : D9 
                                            11 : D6           12 : D7
                                            13 : D4           14 : D5
                                            15 : D2           16 : D3
                                            17 : D0           18 : D1
                                            19 : A13        20 : A15
                                            21 : A8          22 : A14
                                            23 : A7          24 : A9
                                            25 : A6          26 : A10
                                            27 : A5          28 : A12
                                            29 : A11        30 : A4
                                            31 : ROM3/  32 : A3
                                            33 : ROM4/  34 : A2
                                            35 : UDS/      36 : A1
                                            37 : LDS/      38 : GND
                                            39 : GND      40 : GND
 
Tout d'abord, pour les apprentis, je tiens à signaler que les signaux LDS/ (Low Data Strobe), et UDS/ (Upper Data Strobe) permettent de valider le type de données échangé sur le bus de données : 16 bits / 8 bits de poids faible (D7-D0) ou de poids fort (D15-D8). La barre "/" permet de souligner que le signal est actif au niveau bas (0 logique). Les deux CS/ sont en fait deux sorties de décodage (64 Ko d'espace chacun) permettant d'attaquer directement les entrées CE/ (Chip Enable) de ROM/EPROM... ROM3/ étant pour les adresses $FBXXXX et
ROM4/ pour $FAXXXX. Voilà, donc si vous avez suivi, une large part du travail a été faite, et donc il ne reste plus qu'à étudier ces différents
signaux...
 

PRINCIPES D'UTILISATION
 

  Puisque deux Chip Select sont générés, et que seul un accès en lecture est possible, sous peine de voir une magnifique erreur de bus survenir (oh ! quelles jolies bombes), il suffit d'utiliser une des deux sorties de décodage comme signal de validation de lecture, et l'autre comme signal pour l'écriture. De ce fait, vous aurez "une" zone adressable en lecture/écriture. Bien entendu, cela ne résout pas le problème d'erreur de bus, mais alors il suffit d'utiliser les 8 bits de poids faibles du bus d'adresses comme bus de données pour l'écriture et le tour est
joué ! Voyons un peu plus en détail ce principe très connu du monde atariste. 

    Imaginons que vous désirez envoyer une donnée DATA à un circuit situé sur votre carte connecté au port cartouche, il suffit de sélectionner le circuit (CS/ plus éventuellement un décodage partiel des fils d'adresses A15-A8), puis de connecter  les 8 fils d'adresses faibles à ce circuit, et d'offsetter (pas très français çà....) l'adresse du circuit suivant la donnée DATA à transmettre, soit :
@CIRCUIT + DATA = @ sur le bus ! 

exemple en ASM (plus explicite qu'en langage évolué) : 

    d0.b contient la donnée à écrire avec l'octet haut de d0.w à 0. 
    a0.l contient l'adresse du circuit définie par A23-A16 (a0.w à 0), 
    soit un CS/ (celui réservé pour l'écriture). 
    move.b (a0,d0), d1 (adressage indirecte indexé avec déplacement) 

    Cette instruction effectue donc une lecture (donc aucune erreur de bus) à l'adresse représentant le circuit, mais surtout en utilisant a0, soit l'adresse identifiant une pseudo écriture. De ce fait, d0 est placé sur les 8 bits de poids faible du bus d'adresses, puisque son octet fort (de d0.w) est nul. La donnée peut donc ensuite être traitée par ce circuit. Bien entendu, d1 ne sert à rien, et contiendra une valeur absolument inutile puisque ne correspondant à "rien", c'est pour cela que j'appellerai ce registre dummy. Cependant, j'en vois d'ici ouvrir de grands yeux, et se dire que cela doit poser un problème puisque le fil A0 du bus d'adresses de votre CPU préféré n'existe pas.... Que neni, il suffit simplement de prendre en compte UDS/ et LDS/, finalement tout simplement en utilisant UDS/ comme fil A0 !!! En effet, si vous accédez à une adresse paire, UDS/ = 0 et si vous accédez à une adresse impaire, UDS/ = 1... donc ceci est parfaitement compatible avec A0 ! Par contre, tout accès 16 bits ne pourra parfaitement remplir la tâche désirée, car UDS/ = 0 et LDS/ = 0, ce qui obligera physiquement votre donnée DATA à posséder le bit 0 à 0 !!!! même si vous écrivez 15 par exemple ! De toute façon, cela serait stupide,  puisque votre donnée est sur le bus d'adresses, qui se fiche pertinemment de connaître la taille utilisée du bus de données (qui dans ce cas n'est pas utilisé sauf pour remplir
dummy) !!! De part ce principe, il semble donc normal d'utiliser un mode 8 bits en écriture, je rappel, même si vous désirez utiliser les 16 bits du bus d'adresses pour véhiculer la donnée (mais alors, vous aurez un CS/ dédié à une seule adresse de circuit...). 

 
    Pour les plus astucieux d'entre vous, je me permet de souligner que lorsque vous accéder en écriture au port cartouche, un accès en lecture est en même temps effectué, ce qui peut vous permettre certaines astuces hardware, et surtout peut parfois vous faire gagner un temps précieux ! Par exemple, le kit de développement pour Jaguar de Roine Stenberg utilise un registre d'émission et un en réception, afin de permettre aux deux entités de communiquer. D'autre part lorsque l'on désire écrire ou lire une donnée, l'on peut s'informer de l'état du registre en question à l'aide d'un unique registre d'état. Il aurait été fort intéressant de pouvoir, lorsque l'on écrit une donnée dans le registre d'émission, de récupérer le registre d'état dans "dummy" afin que celui-ci puisse éventuellement avertir d'une donnée reçue, ou lue... (un accès mémoire 
morte de gagné). Enfin, ceci n'est qu'un exemple, mais aurait certainement pu augmenter le débit de la communication entre le fauve et le micro.
D'ailleurs pour terminer sur cet apartheid, Roine n'a pas fait attention à l'astuce du "fil A0", et a utilisé le bus A8->1 comme bus de données d'écriture ! Vous vous rendez bien compte que cela alourdi considérablement le programme puisque l'on doit formater la donnée, c'est-à-dire effectuer un décalage à gauche de d0.w avant de pouvoir faire le move ! Enfin je vais arrêter ici mes commentaires à son sujet, car je trouve son travail pour la Jaguar formidable : encore bravo pour ce kit de développement peu coûteux (par rapport au kit officiel d'Atari) et rapide (accès ROM) ! 
 
 

LA CARTE I/O 8 BITS
 


En fait, elle ne fait pratiquement rien, mais permet de plus facilement connecter des cartes à votre Atari, puisqu'elle exerce une sortie sur DB25. Le principe étant posé, vous pouvez même créer d'autres cartes, en par exemple, utilisant le bus 16 bits en lecture, ajouter d'autres fils d'adresses... Schéma de principe de la liaison.

 

    
 

 

Voyons la liste du matériel nécessaire : 

    - petite perceuse ; 
    - fer à souder + étain ; 
    - cutter (travail éventuel du capot) ; 
    - petite scie à métaux (découpe de la carte) ; 
    - un multimètre éventuel pour les tests. 

 
Voilà, maintenant, il ne reste plus qu'à présenter la carte. 
 



Schéma de la carte d'entrées/sorties.


 




Celle-ci possède un bus de données d'entrée/sortie sur 8 bits, deux fils d'adresses et deux signaux de validation de lecture / écriture (cf. les CS/ du port cartouche). D'autre part, une tension d'alimentation +5V est prétiré et des masses sont proposées un peu partout... En effet, cela permet de posséder une meilleure isolation entre les signaux, si vous décidez, par exemple, de mettre un câble d'1m80 entre votre ordinateur et votre carte électronique ! Ne rigolez pas, mais le kit de Roine par exemple ne permet pas ce genre de distance, et cela pose d'énormes
problèmes, notamment si votre moineau est en tour !!! Afin de mettre en analogie avec la description précédente autour du port cartouche, ici il est impossible d'effectuer un accès lecture/écriture simultané puisque le bus de données sera utilisé par DATA et que les sorties du buffer de lecture seront en haute impédance (signal ROM3/ = écriture inactive). Cependant, cela n'est pas réellement une grande contrainte... 
 

SPECIFICATIONS FONCTIONELLES
 



Brochage du connecteur DB25.


 


 
    Remarquons tout de suite que les signaux Read/ et Write/ ne sont finalement que les signaux ROM3/ et ROM4/ (merci Atari !) et que les signaux d'adresses A1->0 ne sont que les adresses A15->14. Cette façon de renommer les signaux à ce niveau là est important du point de vue conception, puisqu'à ce moment précis, vous ne vous souciez plus des signaux du port cartouche, mais portez votre attention sur ces nouveaux signaux qui permettent de concevoir facilement une liaison avec une  autre carte : bus de données 8 bits, 2 signaux de contrôle et 2 d'adresses. That's all ! 

 
    Pour terminer sur les caractéristiques de la carte, le bus de données étant bufferisé, la sortance est élevée, ce qui permet de connecter de nombreux circuits d'une carte d'extension à ce bus de données. D'autre part, puisque 2 fils d'adresses sont proposés, vous pouvez avoir 4 adresses en lecture, et 4 autres en écriture, ce qui n'est pas si mal que çà mais peut sembler juste pour certaines applications spécifiques. Il suffira alors, de couper un lien entre une patte du DB25 à la masse et d'y ramener un autre fil d'adresse du port cartouche parmi A13-A8.
Pour terminer, cette carte, en respect avec toutes les cartes à base de 68000, utilise le poids faible du bus de données du processeur, et donc oblige les adresses des circuits de la carte électronique (en lecture uniquement) à être aux adresses impaires ! Je rappel, qu'en accès "écriture", vous utilisez la partie basse du bus d'adresse pour écrire, ce qui implique que votre accès peut alors être à une adresse paire où impaire en
fonction du bit 0 de votre donnée. D'autre part, aucune protection particulière n'a été ajouté par rapport au connecteur encartable de l'Atari, ceci à cause du manque de place, car j'ai voulu prévoir la carte pour que celle-ci puisse se loger dans des capots pour câbles (les plus courants et les moins chers), ce qui fait que ceux qui désirent créer une autre carte, plus importante, peuvent ajouter ce que bon leur semble
comme diode zener contre écrêtage de la tension d'alimentation, pont de diodes éventuel, capacités de couplage, terminaisons parallèles etc. 
 

CIRCUIT IMPRIME
 



Différents types de capots.


 


Maintenant terminons sur la liste des composants nécessaires pour réaliser le montage : 

    - un DB25 non coudé (fiche mâle conseillé pour laisser la fiche femelle à la carte d'extension) (15 Frs) ; 
    - deux 74 (ou 54)xxx245 (3 Frs pièce) compatible TTL (ex: 74HCT245, 74ALS245, 54HCT245...) ; 
    - deux capacités de 100 nF (nano farad) environ (0.10 Frs pièce) ; 
    - un capot plastique pour Sub-D (25 contacts) : DB25 - DB25 (le mieux) ou DB25 - câble (15 Frs). 
 

Soit un coût global de 40 Frs, sans compter le tirage de la carte. Essayez de le faire sur un petit morceau d'époxy (plaque), car si vous utilisez une carte format simple Europe par exemple (l'on peut mettre 6 cartes I/O dessus !), le coût sera d'environ 60 Frs, donc d'un rapport de 10 Frs par carte... si vous êtes en groupe ;-). Lorsque vous placerez la carte à l'intérieur du capot, faites suffisamment ressortir la partie connectique encartable afin que vous puissiez bien l'enficher dans le connecteur port cartouche ! Sinon, lorsque vous essaierez de fixer cette "clef" sur votre port d'extension, si vous ne sentez pas beaucoup de résistance lorsque vous l'enficher, mettez de la soudure sur la partie connectique de la carte afin que celle-ci soit "écrasée" (pas trop tout de même) à l'intérieur du connecteur Atari. Ceci évitera une éventuelle mobilité accidentelle de la carte et donc de causer un défaut durant son utilisation voire même une erreur de bus. En fait, cela dépend toujours du type de plaque que vous utiliserez pour votre tirage, puisque les épaisseurs sont variables. 
 



                                           Implantations des composants.


 



Pour en revenir au circuit imprimé, afin de ne pas se tromper de sens pour les circuits intégrés, il suffit de les souder de façon à ce que leur patte 1 (haut à gauche des circuits) soit sur la pastille en forme carré ! Pour ce qui est du DB25, enfichez la carte I/O entre les broches du connecteur, puis souder les. Si la taille de la carte est un peu juste, vous pouvez mettre des fils afin d'augmenter la distance. De plus, deux vias (percées) proche de U2 devront être percées comme pour les pastilles des composants. Alors, il vous faudra mettre un morceau de patte de condensateurs de votre carte, afin de faire la liaison entre les deux faces (exactement le même principe que pour les composants, sauf que vous devez mettre une patte d'un circuit virtuel en fait). D'une fàçon similaire, mettez un strap (patte de résistance ou condensateur) entre la patte 1 du buffer de droite (U1) et le via juste en dessous près du connecteur cartouche. Bien entendu, vous serez obliger de souder l'extrémité du strap sur la patte de votre circuit. Pour terminer, à gauche, près du connecteur DB25, se situent 10 autres vias nécessaires pour relier les masses entre elles, donc utilisez de même 10 autres morceaux de pattes de condensateurs, résistances (ou autres)... Ceci vous évite de placer des fils entre les broches reliées à la masse et permet d'éventuelles modifications comme ajout de fils d'adresses... 
 
 


Les deux faces du circuit imprimé (Face A pour coté composant : dessus de la carte).


 


Attention, cette image n'est forcément pas à l'échelle réelle, ce qui vous oblige soit à refaire le routag( solution pénible), ou alors utilisez un bon logiciel de dessin, afin de remettre cette image à la taille réelle (pour l'impression). Il suffit de considérer comme point de repère des pastilles en rangées verticalles. Alors, débrouillez vous pour que la distance entre deux centres de pastilles verticales soit de 2.54mm ! Les pastilles, sur le dessin sont réalisées par des "carrés" de 3*3 pixels noirs, ce qui vous facilitera la tâche... 
    D'autre part, vous pouvez toujours m'écrire afin que je vous envoye une photocopie du routage,  favard@linux.utc.fr, ou vous pouvez toujours downloader les fichiers data base d'Orcad (sous PC) et d'imprimer donc la carte à l'aide de ces fichiers report :  BOARD.ZIP

 
    Pour terminer, il vous faudra utiliser un calque afin de copier les typons (vous savez, vous le faisiez souvent en maternelle de recopier des dessins...) avec un rotring par exemple. Vous pourrez donc éventuellement modifier cette carte si vous désirez enlever/ajouter des choses pas trop grosse quand même :-). Finalement, il ne restera plus qu'à voir avec un magasin d'électronique pour le tirage de la carte à partir de ces typons. Surtout, N'INVERSEZ PAS LES FACES si vous devez faire un montage à partir d'une plaque !!! 

 

Pour toutes questions, vous pouvez me contacter à mon adresse e-mail, favard@linux.utc.fr