W wielu przypadkach wybór jest dość arbitralny lub oparty na „gdziekolwiek najlepiej pasuje”, gdy ISA rosną z czasem. Jednak MOS 6502 jest wspaniałym przykładem układu, w którym projekt ISA był pod silnym wpływem próby wyciśnięcia jak najwięcej z ograniczonych tranzystorów.
Obejrzyj ten film wyjaśniający, w jaki sposób 6502 został poddany inżynierii wstecznej , szczególnie od 34:20.
6502 to 8-bitowy mikroprocesor wprowadzony w 1975 roku. Chociaż miał o 60% mniej bramek niż Z80, był dwa razy szybszy i chociaż był bardziej ograniczony (pod względem rejestrów itp.), Nadrobił to elegancki zestaw instrukcji.
Zawiera tylko 3510 tranzystorów, które zostały ręcznie wyciągnięte przez mały zespół ludzi czołgających się po dużych plastikowych arkuszach, które później optycznie się zmniejszyły, tworząc różne warstwy 6502.
Jak widać poniżej, 6502 przekazuje dane opcode i timing instrukcji do ROM dekodowania, a następnie przekazuje je do komponentu „logiki losowej kontroli”, którego celem jest prawdopodobnie unieważnienie wyjścia ROM w pewnych skomplikowanych sytuacjach.
O 37:00 na wideo widać tabelę ROM z dekodowaniem, która pokazuje, jakie warunki muszą spełniać wejścia, aby uzyskać „1” dla danego wyjścia sterującego. Możesz go również znaleźć na tej stronie .
Widać, że większość rzeczy w tej tabeli ma X w różnych pozycjach. Weźmy na przykład
011XXXXX 2 X RORRORA
Oznacza to, że pierwsze 3 bity kodu operacji muszą mieć wartość 011, a G musi wynosić 2; Nie ma niczego ważniejszego. Jeśli tak, dane wyjściowe o nazwie RORRORA zostaną spełnione. Wszystkie kody ROR zaczynają się od 011; ale są też inne instrukcje, które zaczynają się od 011. Prawdopodobnie muszą one zostać odfiltrowane przez jednostkę „logiki losowej kontroli”.
Zasadniczo więc wybrano kody, aby instrukcje, które musiały robić to samo, miały ze sobą coś wspólnego. Możesz to zobaczyć, patrząc na tabelę opcode ; wszystkie instrukcje OR zaczynają się od 000, wszystkie instrukcje Store zaczynają się od 010, wszystkie instrukcje korzystające z adresowania zerowej strony mają postać xxxx01xx. Oczywiście niektóre instrukcje nie wydają się „pasować”, ponieważ celem nie jest posiadanie całkowicie normalnego formatu opcode, ale raczej dostarczenie potężnego zestawu instrukcji. I dlatego konieczna była „logika losowej kontroli”.
Na stronie, o której wspomniałem powyżej, napisano, że niektóre wiersze wyjściowe w pamięci ROM pojawiają się dwukrotnie: „Zakładamy, że zostało to zrobione, ponieważ nie mieli możliwości routowania wyjścia niektórych wierszy tam, gdzie chcieli, więc umieścili ten sam wiersz w innym wierszu lokalizacja ponownie ”. Mogę sobie tylko wyobrazić, jak inżynierowie ręcznie rysują te bramy jeden po drugim i nagle uświadamiają sobie wadę projektu i próbują wymyślić sposób, aby uniknąć ponownego rozpoczęcia całego procesu.