La technologie utilisée pour un TRS-80 MODEL I utilise des circuits logiques de technologie TTL dont l’alimentation est effectuée en 5V.  Je cherche à élaborer une carte qui soit la plus simple possible à réaliser et à moindre coût. Je décide donc d’utiliser des réseaux logiques programmables et plus précisément des CPLD.

Les puces récentes sont très puissantes, cependant les environnements et outils de développement sont souvent couteux et les tensions d’utilisation sont inférieures à 3,3V voir 1,8V ce qui imposerait l’utilisation de circuit supplémentaires pour les adapter au BUS d’extension du TRS-80.

Je dispose d’une carte ATF15xx-DK3-U que j’ai récupérée il y a très longtemps et dont je ne me suis jamais servi. Je regarde rapidement le type de circuit qu’elle est capable de programmer, il s’agit de la série ATF15xx de la marque ATMEL qui existe en trois versions : 32, 64 ou 128 macro cellules.

Je choisi la plus puissante ATF1508AS qui fonctionne en logique 5V et qui, par bonheur est toujours disponible à la vente. Afin d’être plus facilement exploitable j’opte pour un boitier PLCC avec les temps de propagation les plus courts disponibles 10ns.

J’utiliserai donc la référence suivante ATF1508AS-10JU84 en boitier PLCC avec 84 broches, parce je dispose déjà de l’environnement de développement, que les circuits sont toujours disponibles à un prix raisonnable, qu'il ne nécessite pas d’adaptation de niveau électrique et dont le boitier est simple à prototyper.

 

128 macro-cellules ! c’est beaucoup ?

Et est-ce suffisant ? Peut-on évaluer le nombre de cellules logiques qui pourraient être nécessaires pour la réalisation de ce projet ?

Interface avec le TRS-80
Il faut tout d’abord s’interfacer avec l'ordinateur. Une carte qui ne réalise qu'une sortie vidéo, ne nécessite pas d’autres lignes que celles disponibles sur le connecteur d’extension. En revanche si l’on souhaite, comme je l’ai fait, récupérer la vidéo texte générée nativement par le TRS-80, il nous faudra câbler des lignes supplémentaires à l’intérieur du TRS-80.

Sur le connecteur d’extension il faudra câbler au minimum le bus de données (8 lignes), le bus d’adresse (16 lignes), les signaux de signalisations : WR et RD pour la mémoire, IN et OUT pour la gestion des registres, INT et INTAK pour les interruptions et SYSRES pour l’initialisation.

  • Cela représente un minimum de 31 signaux pour l’interface avec le TRS-80.

Mémoire vidéo
Une image de 384x192 point représente 73728 pixels soit 9216 octets. Si l’on veut simplifier la gestion de la mémoire il convient donc d’attribuer 16ko par couleur. Le reste de la mémoire n’étant pas perdu mais utilisable pour stocker des formes ou des données par un programme.

Quatre plans couleur imposent donc une mémoire de 4 x16 = 64ko et si l’on souhaite ajouter une fonctionnalité permettant de modifier une image tout en affichant une autre, il faut doubler cette quantité et passer la mémoire vidéo à 128ko.

128ko de mémoire représente 8 lignes de données (un octet) et 17 lignes d’adresse auxquelles il faut ajouter les signaux de contrôle d’écriture WR, de sélection de boitier CS et de validation des données en sorties OE.

  • Il faudra donc, pour gérer la mémoire, pas moins de 28 autres lignes.

 

Signaux Vidéo
Pour générer la vidéo seront nécessaires : Une horloge, les couleurs, Rouge, Vert, Bleu et les signaux de synchro horizontale et verticale, soit 6 lignes supplémentaires.

Enfin pour numériser la vidéo native, il nous faudra les signaux de synchronisation horizontale et verticale, la vidéo elle même, l’horloge vidéo soit au minimum 4 signaux de plus.

  • Soit, pour la vidéo, un total de 10 lignes.

