Во многих случаях выбор является довольно произвольным или основан на «везде, где он подходит лучше всего», поскольку ISA растут со временем. Тем не менее, MOS 6502 является прекрасным примером микросхемы, где на дизайн ISA сильно повлияла попытка выжать как можно больше из ограниченных транзисторов.
Посмотрите это видео, объясняющее, как 6502 был перепроектирован, особенно с 34:20 и далее.
6502 - это 8-битный микропроцессор, представленный в 1975 году. Несмотря на то, что у него было на 60% меньше вентилей, чем у Z80, он был в два раза быстрее, и хотя он был более ограниченным (с точки зрения регистров и т. Д.), Он восполнял это с помощью элегантный набор инструкций.
Он содержит всего 3510 транзисторов, которые были извлечены вручную небольшой группой людей, ползающих по нескольким большим пластиковым листам, которые впоследствии были оптически сжаты, образуя различные слои 6502.
Как вы можете видеть ниже, 6502 передает код операции и данные синхронизации в ПЗУ декодера, а затем передает их в компонент «логики случайного управления», цель которого, вероятно, состоит в том, чтобы перекрывать вывод ПЗУ в определенных сложных ситуациях.
В 37:00 в видео вы можете увидеть таблицу ПЗУ декодирования, которая показывает, каким условиям должны удовлетворять входы, чтобы получить «1» для данного контрольного выхода. Вы также можете найти его на этой странице .
Вы можете видеть, что большинство вещей в этой таблице имеют X в разных позициях. Давайте возьмем для примера
011XXXXX 2 X RORRORA
Это означает, что первые 3 бита кода операции должны быть 011, а G должен быть 2; Остальное не важно. Если это так, вывод с именем RORRORA станет верным. Все коды операций ROR начинаются с 011; но есть и другие инструкции, которые также начинаются с 011. Они, вероятно, должны быть отфильтрованы модулем «случайной логики управления».
Таким образом, в основном, коды операций были выбраны так, чтобы инструкции, которые должны были делать то же самое, что и друг друга, имели что-то общее в их битовой структуре. Вы можете увидеть это, посмотрев таблицу кодов операций ; все инструкции OR начинаются с 000, все инструкции Store начинаются с 010, все инструкции, использующие адресацию нулевой страницы, имеют форму xxxx01xx. Конечно, некоторые инструкции, похоже, не подходят, потому что цель состоит не в том, чтобы иметь полностью регулярный формат кода операции, а в том, чтобы обеспечить мощный набор команд. И именно поэтому «логика случайного управления» была необходима.
На странице, о которой я упоминал выше, говорится, что некоторые строки вывода в ПЗУ появляются дважды: «Мы предполагаем, что это было сделано, потому что у них не было способа направить вывод какой-либо строки туда, куда они хотели, поэтому они помещают одну и ту же строку в другую Ещё раз. " Я могу только представить, как инженеры вручную рисуют эти ворота, внезапно осознавая недостатки в дизайне и пытаясь придумать способ избежать повторного запуска всего процесса.