En muchos casos, la elección es bastante arbitraria o se basa en "donde sea que se ajuste mejor" a medida que los ISA crecen con el tiempo. Sin embargo, el MOS 6502 es un maravilloso ejemplo de un chip donde el diseño de ISA fue fuertemente influenciado al tratar de exprimir lo más posible de los transistores limitados.
Echa un vistazo a este video que explica cómo se diseñó la ingeniería inversa del 6502 , especialmente a partir de las 34:20 en adelante.
El 6502 es un microprocesador de 8 bits introducido en 1975. Aunque tenía un 60% menos de puertas que el Z80, era dos veces más rápido, y aunque era más limitado (en términos de registros, etc.), lo compensaba con un Elegante conjunto de instrucciones.
Contiene solo 3510 transistores, que fueron extraídos a mano por un pequeño equipo de personas que se arrastra sobre unas grandes láminas de plástico que luego se redujeron ópticamente, formando las diversas capas del 6502.
Como puede ver a continuación, el 6502 pasa el código de operación de la instrucción y los datos de temporización a la ROM de decodificación, luego los pasa a un componente de "lógica de control aleatorio" cuyo propósito es probablemente anular la salida de la ROM en ciertas situaciones complejas.
A las 37:00 en el video puede ver una tabla de la ROM de decodificación que muestra qué condiciones deben cumplir las entradas para obtener un "1" para una salida de control dada. También puedes encontrarlo en esta página .
Puede ver que la mayoría de las cosas en esta tabla tienen X en varias posiciones. Tomemos por ejemplo
011XXXXX 2 X RORRORA
Esto significa que los primeros 3 bits del código de operación deben ser 011 y G debe ser 2; Nada más importa. Si es así, la salida llamada RORRORA se hará realidad. Todos los códigos de operación ROR comienzan con 011; pero hay otras instrucciones que comienzan con 011 también. Probablemente, estos deben ser filtrados por la unidad de "lógica de control aleatorio".
Básicamente, se eligieron los códigos de operación de modo que las instrucciones que debían hacer lo mismo que el otro tenían algo en común en su patrón de bits. Puede ver esto mirando una tabla de código de operación ; todas las instrucciones OR comienzan con 000, todas las instrucciones de Store comienzan con 010, todas las instrucciones que usan direccionamiento de página cero tienen el formato xxxx01xx. Por supuesto, algunas instrucciones no parecen "encajar", porque el objetivo no es tener un formato de código de operación completamente regular, sino más bien proporcionar un poderoso conjunto de instrucciones. Y es por eso que la "lógica de control aleatorio" era necesaria.
La página que mencioné anteriormente dice que algunas de las líneas de salida en la ROM aparecen dos veces: "Suponemos que esto se ha hecho porque no tenían forma de enrutar la salida de alguna línea donde querían, por lo que pusieron la misma línea en una línea diferente ubicación de nuevo ". Me imagino a los ingenieros dibujando a mano esas puertas una por una y de repente se dan cuenta de una falla en el diseño e intentan encontrar una manera de evitar reiniciar todo el proceso.