Dans de nombreux cas, le choix est assez arbitraire ou basé sur «où cela convient le mieux» à mesure que les ISA se développent avec le temps. Cependant, le MOS 6502 est un merveilleux exemple de puce dont la conception ISA a été fortement influencée par la tentative de faire sortir autant que possible des transistors limités.
Regardez cette vidéo expliquant comment le 6502 a été rétroconçu , en particulier à partir de 34:20.
Le 6502 est un microprocesseur 8 bits introduit en 1975. Bien qu'il ait 60% moins de portes que le Z80, il était deux fois plus rapide, et bien qu'il soit plus contraint (en termes de registres, etc.), il compense cela avec un ensemble d'instructions élégant.
Il ne contient que 3510 transistors, qui ont été dessinés à la main par une petite équipe de personnes rampant sur de grandes feuilles de plastique qui ont ensuite été rétractées optiquement, formant les différentes couches du 6502.
Comme vous pouvez le voir ci-dessous, le 6502 transmet l'opcode d'instructions et les données de synchronisation dans la ROM de décodage, puis les transmet à un composant de "logique de contrôle aléatoire" dont le but est probablement de passer outre la sortie de la ROM dans certaines situations complexes.
À 37:00 dans la vidéo, vous pouvez voir un tableau de la ROM de décodage qui montre quelles conditions les entrées doivent remplir pour obtenir un "1" pour une sortie de contrôle donnée. Vous pouvez également le retrouver sur cette page .
Vous pouvez voir que la plupart des éléments de ce tableau ont des X dans différentes positions. Prenons par exemple
011XXXXX 2 X RORRORA
Cela signifie que les 3 premiers bits de l'opcode doivent être 011 et G doit être 2; rien d'autre ne compte. Si c'est le cas, la sortie nommée RORRORA deviendra vraie. Tous les opcodes ROR commencent par 011; mais il existe également d'autres instructions qui commencent par 011. Ceux-ci doivent probablement être filtrés par l'unité "logique de contrôle aléatoire".
Donc, fondamentalement, les opcodes ont été choisis de sorte que les instructions qui devaient faire la même chose les unes que les autres aient quelque chose en commun dans leur modèle de bits. Vous pouvez le voir en regardant une table d'opcode ; toutes les instructions OR commencent par 000, toutes les instructions Store commencent par 010, toutes les instructions qui utilisent l'adressage page zéro sont de la forme xxxx01xx. Bien sûr, certaines instructions ne semblent pas "correspondre", car le but n'est pas d'avoir un format d'opcode complètement régulier mais plutôt de fournir un ensemble d'instructions puissant. Et c'est pourquoi la "logique de contrôle aléatoire" était nécessaire.
La page que j'ai mentionnée ci-dessus dit que certaines des lignes de sortie dans la ROM apparaissent deux fois, "Nous supposons que cela a été fait parce qu'ils n'avaient aucun moyen d'acheminer la sortie d'une ligne où ils voulaient, alors ils ont mis la même ligne à un autre emplacement à nouveau. " Je peux simplement imaginer les ingénieurs dessiner à la main ces portes une par une et réaliser soudainement une faille dans la conception et essayer de trouver un moyen d'éviter de redémarrer tout le processus.