DIP-40 · 6C001E-7 · dessin, pas une photo
SinclairFerranti (para a Sinclair)
1981
ULA da Ferranti
Une puce « non engagée » dont Sinclair a fait le reste de l'ordinateur.
L'ULA (Uncommitted Logic Array) de Ferranti est une matrice de portes logiques câblées sur mesure lors de la dernière étape de fabrication. Dans le ZX81, elle remplaça 18 puces du ZX80 ; dans le Spectrum, elle génère l'image en couleur, lit le clavier, gère la cassette et le son, et décide quand le processeur peut utiliser la mémoire.
- 8
Une matrice non engagée
Une ULA est une puce fabriquée à l'avance avec des milliers de transistors encore sans connexions. Seules les dernières couches de métal, faites sur commande, relient ces transistors en portes logiques et en bascules, et c'est cela qui définit ce que fait la puce. C'est bien moins cher et bien plus rapide à développer qu'une puce conçue de zéro, qui ne se justifie qu'avec des volumes énormes.
Ferranti, de Manchester, la même entreprise qui avait achevé en 1951 le Ferranti Mark 1, fut au Royaume-Uni la pionnière de ces matrices en technologie bipolaire. Selon Chris Smith, qui a passé des années à étudier l'ULA du Spectrum, la 6C001E serait issue de la série 6000 des matrices Ferranti, après les séries 1000, 2000 et 5000 en logique CML. Ferranti fit aussi des ULA pour le BBC Micro et l'Acorn Electron.
En 1982, Ferranti alla jusqu'à vendre l'ULA Designer, une station de conception à 46 500 livres, en promettant environ 5 000 livres par projet et 1 à 2 livres par puce en grande quantité, contre 15 000 livres si la conception était faite par Ferranti elle-même. La division microélectronique fut vendue à Plessey en novembre 1987.
L'ULA du ZX81
Jim Westwood, ingénieur en chef de Sinclair, reçut la mission de réduire le coût du ZX80 et réunit 18 de ses puces dans une seule ULA. Le ZX81 se retrouva avec quatre puces principales : processeur, ULA, ROM et mémoire. Le manuel appelait l'ULA le « dogsbody » du système, l'homme à tout faire.
C'est elle qui génère l'horloge de 6,5 MHz (d'où sort celle de 3,25 MHz du processeur), synchronise l'image, lit le clavier, enregistre et lit la cassette, choisit quand la ROM et la RAM parlent et gère la synchronisation de tout. Comme la même broche sert à la vidéo et à la sortie cassette, pendant LOAD et SAVE les rayures en zigzag apparaissent à l'écran.
Il y eut trois versions principales : 2C158E, 2C184E et 2C210E. Les deux premières génèrent un signal vidéo sans le « back porch », un petit intervalle du signal que les téléviseurs utilisent comme référence, et sur beaucoup de téléviseurs couleur l'image devient très sombre, avec un blanc qui paraît gris. La 2C210E l'a déjà. Le Timex Sinclair 1000 utilise la 2C210E.
L'ULA du Spectrum
Richard Altwasser conçut le matériel du Spectrum et, avec lui, son ULA. Le mode graphique fut pensé pour tenir dans moins de 7 Ko : 6 144 octets pour les 256 × 192 pixels et 768 octets d'attributs, un par bloc de 8 × 8, soit 6 912 octets au total. Chaque attribut a 3 bits pour la couleur de l'encre, 3 pour celle du papier, un pour la luminosité et un pour le FLASH, qui intervertit les deux couleurs toutes les 0,64 seconde.
L'ULA lit le clavier et l'entrée cassette par le port 0xFE, et par ce même port elle reçoit la couleur de la bordure (bits 0 à 2), la sortie MIC (bit 3) et le beeper (bit 4). Pour nettoyer le bruit des cassettes, l'équipe plaça un trigger de Schmitt dans l'ULA.
L'horloge vient d'un quartz de 14 MHz : l'ULA le divise par 2 pour obtenir les 7 MHz des pixels et par 4 pour obtenir les 3,5 MHz du Z80. Et environ 50 fois par seconde, au début de chaque image, elle envoie au processeur l'interruption que la ROM utilise pour lire le clavier et compter le temps.
Mémoire contendue : c'est l'ULA qui commande
L'ULA et le processeur partagent les 16 premiers Ko de RAM (0x4000 à 0x7FFF), où se trouve l'écran, et la mémoire ne peut pas être lue par les deux en même temps. L'ULA a la priorité : pendant qu'elle dessine la partie utile de l'écran, elle retarde le Z80 qui veut accéder à cette zone, selon un motif de 6, 5, 4, 3, 2, 1, 0, 0 cycles. Dans la bordure et pendant les retours du faisceau, il n'y a pas de retard. Le code situé dans les 32 Ko du haut tourne toujours à pleine vitesse.
Sur le 48K, chaque ligne dure 224 cycles processeur et il y a 312 lignes, ce qui donne 69 888 cycles par image. Les effets qui changent les couleurs en milieu d'écran, la musique au beeper à plusieurs voix ou les échantillons de voix comptent ces cycles un par un. Et comme l'ULA relit les attributs à chaque ligne de pixels, certains programmes changent les attributs entre les lignes pour afficher plus de couleurs dans un bloc de 8 × 8.
En lisant un port où rien n'est branché, le processeur récupère l'octet que l'ULA est en train d'aller chercher à cet instant dans la mémoire vidéo, ce qu'on appelle le bus flottant. Des jeux comme Cobra, Short Circuit, Sidewize et Arkanoid s'en servaient pour savoir où en était le faisceau sur l'écran et dessiner sans scintillement.
Révisions : cafards et araignées
La première ULA du Spectrum, la 5C102E (cartes Issue 1 et certaines Issue 2), avait un bug dans la contention des ports qui rendait peu fiable la lecture du clavier depuis le code machine. La correction fut le « dead cockroach » (cafard mort) : une puce 74LS00 soudée à la main par-dessus la carte, reliée par des fils volants.
La 5C112E, des Issue 2, corrigea le bug mais se mit à retarder des ports qui n'en avaient pas besoin. Vint alors l'« araignée » (spider) : un transistor ZTX313 soudé par-dessus le processeur, avec une diode et une résistance. À partir de l'Issue 3, ce transistor fit partie de la carte, sous le nom TR6. ZTX était la gamme de transistors de Ferranti elle-même.
Suivit la famille 6C001E. La 6C001E-5 modifia la synchronisation pour fonctionner avec plus de téléviseurs, au prix d'un décalage de l'image d'un caractère vers la gauche, et le bit de l'entrée EAR restait flottant jusqu'à ce que l'ULA chauffe. La 6C001E-6 fut utilisée sur la plupart des Issue 3, et la 6C001E-7 fonctionne sur toutes les cartes du 48K ; les dernières portent déjà le logo de Plessey. Les ULA du ZX81 et du 48K ont 40 broches.
Du 128 à la fin de l'ULA, et les Timex
Le 128 et le +2 gris utilisent la 7K010E5, marquée plus tard Amstrad 40056 mais fonctionnellement identique, avec 48 broches et une sortie RGB. Un seul quartz de 17,7345 MHz donne, divisé par 5, les 3,5469 MHz du processeur et, divisé par 4, les 4,43 MHz de la couleur PAL. Chaque image compte désormais 228 × 311 = 70 908 cycles, et c'est pourquoi le 128 est un peu plus rapide que le 48K et que certaines astuces de synchronisation remarquent la différence.
À cause d'une erreur dans une puce logique de pagination, sur le 128 et le +2 gris les pages contendues sont la 1, la 3, la 5 et la 7, et non la 4, la 5, la 6 et la 7 comme l'indiquait la documentation. On le remarque, par exemple, dans la voix numérisée de Fantasy World Dizzy, qui sonne mal sur un 128 et bien sur un +2A.
Sur le +2A, le +2B et le +3, l'ULA disparaît : Amstrad mit à sa place un gate array, le 40077, dans un boîtier pour montage en surface, qui réunit les fonctions de l'ULA et de la logique environnante. La contention passe aux pages 4 à 7 et seulement lors des accès mémoire, et les jeux qui dépendaient du bus flottant peuvent se bloquer ou avancer par à-coups.
Les Timex prirent une autre voie : dans le TS2068, le rôle de l'ULA est tenu par le SCLD (Standard Cell Logic Device), une puce à cellules standard que Timex commanda à NCR, dans un boîtier de 68 broches. On le trouve aussi dans le TS1500 et dans les TC2048 et TC2068 fabriqués au Portugal, où il permet les modes 512 × 192 et la couleur en cellules de 8 × 1. Dans le TS2068, le Z80 tourne à 3,528 MHz, un quart de l'horloge de 14,112 MHz du SCLD.
Le saviez-vous…
On dit que seules 70 % des portes de l'ULA du ZX81 auraient dû être utilisées, mais Sinclair les utilisa toutes pour y loger plus de fonctions, et l'ordinateur chauffait. On raconte que certains le refroidissaient avec une brique de lait froid posée sur le boîtier.
Le nom « cafard mort » viendrait, dit-on, de l'allure du 74LS00 soudé par-dessus la carte, pattes et fils à l'air.
Chris Smith a décapsulé plusieurs ULA 6C001E-7 pour les photographier et a redessiné le circuit transistor par transistor : le schéma complet, sur papier, mesure 210 × 196 cm.
Dans l'ancienne Union soviétique, on fabriqua une puce compatible avec l'ULA du Spectrum, la T34VG1.
Sur le 48K, la bordure change de couleur par le même port que celui qui fait sonner le beeper, et c'est ce port qui peint les rayures colorées dans la bordure pendant le chargement d'une cassette.
L'ULA du 128 fut marquée Amstrad 40056 après le rachat de Sinclair, mais elle fonctionne exactement comme la 7K010E5 de Ferranti.
Le SCLD des Timex n'est pas une ULA : c'est une puce à cellules standard, une technique de semi-custom différente.
Attribute clash
Sur le Spectrum, l'ULA mémorise la couleur par case de 8×8 pixels : une seule couleur d'encre et une de papier par case. Quand le vaisseau jaune entre dans une case, tout ce qui y est dessiné change de couleur avec lui. Comparez avec une couleur par pixel.





