
バンク切り替えは、プロセッサ[ 1 ]命令で直接アドレス指定できるメモリ量を超えて使用可能なメモリ量を増やすためにコンピュータ設計で使用される技術です。これにより、システムを異なるタイミングで異なる構成にすることができます。たとえば、フロッピーディスクからシステムを起動するために必要なROMを、不要になったときに切り替えることができます。ビデオゲームシステムでは、バンク切り替えによって、既存のゲーム機でプレイできるより大規模なゲームを開発することが可能になりました。
バンク切り替えはミニコンピュータシステムで始まりました。 [ 2 ]多くの最新のマイクロコントローラとマイクロプロセッサは、小型組み込みシステムでランダムアクセスメモリ、不揮発性メモリ、入出力デバイス、システム管理レジスタを管理するためにバンク切り替えを使用しています。この技術は、8ビットマイクロコンピュータシステムで一般的でした。バンク切り替えは、アドレスバス幅の制限を回避するためにも使用できます。これは、ハードウェアの制約によりアドレス線を簡単に追加できない場合や、ISAの制限を回避するためにも使用できます。ISAでは、生成されるアドレスがアドレスバス幅よりも狭くなります。一部の制御指向マイクロプロセッサは、内部I/Oレジスタと制御レジスタにアクセスするためにバンク切り替え技術を使用しており、これにより、各命令で使用する必要のあるレジスタアドレスビットの数が制限されます。
ページングによるメモリ管理とは異なり、ディスクストレージなどの大容量記憶装置との間でデータのやり取りは行われません。データは、特別なプレフィックス命令を使用しない限り、プロセッサから現在アクセスできないメモリ領域に静止状態で保持されます(ただし、ビデオディスプレイ、DMAコントローラ、またはコンピュータの他のサブシステムからはアクセスできる場合があります)。
バンク切り替えは、レジスタを使用してプロセッサ命令のアドレス空間を拡張する方法と考えることができます。例:
多くの場合、単一のデータベースは複数のバンクにまたがっており、ソートなどの目的でバンク間でレコードを移動する必要が生じます。一度にアクセスできるバンクが1つしかない場合、各バイトを2回移動する必要があります。まず共通メモリ領域に移動させ、次に宛先バンクにバンク切り替えを行い、最後に実際にバイトを宛先バンクに移動させる、という手順です。コンピュータアーキテクチャにDMAエンジンまたは2つ目のCPUがあり、バンクアクセス制限が異なる場合は、バンク間でデータを直接転送できるサブシステムを使用する必要があります。
仮想メモリ方式とは異なり、バンク切り替えは実行中のプログラムまたはオペレーティングシステムによって明示的に管理する必要があります。プロセッサハードウェアは、現在アクティブなバンクにマッピングされていないデータが必要であることを自動的に検出することはできません。アプリケーションプログラムは、必要なデータがどのメモリバンクにあるかを追跡し、バンク切り替えルーチンを呼び出してそのバンクをアクティブにする必要があります。 [ 6 ]ただし、バンク切り替えは、たとえばディスクストレージからデータを取得するよりもはるかに高速にデータにアクセスできます。

初期のビデオゲーム機や家庭用コンピュータで一般的に使用されていた16 ビットアドレス指定のプロセッサ( 8080、Z80、6502、6809など)は、直接アドレス指定できるメモリは 64 KBまででした。より多くのメモリを搭載したシステムでは、アドレス空間を、より大きなアドレス空間の一部に動的にマッピングできるブロックに分割する必要がありました。このより大きなアドレス空間を実現するために、メモリをそれぞれ最大 64 KB の別々のバンクに編成するバンク切り替えが使用されました。[ 8 ]さまざまなサイズのブロックは、バンク選択レジスタまたは同様のメカニズムを介して切り替えられました。Cromemcoはバンク切り替えを使用した最初のマイクロコンピュータメーカーであり、システムで8 つの 64 KB バンクをサポートしていました。 [ 9 ]
バンク切り替えを使用する場合、サブルーチン呼び出し、割り込み、マシンスタックなどの処理を損なわないように注意が必要でした。CPU から一時的に切り替えられたメモリの内容はプロセッサからはアクセスできませんが、ビデオ ディスプレイ、 DMA、I/O デバイスなどの他のハードウェアで使用できます。1983 年にリリースされたCP/M-80 3.0 と Z80 ベースのTRS-80モデル4およびモデル II はバンク切り替えをサポートし、 8080 または Z80 プロセッサがアドレス指定できる64 KB を超えるメモリを使用できるようにしました。 [ 10 ]
バンク切り替えにより、より広いアドレスバスを持つプロセッサに切り替える際のコストや互換性の問題を回避しながら、コンピュータ設計にメモリや機能を追加することが可能になりました。例えば、C64はバンク切り替えを利用して64KBのRAMをフルに活用しつつ、ROMやメモリマップドI/O も提供しました。Atari 130XEでは、2つのプロセッサ(6502とANTIC)がそれぞれ独立したRAMバンクにアクセスできるため、プログラマはCPUから見えるメモリを消費することなく、大きなプレイフィールドやその他のグラフィックオブジェクトを作成することができました。
マイクロコントローラ(入出力ハードウェアがチップ上に集積されたマイクロプロセッサ)は、例えば、複数のコンフィギュレーションレジスタやオンチップの読み書きメモリにアクセスするために、バンク切り替えを使用する場合があります。PICマイクロコントローラはその一例です。これにより、ルーチンプログラム実行時に短い命令ワードを使用してメモリ容量を節約できますが、起動時のシステム構成など、比較的使用頻度の低いレジスタにアクセスするために追加の命令が必要になります。

