マイクロプログラム方式
モデル50には2つのデータパスがあり、それらが並行動作する。32ビットのデータパスは算術演算に使われ、8ビットのデータパスは論理演算に使われる。コントロールストアは90ビットのマイクロ命令を使用する。 モデル85では高速化のために命令フェッチ機構 (I-unit) と実行機構 (E-unit) を分離している。I-unit はワイヤードロジックでの制御で、E-unit はマイクロプログラム方式である。マイクロ命令は基本構成では108ビットで、エミュレータ機能を実装した場合はさらに幅広くなる。
NCR 315(英語版)はフェライトコア群を手作業で結線したコントロールストアを使っている。
DECのPDP-11は、PDP-11/20以外はマイクロプログラム方式だった。
バロースの多くのシステムはマイクロプログラム方式だった。 B700は、主記憶に格納された16ビットのマイクロプログラムを使用し、アプリケーションレベルの機械語を実行する。各マイクロ命令はそのままレジスタロード命令として実行されるか、ROMに格納された56ビットの「ナノコード」にマッピングされる。これによってハードウェアが単純化され、メインフレームの周辺プロセッサとしてもスタンドアロンのコンピュータとしても使用できる。 B1700(英語版)は主記憶がビット単位にアドレス指定できる独特のハードウェアだが、B700と同様の階層構成になっている。
マイクロプログラム方式では、(コンピュータの構成要素である)プロセッサ自体を、さらに小さな制御装置や記憶装置や命令セットから成る小さなコンピュータであるとみなして考えることが多い。このとき、この「さらに小さな〜」などそういったものを「マイクロ〜」と呼ぶ。簡単に類推可能なので以下では特に説明せずそのような用語を使う。
マイクロプログラムはCPUを制御するビット列となる。根本的な進歩はCPU制御がコンピュータプログラムになったことである。つまり、複雑な電気回路の設計変更(すなわち従来のCPUの制御)がプログラムの変更に転換されたのである。
以下、コンピュータ内部をいくつかに分けて解説する。
マイクロシーケンサがコントロールストアの次のワードを取り出す。シーケンサとはカウンタのようなもので、コントロールストアの一部のデータにしたがってジャンプする(つまり値をカウントアップして指し示す場所を変化させる)が、場合によっては命令レジスタの内容にしたがってジャンプする。最も単純なシーケンサはコントロールストアの数ビットをロードするレジスタである。
レジスタはCPUのデータを保持する高速なメモリである。レジスタにはプログラムカウンタ、スタックポインタなどアプリケーションプログラマが簡単にはアクセスできないものも含まれる。ほとんどのレジスタファイルは3つのポートを持つ。
初期のコンピュータのCPUの制御回路は行き当たりばったりの方法で設計されていた。最も単純なものとしてはコンピュータの制御ロジックの順序制御のためにフリップフロップのリングを使っていた。
1947年、Whirlwindの開発でコントロールストアを使って設計を単純化させるという概念が導入された。この際のコントロールストアはダイオードの2次元格子回路である。CPUクロックから "pulse distributor" で8個のタイミングパルスを生成し、それぞれが格子の異なる列を活性化させるようになっている。そのタイミングパルスに同期して制御信号でその中の一列を選択すると、それぞれの交点がCPUの各部を制御する信号を発するようになっていた。
コントロールストアから発せられる信号群は、自動ピアノのピアノロールのような役割を果たす。すなわち、それぞれのビットがそれぞれの部分を制御するようになっている。ただし、コントロールストアの奏でる曲は短く、しかも繰り返し演奏される。
1951年、モーリス・ウィルクスがそれを発展させ、マイクロプログラムに「条件付実行」の概念、すなわちコンピュータプログラムにおけるif文を追加した。