У багатьох випадках вибір є досить довільним або ґрунтується на тому, "де це найбільше підходить", оскільки МСА зростає з часом. Однак MOS 6502 - чудовий приклад мікросхеми, де на дизайн ISA сильно впливали намагання максимально вичавити з обмежених транзисторів.
Перегляньте це відео, де пояснюється, як 6502 було розроблено реверс , особливо з 34:20.
6502 - це 8-бітний мікропроцесор, представлений у 1975 році. Хоча він мав на 60% менше воріт, ніж Z80, він був удвічі швидшим, і хоча він був більш обмеженим (з точки зору реєстрів тощо), він доповнив це елегантний набір інструкцій.
Він містить всього 3510 транзисторів, які вручну було намальовано невеликою групою людей, що повзали над великими пластиковими листами, які згодом оптично стиснулися, утворюючи різні шари 6502.
Як ви бачите нижче, 6502 передає дані про кодування інструкцій та синхронізацію в декодируючий ПЗУ, потім передає їх в компонент "логіки випадкового керування", метою якого є певне перевищення виводу ПЗУ в певних складних ситуаціях.
О 37:00 на відео ви можете побачити таблицю декодування ROM, яка показує, яким умовам повинні відповідати входи, щоб отримати "1" для заданого керуючого виходу. Ви також можете знайти його на цій сторінці .
Ви можете бачити, що більшість речей у цій таблиці мають X у різних положеннях. Візьмемо для прикладу
011XXXXX 2 X RORRORA
Це означає, що перші 3 біти опкоду повинні бути 011, а G повинні бути 2; нічого іншого не має значення. Якщо так, вихід з ім'ям RORRORA буде істинним. Усі опкоди ROR починаються з 011; але є й інші інструкції, які також починаються з 011. Вони, ймовірно, повинні бути відфільтровані за допомогою підрозділу "логіки випадкового керування".
Таким чином, опкоди були обрані таким чином, щоб інструкції, які потрібно було робити те саме, що один з одним, мали щось спільне в їх бітовій схемі. Це можна побачити, переглянувши таблицю опкоду ; всі АБО інструкції починаються з 000, всі інструкції в магазині починаються з 010, усі інструкції, які використовують адресацію з нульовою сторінкою, мають форму xxxx01xx. Звичайно, деякі інструкції, здається, не "підходять", оскільки мета полягає не у тому, щоб мати повністю нормальний формат коду, а скоріше забезпечити потужний набір інструкцій. І саме тому "логіка керування випадковим чином" була необхідною.
Сторінка, про яку я згадував вище, говорить про те, що деякі вихідні рядки в ПЗУ з’являються двічі: "Ми припускаємо, що це було зроблено, оскільки вони не мали можливості маршрутизувати вихід деякої лінії там, де вони хотіли, тому вони поставили ту саму лінію на інший знову ". Я просто можу уявити, як інженери вручну малюють ці ворота одна за одною і раптом усвідомлюють недолік у дизайні і намагаються придумати спосіб уникнути повторного запуску всього процесу.