In molti casi, la scelta è piuttosto arbitraria o basata su "ovunque si adatti meglio" man mano che gli ISA crescono nel tempo. Tuttavia, il MOS 6502 è un meraviglioso esempio di chip in cui il design ISA è stato fortemente influenzato dal tentativo di spremere il più possibile da transistor limitati.
Guarda questo video che spiega come il 6502 è stato progettato al contrario , in particolare da 34:20 in poi.
Il 6502 è un microprocessore a 8 bit introdotto nel 1975. Sebbene avesse il 60% di porte in meno rispetto allo Z80, era due volte più veloce e sebbene fosse più vincolato (in termini di registri, ecc.), Compensò quello con un set di istruzioni elegante.
Contiene solo 3510 transistor, che sono stati disegnati a mano da una piccola squadra di persone che strisciava su alcuni grandi fogli di plastica che successivamente sono stati ridotti otticamente, formando i vari strati del 6502.
Come puoi vedere di seguito, il 6502 passa il codice operativo dell'istruzione e i dati di temporizzazione nella ROM di decodifica, quindi li passa in un componente "logica di controllo casuale" il cui scopo è probabilmente quello di sovrascrivere l'output della ROM in determinate situazioni complesse.
Alle 37:00 nel video puoi vedere una tabella della ROM di decodifica che mostra quali condizioni devono soddisfare gli ingressi per ottenere un "1" per un dato output di controllo. Puoi trovarlo anche su questa pagina .
Puoi vedere che la maggior parte delle cose in questa tabella ha X in varie posizioni. Prendiamo ad esempio
011XXXXX 2 X RORRORA
Ciò significa che i primi 3 bit del codice operativo devono essere 011 e G deve essere 2; Non importa nient'altro. In tal caso, l'uscita denominata RORRORA diventerà vera. Tutti i codici operativi ROR iniziano con 011; ma ci sono altre istruzioni che iniziano anche con 011. Questi probabilmente devono essere filtrati dall'unità "random control logic".
Quindi, in sostanza, sono stati scelti gli opcode in modo che le istruzioni che dovevano fare la stessa cosa l'una con l'altra avessero qualcosa in comune attraverso il loro modello di bit. Puoi vederlo guardando una tabella di codici operativi ; tutte le istruzioni OR iniziano con 000, tutte le istruzioni Store iniziano con 010, tutte le istruzioni che utilizzano l'indirizzamento a pagina zero sono nel formato xxxx01xx. Naturalmente, alcune istruzioni non sembrano "adattarsi", perché l'obiettivo non è di avere un formato di codice operativo completamente regolare, ma piuttosto di fornire un potente set di istruzioni. Ed è per questo che era necessaria la "logica di controllo casuale".
La pagina che ho menzionato sopra dice che alcune delle linee di output nella ROM appaiono due volte: "Supponiamo che questo sia stato fatto perché non avevano modo di instradare l'output di una linea dove volevano, quindi hanno messo la stessa linea in un altro posizione di nuovo ". Posso solo immaginare gli ingegneri che disegnano a mano quei cancelli uno per uno e improvvisamente realizzano un difetto nel design e provano a trovare un modo per evitare di riavviare l'intero processo.