Em muitos casos, a escolha é bastante arbitrária ou baseada em "onde for melhor", à medida que os ISAs crescem com o tempo. No entanto, o MOS 6502 é um exemplo maravilhoso de chip em que o design do ISA foi fortemente influenciado pela tentativa de extrair o máximo possível de transistores limitados.
Confira este vídeo explicando como o 6502 foi modificado com engenharia reversa , principalmente a partir das 34:20.
O 6502 é um microprocessador de 8 bits lançado em 1975. Embora tivesse 60% menos portas do que o Z80, era duas vezes mais rápido e, embora fosse mais restrito (em termos de registros etc.), compensava isso com um conjunto de instruções elegante.
Ele contém apenas 3510 transistores, que foram desenhados à mão por uma pequena equipe de pessoas rastejando sobre grandes folhas de plástico que foram posteriormente reduzidas opticamente, formando as várias camadas do 6502.
Como você pode ver abaixo, o 6502 passa o código de operação da instrução e os dados de temporização para a ROM de decodificação e os passa para um componente de "lógica de controle aleatório", cujo objetivo provavelmente é anular a saída da ROM em determinadas situações complexas.
Às 37:00 do vídeo, você pode ver uma tabela da ROM de decodificação que mostra quais condições as entradas devem atender para obter um "1" para uma determinada saída de controle. Você também pode encontrá-lo nesta página .
Você pode ver que a maioria das coisas nesta tabela tem Xs em várias posições. Vamos pegar, por exemplo
011XXXXX 2 X RORRORA
Isso significa que os 3 primeiros bits do código de operação devem ser 011 e G deve ser 2; nada mais importa. Nesse caso, a saída denominada RORRORA será verdadeira. Todos os opcodes ROR começam com 011; mas há outras instruções que começam com 011 também. Provavelmente, eles precisam ser filtrados pela unidade "lógica de controle aleatório".
Então, basicamente, os opcodes foram escolhidos para que as instruções que precisavam fazer a mesma coisa tivessem algo em comum em seu padrão de bits. Você pode ver isso olhando para uma tabela opcode ; todas as instruções OR começam com 000, todas as instruções da loja começam com 010, todas as instruções que usam o endereçamento de página zero têm o formato xxxx01xx. Obviamente, algumas instruções parecem não se encaixar, porque o objetivo não é ter um formato de código de operação completamente regular, mas fornecer um conjunto de instruções poderoso. E é por isso que a "lógica de controle aleatório" era necessária.
A página que mencionei acima diz que algumas das linhas de saída na ROM aparecem duas vezes: "Assumimos que isso tenha sido feito porque eles não tinham como rotear a saída de alguma linha para onde queriam, então colocaram a mesma linha em um local diferente. localização novamente. " Posso imaginar os engenheiros desenhando à mão esses portões um a um e subitamente percebendo uma falha no design e tentando encontrar uma maneira de evitar o reinício de todo o processo.