Avez-vous déjà essayé de manger un jelly bean ou une chips ? C'est presque impossible. Certains d'entre nous ont le même problème avec les projets matériels. Tout a commencé lorsque j'ai écrit sur les anciennes puces Bitslice que les gens utilisaient pour construire des ordinateurs avant qu'il soit possible d'obtenir facilement un processeur complet sur une puce. Bitslice est essentiellement constitué de blocs Lego qui construisent des processeurs. J'ai toujours voulu jouer avec la technologie, alors quand j'ai écrit cet article, j'ai regardé sur eBay pour voir si je pouvais trouver des restes de cette technologie des années 1970. Il s'avère que les chips sont faciles à trouver, mais j'ai trouvé quelque chose d'encore mieux. Une carte d'évaluation AM2900 en parfait état. Ceux-ci ne sont pas faciles à trouver, donc les chances que vous puissiez en essayer un vous-même sont assez faibles. Mais je vais résoudre ce problème, virtuellement.
Ce n'était que la deuxième chips. La programmation de la carte, comme vous pouvez le voir dans la vidéo ci-dessous, est fastidieuse, avec de nombreux basculements de commutateurs binaires. Pour simplifier les choses, j'ai pris une autre chips : une feuille Google qui génère le binaire à partir d'un langage quasi-assembleur. Cela aurait dû suffire, mais j'ai dû sortir un autre jeton du sac. J'ai étendu la feuille de calcul pour émuler réellement le système. C'est un hack terrible, et les performances de Google Sheets pour ce genre de choses pourraient être meilleures. Mais ça marche.
Si vous l'avez manqué, j'ai laissé de nombreuses notes sur Hackaday.io à propos du projet. En particulier, j'ai créé un programme de microcode qui prend deux chiffres décimaux codés en binaire sur quatre bits et calcule le nombre approprié sur 8 bits. Ce n'est pas grand-chose, mais la carte ne dispose que de 16 instructions de microcode, vous devez donc tempérer vos attentes. Si vous souhaitez un aperçu de l’ensemble de la technologie, nous l’avons également fait.
Point de départ
![](https://10-raisons.fr/wp-content/uploads/2024/04/1713815733_617_Trancher-et-decouper-les-bits-conception-de-processeur-a-l39ancienne.png)
L'idée du simulateur m'est venue lorsque je construisais l'assembleur. J'ai envisagé d'écrire un programme autonome, mais je voulais limiter ma consommation de chips, donc le conserver dans la feuille de calcul me semblait une bonne idée.
Était-ce? Dur à dire. Google Sheets propose des macros qui sont uniquement du Javascript. Cependant, les macros sont quelque peu lentes et il est difficile de les attacher aux éléments de l'interface utilisateur. Il y avait de nombreuses façons de le faire, mais j’ai choisi la voie de la moindre résistance.
Stratégie
Pour le meilleur ou pour le pire, j'ai essayé de minimiser la quantité de scripts. Tout le travail réel s'effectue dans l'onglet Sim de la feuille de calcul, et seuls quelques éléments clés sont inclus dans les macros ci-jointes. Au lieu de cela, les cellules profitent du fonctionnement de l’AM2900. Par exemple, certains bits des instructions du microcode représentent comment trouver l’adresse suivante. Au lieu de calculer cela avec du code, il existe un tableau qui calcule l'adresse de chaque succursale possible.
Par exemple, la branche de type zéro va à l'adresse suivante lorsque le résultat courant est zéro ou à l'adresse codée dans l'instruction si le résultat n'est pas zéro. Si le type de branche est un, il y a toujours un saut vers l'adresse codée en dur, tandis qu'un type de branche de deux prend toujours l'instruction suivante. Ainsi, le tableau associé calcule toujours tous les résultats possibles (voir cellules O1 à P18). Ensuite, la cellule P18 utilise VLOOKUP
pour choisir la bonne ligne dans le tableau (qui comporte 16 lignes).
Chaque partie du décodage des instructions fonctionne de cette façon. La seule complication est que les instructions opèrent sur le résultat actuel, ce qui est mentionné dans le dernier post. En d’autres termes, considérons une instruction qui dit (en anglais) : Si le résultat est zéro, allez à l’emplacement 9 ; ajoutez 1 au registre B. Vous pourriez supposer que le saut se produira si B+1 donne zéro. Mais ce n'est pas comme ça que ça marche. Au lieu de cela, le processeur ajoute B et 1. Ensuite, il passe à l'emplacement 9 si l'état était zéro avant l'opération d'addition.
Cela signifie que la feuille de calcul calcule tout à tout moment. Les macros ressemblent presque à des impulsions d’horloge. Au lieu de bloquer les tongs, ils copient les choses de là où elles sont calculées jusqu'à là où elles sont censées aller.
Macro
La principale logique de simulation réside dans le stepengine
macro. Il calcule l'adresse suivante et définit le verrou d'état, si nécessaire. Ensuite, il récupère le résultat de l’opération en cours et le place dans la bonne destination. La dernière partie de la macro met à jour l'emplacement suivant, ce qui peut nécessiter une manipulation de la pile du processeur. Toutes ces choses auraient été difficiles à faire dans une logique de feuille de calcul.
Les autres macros sont essentiellement des wrappers stepengine
. Le Exec
la macro exécute une instruction sans avancer (comme si vous mettiez la vraie carte en mode chargement). Le Step
la macro peut éventuellement être effectuée en une seule étape, ou elle peut s'exécuter sur place comme Exec
. Le Run
la macro effectue la véritable exécution et vérifie également les points d'arrêt. Il y a aussi un Reset
macro pour tout mettre dans un état connu.
Usage
![](https://10-raisons.fr/wp-content/uploads/2024/05/Une-tranche-de-simulation-style-Google-Sheets.png)
Vous pouvez appeler les macros directement, mais ce n'est pas très convivial. Au lieu de cela, l'onglet Sim comporte trois boutons graphiques pour l'exécution, l'étape et la réinitialisation. Chaque commande a des options. Par exemple, sous Exécuter, vous pouvez définir une adresse hexadécimale pour interrompre l'exécution. Sous Étape, vous pouvez décider si l'étape doit faire avancer ou non le compteur du programme. Le bouton de réinitialisation vous permet d'effacer les registres.
N'entrez pas votre programme dans l'onglet Sim. Utilisez l'onglet Principal comme auparavant. Vous pouvez également accéder à Extensions | Menu Macros pour charger l’une des démos prédéfinies. La démo 1 est le programme BCD du dernier message. Les autres exemples sont ceux fournis avec le manuel de la vraie carte. Si vous voulez vraiment apprendre comment fonctionne la chose, vous pourriez faire pire que de parcourir le manuel et d'essayer chaque exemple. N'oubliez pas que le manuel numérisé comporte au moins deux fautes de frappe : la figure 7 est fausse et l'exemple 7 comporte une erreur (cette erreur a été corrigée dans les manuels ultérieurs et également dans la copie du simulateur). Au lieu de la figure 7, utilisez la figure 3 ou récupérez une figure corrigée sur Hackaday.io.
Pourquoi apprendre à utiliser la carte d'évaluation AM2900 ? Cela me bat, mais je l'ai quand même fait, et maintenant vous pouvez le faire sans dépenser l'argent que j'ai dépensé pour un matériel exotique. J'aimerais dire que cela pourrait vous aider à comprendre la conception moderne des processeurs, mais ce ne serait pas très juste. Je suppose que cela aide un peu, mais les processeurs modernes ont autant en commun avec cette conception qu'une locomotive à vapeur en a avec un avion à réaction.
Si l'idée de construire un processeur à partir de modules vous séduit, consultez DDL-4. Si c'est trop facile pour vous, prenez votre sac de 2 000 transistors et découvrez cette version. Je suis en train de sceller mon sac de chips maintenant. Vraiment.