Aby zrozumieć skąd się wzięły nielegale i dlaczego działają na różnych 6502 , dlaczego niektóre są stabilne a inne nie i dlaczego nie działają na 816 trzeba zrozumieć jak ogólnie działają automaty formalne i ich szczególny przypadek którym jest dekoder rozkazów procesora.
Otóż przypuśćmy, że dostałem polecenie zaprojektować automat który będzie parsował określony zbiór słów. Najpierw projektuję stany i przejścia aby te słowa były parsowane. Jednak dostaję wówczas ciąg automatów dla każdego słowa osobny. Muszę je teraz zintegrować razem tworząc jeden. Robię to przez wyszukiwanie podobieństw w parsowanych rozkazach. Uzyskanie sytuacji gdzie automat będzie parsował wyłącznie zadane w specyfikacji słowa może być dość spory (dużo bramek) gdyż muszę zadbać o ich każdorazowe terminowanie. Krótko mówiąc - pozbycie się nielegali powstających przypadkowo (mój automat parsuje zadane rozkazy + coś jeszcze co nie było przewidziane) kosztuje dodatkowy wysiłek i bramki, czyli podwyższa koszt projektu. Więc to olewam, automat działa jak trzeba dla wyspecyfikowanego słownika, a to że umie zrobić coś jeszcze mnie nie obchodzi - nie ma tego w specyfikacji.
Jeśli za czas jakiś firma zechce zrobić nową wersję procesora powiedzmy rozszerzoną o nowe możliwości i rozkazy, dekoder zostanie zaprojektowany na nowo - jednakże mimo tego, że nowy słownik zawiera wszystko to, co poprzedni, na skutek dodania nowych rozkazów optymalizacja automatu będzie biegła innymi ścieżkami, więc również prawdopodobnie wystąpią nieprzewidziane instrukcje, ale już inne.
I tu dochodzimy do wyjaśnienia - rozkazy spoza specyfikacji działają na tych 6502 które były idealną kopią oryginału. Bez projektowania - kropka w kropkę. Jeśli część z nich nie działa, tzn. że co najmniej dekoder rozkazów był zaprojektowany niezależnie. Stąd sie biorą nielegale stabilne i niestabilne. Jednak stabilność jest co najmniej ryzykowna, gdyż to że się powtórzyły w innej wersji tego samego procesora to przypadek - po prostu optymalizacja dekodera była minimalna albo częściowo przebiegła w ten sam sposób. Natomiast w przypadku nowego modelu procesora, który nie ma być kopią a jedynie ma być kompatybilny, sytuacja w której nielegale się powtórzą jest już wybitnie mało prawdopodobna - tym bardziej jeśli te same kody będą wykorzystywać nowe, legalne rozkazy będące rozszerzeniem. Powstaną za to na pewno nowe nielegale :) I tyle.
Jeśli programista będzie się trzymał specyfikacji, to jego oprogramowanie będzie działać niezależnie od postępu technicznego - nowe modele procesora wykonają kod. W przypadku inteli tych skoków jest dość sporo : 8086, 286, 386, 486, Pentium - każdy różnił się znacząco i miał nowe rozkazy, a to znaczy, że nielegale z poprzedniego modelu prawie na pewno nie zadziałają (może jeden czy dwa, przypadkowo).
The problem is not the problem; the problem is your attitude about the problem