Ajout de petite carte avec un haut-parleur pour produire des tonalités en commutant la sortie Q du MCU.
Comme on le voie sur le schéma du côté droit, j'ai ajouté un haut-parleur contrôlé par un transistor MOSFET 2N7000, lui-même étant contrôlé par la sortie Q du MCU. Comme il n'y avait pas d'espace sur la carte du elf+ j'ai fait le montage sur une petite carte qui se branche sur la carte mère du elf+.
Mine de rien ce petit ordinateur simple a 2 périphériques d'entré et 2 de sortie. Examinons le schéma.
L'affichage hexadécimal ne sert pas seulement lors de la programmation il peut aussi servir à l'intérieur d'un programme pour afficher une donnée. Sur le schéma en haut à gauche se trouve l'affichage hexadécimal constitué de 2 digits IC1 et IC4. Le bus de donnée D7-D0 est connecté à l'affichage via des CD4050 qui servent de tampons. Le signal STROBE sert à lire la donnée de bus dans l'affichage. En regardant la 2ième partie du schéma on voie que le signal STROBE provient de la porte NAND à droite dont une entrée est étiquettée N2/LOAD. La commande OUT place la valeur pointée par le registre R2 sur le bus de donné donc c'est cette valeur qui est affichée. Pour afficher l'état des commutateurs D7-D0 le programme doit exécuter la commande IN 4 activant les transmission gatesCD4016 qui a pour effet de connecter les commutateurs au bus de données. Cette valeur est enregistrée dans la mémoire RAM à l'adresse pointée par R2, M(R2) <- bus . Donc il suffit de faire IN 4 suivit de OUT 4 pour afficher l'état des commutateurs en hexadécimal. C'est ce que fait le petit programme suivant:
0 F8 7F LDI 7F ; D <- 7F
2 B2 PHI R2.1 ; R2.1 <- D
3 F8 FF LDI FF ; D <- FF
5 A2 PLO R2 ; R2.0 <- D R2 pointeur vers $7FFF
6 E2 SEX R2 ; R2 est le pointeur de données
LOOP:
7 6C IN 4 ; D <- DATA, M(RX) <- DATA , lecture des switch data
8 64 OUT 4 ; DISPLAY <- M(RX) , affichage de la valeur
9 22 DEC R2 ; R2 <- R2-1 , OUT incrémente R2 donc on
; le décrémente pour qu'il pointe vers $7FFF
A 30 07 BR LOOP ; saut vers boucle
Les commutateurs ne servent pas seulement lors de la programmation ils peuvent aussi être lu par un programme.
L'état du bouton IN peut aussi être lu par un programme par l'instruction IN 4 et la sortie Q du micropresseur est une sortie 1 bit qui peut-être contrôllée par un programme avec les instructions SEQ et RESQ.
vidéo de démonstration
Dans le vidéo suivant la valeur binaire des commutateurs est lue par le programme et affichée en hexadécimal.
En 1976 RCA en mis en marché le premier microprocesseur en technologie CMOS. À cette époque les micropresseurs étaient en technologie NMOS. Mais maintenant c'est la technologie CMOS qui est utilisée pour les circuits intégrés logiques. L'avantage de cette technologie est la réduction de consommation électrique et une meilleure immunité aux interférences (noise margin). Ce microprocesseur de RCA s'appellait CDP1802. Il ne s'agissait pas seulement d'un microprocesseur mais d'une famille de composants appellée COSMAC (Complementary Symmetry Monolithic Array Computer). À cause de sa faible consommation électrique et sa meilleure immunité aux interférences la NASA l'a utilisé dans plusieurs sondes spatiales dont la sonde Galileo lancée en 1989 vers Jupiter.
architecture
Il n'y a pas que la technologie utilisée qui était différence des autres microproceseurs des années 197x. Sont architecture interne aussi. Il possédait 16 registres interne de 16 bits. Il n'y avait pas de compteur ordinal, ni de pointeur de pile dédiés. N'importe quel des 16 registres pouvait être désigné comme compteur ordinal. Au lieu d'un pointeur de pile il y avait un registre appelé data pointer qui pouvait-être utilisé à cet effet. Comme pour le compteur ordinal, le pointeur de donnée pouvait-être n'importe quel des 16 registres. Deux registres de 4 bits chacun permettaient de choisir lequel des 16 registres était utilisé. Le registre P sélectionnait le compteur ordinal et le registre X sélectionnait le pointeur de donnée.
Autre particularité du CDP1802 est qu'il y avait un mécanisme DMA (Direct Memory Access) intégré au MCU, deux broches sur le boitier du MCU DMA IN et DMA OUT permettaient un accès direct à la mémoire en interrompant l'exécution du programme. Le registre R0 était utilisé comme pointeur pour ces opérations. L'implication de cette fonctionalité est qu'il n'est pas nécessaire d'avoir un chargeur de programme en ROM. Lorsque les lignes CLEAR et WAIT sont à zéro le MCU se met en pause pour attendre une opération de DMA IN.
COSMAC ELF
En 1976 Popular electronics publiait dans son édition du mois d'août un projet de fabrication d'un petit ordinateur utilisant le CDP1802, bâptisé COSMAC ELF.
Ce petit ordinateur n'avait pas de mémoire ROM contenant un chargeur ou moniteur. Il ne possédait que 256 octets de mémoire RAM. L'utilisateur devait entrer son programme avec 8 switches de data en bas. Puisqu'il n'y avait pas de mémoire persistante le programme était perdu lorsque l'ordinateur était éteint et devait être rechargé à la main à chaque fois. Plutôt malcomode mais il s'agissait simplement d'un projet peu couteux permettant de se familiariser avec cette nouvelle techonologie des microprocesseurs.
COSMAC ELF+
À partir de l'article de Popular electronics j'ai fabriqué ma propre version du COSMAC ELF avec quelques modifications. Mon COSMAC ELF+ possède une mémoire EEPROM AT28C64B de 8 KO ainsi qu'une mémoire RAM AS6C62256 de 32 KO. J'ai choisi cette mémoire EEPROM parce qu'elle peut-être programmée octet par octet en circuit et ainsi mon programme n'est pas perdu lorsque je ferme le COSMAC ELF+