バンク切り換え:限られたアドレス空間を拡張する技術
バンク切り換えとは、
コンピュータのメモリにおけるアドレス空間の制限を克服するためのメモリ管理技術です。1次元配列だったアドレス空間を多次元配列に見立て、アクセス可能な容量を仮想的に拡張する仕組みです。この技術は、特に8ビットマイクロ
コンピュータ全盛期において、限られたアドレスバスでより大容量のRAMやROMを使用可能にするために広く用いられました。
初期のバンク切り換えは、アドレス空間を主に2次元配列として扱うものでした。例えば、16ビットのアドレスバスでは64KBのアドレス空間しかありません。しかし、バンク切り換えを用いることで、複数の64KBのメモリバンクを切り替えながら使用し、合計で64KBを超えるメモリ容量にアクセスすることが可能になります。
この技術は、磁気コアメモリやROMとRAMの組み合わせ、
VRAMのアドレス空間確保などに活用されました。例えば、メインメモリ容量が64KBの
8ビットパソコンにおいて、初期ローダーからシステムへの移行や、ROM空間をRAMとしてユーザーに開放するといった用途に用いられました。これにより、ROMに予め書き込まれている機能以外のシステムの利用や、より自由度の高いプログラミングが可能になりました。
8ビット
マイクロプロセッサ(Z80、6502など)を搭載したシステムでは、バンク切り換えは必須の技術でした。これらのプロセッサは16ビットアドレス空間しか持たないため、64KBを超えるメモリを使うには、バンク切り換えによってメモリを複数のバンクに分割し、必要に応じてバンクを切り替えてアクセスする必要がありました。
MSXなどのパソコンでは、メモリマップドI/Oと組み合わせた高度なバンク切り換え機構が実装されました。複数のメモリ空間を「スロット」として扱い、ハードウェアとソフトウェアの接続を管理することで、競合を防ぎました。しかし、メモリ空間間の移動が制限されるため、メモリの配置に制約がありました。後継機では、メモリ管理ユニットの搭載により、より柔軟なメモリ配置が可能になりました。
バンク切り換えの欠点
バンク切り換えは、アドレス空間を拡張できる一方で、いくつかの欠点も持っていました。
追加レジスタの必要性: CPUのアドレスレジスタに加え、バンク切り換え用のレジスタが必要になります。このレジスタは、CPU内部にある場合と外部にある場合があります。
ソフトウェアによる管理の複雑さ:
ページサイズを超えるデータのアクセスやメモリ間転送では、ソフトウェアによる複雑な
ページ管理が必要となり、処理速度の低下やバグ発生の可能性が生じます。特に、データが
ページ境界をまたぐ場合に問題が発生しやすくなります。
機種依存性: バンク切り換えレジスタの仕様は機種によって異なることが多く、互換性が低いという問題がありました。
アドレス空間の制限: バンク切り換えによってアクセスできるメモリ空間は、必ずしも
CPUが直接アクセスできるアドレス空間内にあるとは限りません。
VRAMなど、特定のアドレスに割り当てられたメモリバンクにアクセスする場合は、そのアドレス空間の制約を受けることになります。
ゲーム機におけるバンク切り換え
初期のゲーム機でも、バンク切り換えは広く利用されました。
Atari 2600は、ROM容量の制限を克服するために、カートリッジ内にバンク切り換え機構を搭載していました。ファミリー
コンピュータでは、ROMカートリッジ側にバンクコントローラ(MMCなど)を搭載することで、大容量のROMカートリッジを使用可能にしています。
ゲームボーイのカートリッジにも、MBC (Memory Bank Controller)チップが搭載されており、ROMバンクの切り換えだけでなく、SRAMバンクの切り換えや周辺機器へのアクセスも制御していました。
PC-9801とバンクメモリ
PC-9801シリーズでは、1MBのアドレス空間しか持たない
Intel 8086プロセッサが使用されていました。そのため、アプリケーションのメモリ要求増加に対応するために、バンクメモリと呼ばれるバンク切り換えメモリが開発されました。各メーカーから独自規格のバンクメモリが発売され、アプリケーションやゲームソフトもそれに対応したものが提供されました。その後、アイ・オー・データ機器が提唱したI/Oバンク方式によるBMS(Bank Memory Specification)が制定され、メモリ管理の効率化とアプリケーション間の競合回避が図られました。
EMSと仮想記憶
Intel 8086アーキテクチャのアドレス空間制限に対処するため、EMS(
Expanded Memory Specification)と呼ばれるメモリ管理方式が考案されました。これは、Upper Memory Areaと呼ばれるメモリ空間の一部を拡張して利用するもので、広く普及し、後のWindowsでもエミュレートされてサポートされていました。仮想記憶の登場により、単純なバンク切り換え機構は次第に廃れていきました。仮想記憶では、論理アドレス空間を小さな単位(
ページやセグメント)に分割し、アドレス変換機構によって物理アドレスにマッピングすることで、より大規模なアドレス空間を効率的に管理します。
まとめ
バンク切り換えは、
コンピュータの歴史において重要な役割を果たしたメモリ管理技術です。限られた資源の中でより大きなメモリ空間を実現するための工夫であり、その後の仮想記憶技術への発展にも繋がっています。しかし、その複雑さや機種依存性などから、現代では仮想記憶に取って代わられています。それでも、
8ビットパソコン時代の革新的な技術として、その歴史的意義は依然として大きいと言えるでしょう。