MSX Datapack wiki化計画

1章 スロット

 スロットは大量のアドレス空間を確保するためのアドレス空間の切り替えをするもので、MSXのアドレスバスに接続されるメモリやデバイスは、すべてスロットを介して実装されています。それは、本体内にあるBASICのROMであろうとMSX-DOSモード時のRAMであろうと例外ではありません。カートリッジソフトを接続する場所も、1つのスロットです。ここでは、スロットに接続されたソフトウェアやデバイスの取り扱い方を説明します。

1.1 基本スロットと拡張スロット

 スロットには基本スロットと拡張スロットの2種類があります。「基本スロット」とは、図5.1に示すようにCPUのアドレスバスに直結するスロットを指し、MSXの仕様では最大4個持つことができます。基本スロットは、スロット拡張ボックスを接続することにより(本体内で拡張されていることもある)、最大4個のスロットに拡張でき、このときのスロットを「拡張スロット」と呼びます。4個の基本スロットをそれぞれ4つの拡張スロットに拡張した場合、スロットの数は最大の16個となり、16スロット×64Kバイト=1Mバイトのアドレス空間をアクセスすることが可能です。
 なお、拡張スロットにさらに拡張ボックスを差し込んだ場合はシステム自体が起動できなくなりますので、このようなことは行わないで下さい。MSX標準のカートリッジ用スロットは必ず基本スロットですが、各機種のオプションハードウェア専用コネクタは、拡張スロットに接続されていることがあります。


図5.1 基本スロットと拡張スロット

 各スロットは0000H〜FFFFHまでの64Kバイトのアドレス空間を持ちますが、MSXではそれを16Kバイトずつ4つに分け「ページ」として管理しています。CPUはページごとに任意のスロットを選択してアクセスでき、図5.2のように、いくつかのスロットから必要な部分だけを選んで組み合わせることが可能です。ただし、ある番号のページを異なる番号のページに割り当てることはできません。


図5.2 ページの選択の例

1.2 スロットの選択

 スロットの選択方法は、基本スロットと拡張スロットでは異なります。基本スロットの場合はA8H番地のI/Oポートによって行い(図5.3)、拡張スロットの場合は実装された拡張カートリッジの「拡張スロット選択レジスタ(FFFFH)」によって行います(図5.4)。しかし、それらを直接変更することはたいへん危険ですから、スロットの切り換えはスロットの構造を理解した上で、BIOSのENASLT(0024H/MAIN)を呼び出して切り替えて下さい。他のスロットにあるプログラムを呼び出したい場合は、2章で説明するインタースロットコールを使用してください。


図5.3 基本スロットの選択


図5.4 拡張スロットの選択

 どこのスロットにMAIN ROMやRAMが実装されているか、またカートリッジ用のスロットが何番のスロットであるかは機種によって異なります。もし手持ちのMSXがどのようにスロットを使用しているかを知りたい人はマニュアルなどで調べて下さい。しかし、MSXはどのスロットに何があろうと正常な動作ができるように仕様が決められていますから、その仕様に準じている限り、通常はスロットの使用状況を気にする必要はありません。
 しかし、場合によっては特定のソフトウェアがどのスロット上に置かれているのかを知る必要が生じることもあります。例えば、BASICのMAIN ROMは基本スロット#0、または基本スロット#0を拡張した拡張スロット#0-0に置くという仕様ですが、MSX1にMSX2の機能を追加するバージョンアップアダプタでは、MAIN ROMがスロット#0やスロット#0-0以外の上に置かれることになります。また、MSX2のSUB ROMが入っているスロットは機種によってまちまちで、このような場合、下記のワークエリアを参照することにより、BASICインタープリタのROMが置かれているスロットを知ることが可能です。スロット情報は図5.5のフォーマットで得られます。DOSからBIOSを呼び出すときも、この方法を使用してMAIN ROMのスロットを調べて下さい。

【EXPTBL(FCC1H,1)】MAIN ROMのスロット
【EXBRSA(FAF8H,1)】SUB ROMのスロット(MSX1では0)


図5.5 スロットのフォーマット

 また、あるルーチンがページ1とページ2(4000H〜BFFFH)にまたがっている場合、このルーチンの中で1ページから2ページへ分岐が起こるときには、ページ2にページ1と同じスロットが選択されていなければなりません。そのためには、ページ1でまず自分のいるスロットを調べ、ページ2をそのスロットに切り換えるという作業が必要です。現在自分がどのスロットにいるのか、という情報を知るためには、添付のフロッピーディスクに入っている「WHEREAMI.MAC」を使用します。