1985 年、 Lotus社とIntel社は、MS-DOSを実行するIBM PC 互換コンピュータで使用するためにExpanded Memory Specification (EMS) 3.0を発表しました。Microsoft社は1986 年にバージョン 3.2、1987 年にバージョン 4.0 で参加し、この仕様は Lotus-Intel-Microsoft EMS または LIM EMS として知られるようになりました。[ 6 ] [ 11 ] [ 12 ]これは、上位メモリ領域にある64 KB の「ウィンドウ」に分割して表示することで、元の IBM PC アーキテクチャで定義された640 KB を超える RAM を可能にするバンク切り替え技術の一種です。[ 13 ] 64 KB は、それぞれ独立して切り替えることができる4 つの 16 KB の「ページ」に分割されています。一部のコンピュータ ゲームではこれを使用しており、EMS は廃止されていますが、この機能は現在、これらのプログラムとの下位互換性を提供するために、後のMicrosoft Windowsオペレーティングシステムでエミュレートされています。
後に登場した拡張メモリ仕様(XMS)も現在では廃止されていますが、これは原則として、1MBを超えるメモリ (「拡張メモリ」と呼ばれる)のバンク切り替えをシミュレートするための標準規格です。拡張メモリは、DOSが動作するx86プロセッサのリアルモードでは直接アドレス指定できません。XMSでは、拡張メモリを通常のメモリ内の任意の場所にコピーできるため、「バンク」の境界は固定されていませんが、それ以外の点では、それを使用するプログラムの観点からは、 EMSのバンク切り替えと同じように動作します。DOSの後のバージョン(バージョン5.0以降)には、XMSを使用してEMSメモリをシミュレートするEMM386ドライバが含まれており、EMS用に作成されたプログラムでも拡張メモリを使用できるようになりました。Microsoft Windowsも、必要なプログラムのためにXMSをエミュレートします。
バンク切り替えは、一部のビデオゲーム機でも使用されていました。[ 14 ]例えば、Atari 2600 は 12 ビットの外部アドレス空間と 8 ビットのデータバスを持っていたため、2 12 バイト = 4 KB の ROM しかアドレス指定できませんでした。[ 15 ] [ 16 ]そのため、後の2600ゲームカートリッジには、より多くの ROM の使用を可能にし、より高度なゲーム (より多くのプログラム コードと、同様に重要なグラフィックや異なるゲームステージなどのより多くのゲーム データによって) を可能にするために、独自のバンク切り替えハードウェアが含まれていました。[ 17 ] Nintendo Entertainment Systemには、改良された6502が含まれていましたが、カートリッジには、マルチメモリコントローラと呼ばれるバンク切り替えによってアドレス指定される 1メガビット以上の ROM が含まれている場合がありました。ゲームボーイカートリッジは、MBC (メモリバンクコントローラ) と呼ばれるチップを使用しており、ROM バンク切り替えだけでなく、カートリッジSRAMバンク切り替え、さらには赤外線リンクや振動モーターなどの周辺機器へのアクセスも提供していました。バンク切り替えは、後期のゲームシステムでも引き続き使用されていました。スーパーストリートファイターIIなど、セガメガドライブのカートリッジの中には、4MBを超える容量を持つものもあり、この技術(4MBが最大アドレスサイズ)を使用する必要がありました。ゲームパークホールディングスの携帯ゲーム機GP2Xは、第2プロセッサの開始アドレス(またはメモリオフセット)を制御するためにバンク切り替えを使用しています。
一部のコンピュータビデオディスプレイでは、ビデオパフォーマンスを向上させるために、ダブルバッファリングという関連技術が使用されることがあります。この場合、プロセッサが1つの物理メモリ位置の内容を更新している間に、ビデオ生成ハードウェアは2つ目のメモリ位置の内容にアクセスして表示します。プロセッサが更新を完了すると、ビデオディスプレイハードウェアにアクティブなバンクを切り替えるように指示できるため、画面に表示される遷移にアーティファクトや歪みが生じません。この場合、プロセッサはすべてのメモリに一度にアクセスできますが、ビデオディスプレイハードウェアはビデオメモリの各部分間でバンク切り替えを行います。2つ(またはそれ以上)のビデオメモリバンクにわずかに異なる画像が含まれている場合、それらを高速に切り替え(ページフリップ)することで、プロセッサが直接実行するには遅すぎるアニメーションやその他の視覚効果を作成できます。
バンク切り替えは、後に多くの16ビットシステムでセグメンテーションに取って代わられ、さらにページングメモリ管理ユニットへと発展しました。しかし、組み込みシステムにおいては、その簡便性、低コスト、そして汎用コンピューティングよりも組み込みシステムへの適応性の高さから、バンク切り替えが依然として頻繁に用いられています。
An eight-position DIP switch on such cards is used to select one (or more) of eight banks of memory.
With memory bank select, memory space is arranged in a number of separate banks of up to 64K each.
Cromemco was the first microcomputer manufacturer to refine and exploit bank switching.