IBM System/360は、1964年に発売された互換性のある一連のコンピュータで、その多くはマイクロプログラミングされていた。[2] System/360モデル40は、複雑なマイクロシーケンスを持つマイクロプログラムマシンの良い例である。[3]
マイクロストアは、水平マイクロプログラミングスタイルで動作する4,096個の56ビット・マイクロ命令で構成されている。 ストアのアドレスは、12ビットのリードオンリー・アドレスレジスタ(ROAR)によって指定される。 S/360アーキテクチャのほとんどのレジスタとは異なり、ROARのビットは右のビット0から左のビット11までの番号が付けられている。
+------------+
| ROAR |
+------------+
11 0
モデル40は、マイクロ命令の逐次実行を行わないので、マイクロシーケンサは、従来の意味では実際に分岐しない。 代わりに、各マイクロ命令は、次に実行されるマイクロ命令のアドレスを指定する。 マイクロ命令内の4つのフィールドが新しいアドレスに寄与する。
- CA, 4 bits: 他のフィールドに応じ、次のアドレスの一部。
- CB, 4 bits: 次のアドレスのビット1を決定する。
- CC, 4 bits: 次のアドレスのビット0を決定する。
- CD, 2 bits: 次のアドレスがどのように組み立てられるかを制御する(CBフィールドが15を含む場合を除く)。
これらのフィールドには、基本的に3つの組み合わせ、またはフォーマットがある。
CBフィールドが15を含む場合、機能分岐が発生する。 ROAR内の新しいマイクロストア・アドレスのビットは、以下のように決定される。
- bits 11–10: CDフィールド
- bits 9–6: CAフィールド
- bit 5: 常に0
- bits 4–1: 8ビットALUの右入力であるQレジスタの上位4ビット
- bit 0: CCフィールドで指定されたテスト結果
CCフィールドは、マシンの状態の様々なテストを指定することができる。 また、無条件ビットに定数 0 または 1 を指定することもできる。
このフォーマットは、制御の流れをマイクロストアの64ワードブロックの下位32ワード内の16命令ペアの1つに変更する(ビット5は常に0であるため)。 次に、CCフィールドは、ペアのどの命令が制御を受け取るかを決定する。
CDフィールドが0、1、または3の場合、制御の流れは現在の64ワードブロック内の命令に送られる。 新しいマイクロストア・アドレスのビットは次のように決定される。
- bits 11–6: 変更なし
- bits 5–2: CAフィールド
- bit 1: CD = 0 の場合、CBフィールドで指定されたテストの結果。それ以外の場合は0。
- bit 0: CCフィールドで指定されたテスト結果
CAフィールドは、現在の64ワードブロック内の16個の4ワードグループから1つを選択する。 次に、CBフィールドとCCフィールドは、4つのどの命令が制御を受け取るかを決定する。
CDフィールドが2の場合、制御の流れは明白ではなく、新しいマイクロストア・アドレスのビットは次のように決定される。
- bits 11–10: 変更なし
- bits 9–6: CAフィールド
- bits 5–2: 変更なし
- bit 1: CBフィールドで指定されたテスト結果
- bit 0: CCフィールドで指定されたテスト結果
次の命令は、ビット11-10が同じままであるため、次の命令は、現在の命令と同じ1kワード領域内にある。 CAフィールドは、その領域内の64ワードブロックを決定する。 ビット5-2は変わらないので、その命令は、現在の命令が現在のブロック内にあるのと同じ4ワードのグループ内にある。 次に、CBおよびCCフィールドは、4つのどの命令が制御を受け取るかを決定する。
この記述は簡略化されている。 以下の機能を無視している。
- モデル40は、CPUモードまたはチャネルモードで動作することができる。本説明では、CPUモードのみを扱う。
- マイクロ命令が機能分岐形式ではなく、CDフィールドが1または3の場合、次のアドレスのビット1は常に0である。この場合、CDフィールドとCBフィールドの値は、立ち上がる制御ラインのセットの1つを決定する。