En muchos casos, la elección es bastante arbitraria o se basa en "donde mejor se adapte" a medida que las ISA crecen con el tiempo. Sin embargo, el MOS 6502 es un maravilloso ejemplo de un chip en el que el diseño de ISA se vio muy influenciado al tratar de exprimir lo más posible los transistores limitados.
Echa un vistazo a este video que explica cómo el 6502 se diseñó mediante ingeniería inversa , especialmente a partir de 34:20.
El 6502 es un microprocesador de 8 bits introducido en 1975. Aunque tenía un 60% menos de puertas que el Z80, era el doble de rápido y, aunque estaba más limitado (en términos de registros, etc.), lo compensaba. que con un conjunto de instrucciones elegante.
Contiene solo 3510 transistores, que fueron extraídos, a mano , por un pequeño equipo de personas que se arrastraban sobre unas grandes láminas de plástico que luego se contrajeron ópticamente, formando las distintas capas del 6502. .
Como puede ver a continuación, el 6502 pasa el código de operación y los datos de temporización a la ROM de decodificación, luego lo 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.
Alas37:00enelvideo,puedesverunatabladelaROMdedecodificaciónquemuestraquécondicionesdebencumplirlasentradasparaobtenerun"1" para una salida de control determinada. También puede encontrarlo en esta página .
Puedes 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 volverá verdadera. Todos los opcodes ROR comienzan con 011; pero hay otras instrucciones que comienzan con 011 también. Probablemente sea necesario filtrarlos con la unidad de "lógica de control aleatorio".
Básicamente, los códigos de operación se eligieron de modo que las instrucciones que necesitaban hacer lo mismo entre sí tuvieran algo en común en su patrón de bits. Puede ver esto mirando una tabla de códigos de operación ; todas las instrucciones OR comienzan con 000, todas las instrucciones de la Tienda comienzan con 010, todas las instrucciones que utilizan direccionamiento de página cero tienen el formato xxxx01xx. Por supuesto, algunas instrucciones no parecen "ajustarse", porque el objetivo no es tener un formato de código de operación completamente regular, sino proporcionar un conjunto de instrucciones poderoso. Y es por esto 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 hizo porque no tenían forma de enrutar la salida de alguna línea donde querían, así que colocaron la misma línea en un lugar diferente de nuevo ". Solo puedo imaginar a los ingenieros dibujando a mano las puertas una por una y de repente dándome cuenta de un defecto en el diseño y tratando de encontrar una manera de evitar reiniciar todo el proceso.