多くの場合、選択はかなりtime意的であるか、ISAが時間とともに成長するため、「最適な場所」に基づいています。ただし、MOS 6502は、限られたトランジスタから可能な限り絞り出そうとすることによってISAデザインが大きな影響を受けたチップの素晴らしい例です。
チェックアウト6502がリバースエンジニアリングされた方法を説明するこのビデオは特に以降34:20からを。
6502は1975年に導入された8ビットマイクロプロセッサです。Z80より60%少ないゲート数でしたが、2倍の速さでした(レジスタなどの点で)制約はありましたが、エレガントな命令セット。
わずか3510個のトランジスタが含まれています。これらは、後で光学的に収縮して6502のさまざまな層を形成するいくつかの大きなプラスチックシートの上をcう小さなチームによって手で引き出されました。
以下に示すように、6502は命令オペコードとタイミングデータをデコードROMに渡し、次に特定の複雑な状況でROMの出力を無効にすることを目的とする「ランダム制御ロジック」コンポーネントに渡します。
ビデオの37:00では、デコードROMのテーブルを見ることができます。この表には、特定の制御出力に対して「1」を取得するために入力が満たす必要がある条件が示されています。このページでも見つけることができます。
この表のほとんどのものには、さまざまな位置にXがあります。例を見てみましょう
011XXXXX 2 X RORRORA
つまり、オペコードの最初の3ビットは011、Gは2でなければなりません。他には何も関係ありません。その場合、RORRORAという名前の出力がtrueになります。すべてのRORオペコードは011で始まります。しかし、011で始まる他の命令もあります。これらは、おそらく「ランダム制御ロジック」ユニットによって除外する必要があります。
したがって、基本的に、オペコードが選択されたため、互いに同じことを行う必要のある命令が、ビットパターン全体で共通点を持っています。これは、オペコードテーブルを見ればわかります。すべてのOR命令は000で始まり、すべてのストア命令は010で始まり、ゼロページアドレッシングを使用するすべての命令はxxxx01xxの形式です。もちろん、一部の命令は「適合」していないようです。なぜなら、目的は完全に通常のオペコード形式ではなく、強力な命令セットを提供することだからです。そして、これが「ランダム制御ロジック」が必要だった理由です。
上記のページには、ROMの出力行の一部が2回表示されると書かれています。「これは、希望する行の出力をルーティングする方法がないため、同じ行を別の再び場所。」エンジニアがこれらのゲートを1つずつ手書きし、突然設計の欠陥に気づき、プロセス全体の再起動を回避する方法を考え出そうとしているのを想像できます。