Au bilan, il faudra donc 31 +28 + 6 + 4 = 69 lignes d’entrée/sorties. Or si cela semble convenir sur un boitier TQFP100 qui dispose de 80 I/O, un boitier PLCC, tel que je l’ai choisi, ne dispose que de 64 signaux I/O ce qui est insuffisant. 

Pour résoudre ce problème, je suis contraint d’utiliser deux CPLD. Je décide d’affecter le premier à la gestion des adresses et le second à la gestion des données. Même si cela doit occasionner des difficultés de synchronisation ou de lignes supplémentaires entre les deux puces pour parvenir à les faire fonctionner ensemble. Au total je pourrai disposer de 128 lignes réparties sur les deux CPLD.

 

Génération d’un signal vidéo

En recherchant les caractéristiques d’un signal VGA, je suis tombé sur un site qui le décrit de manière simple C'est Ici.

Choix de l’horloge :
Sur un signal VGA, la fréquence du pixel est de 25,175MHz pour la résolution la plus basse et 60Hz de rafraichissement vertical. Je souhaite cependant n'afficher que seulement 384 pixels et non pas 640 en horizontal, ce qui doit pouvoir me permettre de réduire cette fréquence

La fréquence de base devient donc : 25,175 x 384 / 640=15,105 MHz je retiens donc une horloge de 15MHz (ce qui me donne une erreur de 0,7% ce qui est très acceptable).

  • J’opte pour un oscillateur à quartz d'une fréquence de 15MHz avec une tension de fonctionnement de 5V.

NOTA : Afficher mon image de 192 pixels au lieu de 480 lignes VGA laisserait apparaitre une image très petite et écrasée dans l’écran. Je décide donc de doubler l’affichage des lignes verticales afin de rendre les pixels plus « carrés » et formé une image moins aplatie.

 

Quelle type de mémoire utiliser ?
Il est hors de question de se tourner vers les mémoires modernes, SDRAM, DDR2,3,4,5 etc… d’une part le niveau de tension de fonctionnement de ces mémoire est incompatible, d’autre part il faudrait ajouter des circuits de contrôle complexes à mettre en œuvre. Pour parer au plus simple, je me tourne donc vers les SRAM, mémoires statiques qui ne nécessitent pas le rafraichissement des mémoires dynamiques et dont on trouve encore des références performantes.

Une mémoire de 128ko, mais à quel temps d’accès ?

Si l’on regarde les horloges mises en jeu, il y a 10,6445 MHz de la vidéo du TRS-80 et les 15MHhz de l’horloge VGA (adaptée à 384 points). Cela donne donc un temps maximum de 66ns. Il faut prendre cependant en considération qu’il y aura nécessairement des temps de latence supplémentaires indus par les CPLD et qu’il me faudra peut-être finalement adopter les 25,175MHz recommandés soit 39ns.

  • Pour plus de facilité et compte tenu des prix pratiqués je me fixe sur les SRAM les plus rapides que je trouve : IS61C1024-10N à 10ns

 

Un café et l’addition – Et c’est tout ?

Ben oui, on récapitule ?

  • 2 x ATF1508AS-10JU
  • 2 x IS61C1204-10N
  • 1 Oscillateur à quartz 15MHz 5V demi format.

De la connectique :

  • 1 connecteur « encartable » au pas de 2,54mm 40 broches (Cordon de liaison vers le bus d'extension)
  • 1 connecteur IDC 40 broches femelles à sertir (Cordon de liaison vers le bus d'extension)
  • 1 connecteur IDC 40 broches males à souder (Connecteur vers le bus d'extension du TRS-80)
  • 2 connecteurs IDC 10 broches femelles à sertir (cordon entrée vidéo TRS)
  • 2 connecteurs IDC 10 broches males à souder (Programmateur JTAG et entrée vidéo TRS)
  • 1 support DIL 8 broches (Oscillateur)
  • 2 supports DIL 32 broches (SRAM)
  • 2 supports PLCC 84 broches (CPLD)

Des composants passifs et de la filasse.

  • 1 condensateur 10µF
  • 11 condensateurs 100nF
  • 5 résistances 4,7kΩ
  • 6 résistances 560Ω
  • 3 résistances 100Ω