第 2 章 SLOT  この章は、MSXマガジン1989年2月号、1989年3月号の"MSX2+テクニカル探検隊"と、1990年11月号の"テクニカル・アナリシス"の記事を再編集したものである。 2.1 スロットって何だ  MSX カートリッジをセットするための穴は "カートリッジスロット"。でもスロットが意味するものは、MSX のメモリーを管理する機能でもある。この章では、もっとも重要で難解なスロットを説明するぞ。 2.1.1 CPU とメモリーはどうつながっているの  コンピューターを構成するもっとも重要な部品といったら、"CPU"とメモリー。CPU とは"中央処理装置(Center Prosessing Unit)"の略称で、コンピューター全体を管理し計算を行う装置のこと。一方メモリーとは、CPU が扱う情報を覚えるメモ帳のような装置を指す。  コンピューターが扱う情報は、数字の 0 と 1 を組み合わせた"2進数"で表されることは知ってのとおり。この2進数の1桁を"ビット(bit)"、8桁を"バイト(byte)"という。また、プログラムリストの中などで、2進数をそのまま表記すると桁数が多くなってしまうので、4ビットの2進数を0〜9とA〜Fの文字で表わす"16進数"もよく使われる。  これは間違えないでほしいのだけど、コンピューターの世界では、"キロ(K)"という単位が、1000倍ではなく1024倍を意味する。たとえば、64キロバイトのメモリーとは、64×1024=65536バイトのメモリーのこと。これは、65536×8=524288ビットでもあるわけだ。  これからのメモリーを管理するために、多くのマイクロコンピューターでは、1バイトごとにメモリーに番号が付けられている。それが"番地"や"アドレス"と呼ばれるもの。よくマシン語のプログラムなどで、"実行開始番地は8000H"などと書かれているのがそうだ。 2.1.2 8ビット CPU Z80 の内部を探る  CPU とメモリーは図 2.1 のように"アドレスバス"と"データバス"で接続されている。アドレスバスとは、CPU が読み書きしたいメモリーの番地を指定する信号を、CPU からめもリーへ送るための電線。データバスとは、メモリーの内容を通信するための電線のこと。前者が CPU からメモリーへの一方通行であるので対し、後者は双方向になている点に注意しよう。  turbo R 以前の MSX の CPU である "Z80" は、8ビット(物理的には 8 本の電線)のデータバスと、16 ビットのアドレスバスを持っている。これにより、64キロバイトのメモリーを 1 バイトずつ読み書きできるわけだ。このような CPU を "8ビット" CPU"、8ビット CPU が組み込まれたコンピューターを "8ビットコンピューター"と呼ぶ。だから MSX は 8ビットコンピューターというわけだ。  さて、アドレスバスに関して具体的に説明すると、16ビットのアドレスバスで指定できるメモリー番地は、2進数の 0000000000000000B から(Bは2進数を表わす記号) 1111111111111111B まで。これを 10進数で表わすと 0〜65535 まで、16進数で表わすと 0000H〜FFFFH番地までということになる。(Hは16進数を表わす)。各番号の内容は 8ビット(=1バイト)で、10進数では 0〜255 までの値を表わす。また、バイト単位で表わされたこれらのメモリーを、キロバイト単位に直すと 64。ゆえに 8ビットコンピューターには、64キロバイトのメモリーを接続することができるというわけだ。  MSXは 8ビットコンピューターだと前に書いたけど、最近は 16ビットコンピューター(16ビット CPU を搭載したコンピューター)も普及している。この場合はデータバスが 16ビットなので、8ビットコンピューターに比べ 2倍の情報を 1度に読み書きできる。アドレスバスも多くなり、それだけ多くのメモリーを接続できるなどの利点が多い。けれど配線が複雑になることから、比較的高価になってしまうのが現状だ。また、大型コンピューターの多くは、32ビットや 64ビットのデータバスとアドレスバスを持っている。  なお、MSX turbo R には 16ビット CPU の R800 が搭載されたが、従来のカートリッジを接続できるように、データバスは 8ビットのままだ。 2.1.3 メモリーの種類は働きによってイロイロ  メモリーには多くの種類がある。まず、部品の種類によって分類されるのが "ROM" と "RAM"。ROM(Read Only Memory)とは内容を書き換えられないかわりに、電源を切っても内容が残るメモリーのこと。MSX の本体に内蔵されたソフトウェア(BASICなど)や、カートリッジで供給されるソフトウェアは、すべてこの ROM の中に書き込まれるわけだ。また MSX2+ になって標準装備された漢字 ROM とは、漢字の文字の形を書き込んだ専用の ROM のこと。  RAM(Randum Access Memory)とは、内容を自由に書き換えられるけれど、電源を切るとその内容が消えてしまうメモリー。プログラム中で計算結果を一時的に記憶させたり、フロッピーディスクからプログラムを読み込んで実行させたりするのに利用する。たとえば、Mマガに載ったショートプログラムを打ち込んでゲームをするなんて場合も、この RAM に記憶されるわけだ。  なお、"SRAM" とは、消費電力が小さい RAM で、電池で動くノートパソコンやポータブルワープロ、そして、MSX やファミコンのバッテリーバックアップ付きゲームカートリッジにも使われているものだ。  このほかにも、メモリーを使い方によって分類することも可能。図2.1のように、CPU に直結しているメモリーは "主記憶" または "メインメモリー"。つまり、MSX 本体の漢字 ROM 以外の ROM と、64キロバイトのメイン RAM は、MSX のメインメモリーというわけだ。  また MSX には、このほかに "ビデオ RAM(VRAM)" というメモリーもある。ビデオ RAM とは、テレビ画面に表示する図形や文字を記録するための RAM。コンピューターの機種によっては、ビデオ RAM が CPU に直結しているものもあるけど、MSX では VDP(ビデオ・ディスプレー・プロセッサーの略)という専用の部品を経由して、CPU とビデオ RAM が接続されている。  ここまでの基本的な話は、MSX に限らず、コンピューターについてのもっとも基本的な知識。MSX に付属してくる BASIC の入門書などにも、詳しく書かれていると思うから参考にしよう。 2.1.4 MSXのスロットってどんなものなの ?  はじめにも書いたように、8ビット CPU に接続できるメインメモリーは 64 キロバイト。しかし、これで話が済んでいたのは、初期の 8ビットコンピューターだけ。最近はいろいろな方法を使って、64キロバイトを超えるメモリーを接続できるようになっている。  MSX の場合は"スロット切り替え"という方法。図2.2のように 64キロバイトのメモリーを 4組用意し、それぞれを切り替えて使うことで、最大256キロバイトのメモリーを扱うことが可能になる。これらのメモリーは"基本スロット"と呼ばれ、マシンに用意されたカートリッジスロットなどにも割り当てられている。  さらに、1個の基本スロットの代わりに 4組の "拡張スロット" を切り替えて使う方法もある。この場合には、64キロバイトのメモリーが全部で 16組。つまり最大で 1メガ(1014キロ)バイトのメモリーを接続できるというわけ。ただし、拡張スロットをさらに拡張することはできない。  さて、スロットを切り替えることで、64キロバイトを超えるメモリーを扱えるのはいいのだけど、その際にメモリー全体が同時に切り替わってしまうのは不便利だ。そこで MSX では、メモリーを "ページ" という単位に分割して、扱うように考えられている。  メモリーの 0000H〜3FFFH 番地までの 16キロバイトをページ0、4000H〜8000H 番地までの 16キロバイトをページ1。同様にして、8000H〜BFFFH までをページ2、C000H〜FFFFH までをページ3 という具合。どれぞれ 16キロバイトを 1ブロックとしたページごとに、べつべつのスロットを選択できるわけだ。  たとえば、BASIC のディスク入出力関係の命令が処理されているときは、ページ0 が BASIC インタープリタのメイン ROM、ページ1 がディスクインターフェースの ROM、ページ2 と 3 がメイン RAM に切り替えられる(図2.3参照)  BASIC インタープリタというのは、BASIC で書かれたプログラムを処理するプログラムのことで、MSX 本体の ROM に書き込まれている。MSX1 では 32キロバイトの ROM に入っていたけれど、MSX2 では 48キロバイト。そこで MSX2 では ROM が 2個に分けられ、MSX1 と共通の部分が 32キロバイトの"メイン ROM"に、MSX2で拡張された機能が 16キロバイトの"サブ ROM"に書き込まれている。  また、ディスク内蔵型の MSX や、外部ドライブのインターフェースカートリッジには、16キロバイトの ROM が内蔵。BASIC のディスク入出力を処理するためのプログラム(DISK-BASIC)が、書き込まれているというわけだ。だから、ディスク入出力中には、図2.3のような状態になるわけだ。 2.1.5 MSXの拡張性の秘密はスロットにあった  MSX のスロットは、メモリーを増設するだけでなく、MSX の機能を拡張するためにも使われる。ゲームカートリッジ内の 16キロバイトの ROM がスロットに接続されている。そしてディスク入出力が行われているときには、自動的にメモリーがディスクインターフェース ROM のスロットに切り替えらるわけだ。このため、ディスクインターフェース自体が本体に内蔵されていても、カートリッジとして接続されていても、プログラムの動作には支障がない。  また、ディスクインターフェースを接続すると、"CALL FORMAT"という命令が、通信カートリッジを接続すると、"CALL TELCOM"という拡張 BASIC の命令が、使えるようになる。これらの拡張命令は、カートリッジ内の ROM によって処理されてるわけだ。MSX 以外の多くのパソコンでは、周辺機器を使うときにそれらを制御するプログラムをディスクから読み込む必要がある。ところが MSX では、インターフェースカートリッジを接続するだけで、自動的に BASIC の命令が拡張されるのだ。  また、MSX-DOS を機能アップした"日本語 MSX-DOS2"や、統合化ソフトとして話題の"HALNOTE"、そして turbo R 専用の GUI(グラフィカル・ユーザー・インターフェース)として登場した "MSXView" も、カートリッジで供給されるソフトのひとつ。このように、ROM カートリッジをスロットに接続すると簡単に機能を拡張できることが、ほかのパソコンにない MSX の長所なのだ。  スロットは便利な機能だけど、それを使いこなしたプログラムを開発するのは、なかなか大変なこと。Z80 CPU のマシン語プログラムを自在に書けるプログラマーにとっても、スロットの概念を本当に理解するには 1年以上かかるかもしれない。 2.1.6 こう変わった MSX2+ のスロット  いままで書いてきたように、MSX マシンに豊富な拡張性を持たせ、特徴づけてくれたのがスロットというもの。けれども、このスロットはまた、MSX の弱点でもあった。それが、"従来の MSX では機種によってスロット構成が異なるために、ソフトウェアの互換性の問題がおこりやすい"ということだ。  たとえば、スロット1 と 3 がカートリッジスロットに割り当てられている機種で、ある特定のソフトが動かない。また、スロット3 の拡張スロットに RAM が置かれていると、DOS からサブ ROM の機能を使えなかったりするなど、慎重にプログラムを作って、すべての MSX マシンについて動作を確認すれば、こうした問題は避けられるはず。けれども、あらゆるスロット構成のマシンに対応させると、プログラムが長くなったり、実行速度が遅くなったりするという弊害も出てくる。一筋縄ではいかないのがスロットというわけだ。  これが MSX2+ になって、やっとスロット構成に関するある程度の基準が決められた。図2.4 と図2.5 に示したのが、その MSX2+ のスロット構成の例。本体に内蔵するソフトウェアの数によって、スロット3 のみを拡張する場合と、スロット0 とスロット3 を拡張する場合とに分けられている。  図2.4に掲載したのが、スロット3 のみを拡張する場合。基本スロット0 に、BASIC のメイン ROM を置き、スロット1 とスロット2 を外部カートリッジとるす。 そしてスロット3 の拡張スロットのどれかひとつに、64キロバイトの RAM(メイン RAM)を、0〜3 ページまでかならず同じスロットに RAM がくるように置く。同様に、サブ ROM、漢字ドライバー、単漢字変換辞書の合計 48キロバイトの ROM を、スロット3 の拡張スロットのどれかひとつに置くという具合。図ではスロット3 の 0(基本スロット3 の 0番目の拡張スロット)に RAM が、3 の 1 に ROM が置かれているけど、これは機種によって異なるわけだ。  これに対し図2.5は、スロット0 とスロット3 の両方を拡張する場合。基本スロット0 の拡張スロット0 に、メイン ROM が置かれている。スロット3 の構成は。図2.4の場合とほぼ同じ。ディスクインターフェースを内蔵する場合には、スロット0 の拡張ではなく、かならずスロット3 の拡張に ROM が置かれることに注意しよう。  なお、図2.4 と図2.5 の薄い灰色の部分。つまり、ディスクインターフェース、MSX-MUSIC(FM音源)、通信、連文節変換辞書の各 ROM に関しては、MSX2+ のオプション仕様となっている。そのため、本体に内蔵されずに、外部カートリッジとして接続されることもある。  さて、図2.5 と同じだけの内蔵ソフトウェアを持つ MSX2+ には、理論上 36通りのスロット構成が考えられる。「うわー、そんなにあるのか」なんて声も聞こえてきそうだけど、これでも MSX2+ のスロット構成よりは、組み合わせの数が減っているのだ。また、サブ ROM と漢字ドライバーと単漢字変換辞書がかならず同じスロットに置かれることで、MSX2+ の漢字入出力が予想よりも速くなったはずだ。 2.1.7 スロットを拡張しちゃえ  MSX マシンにひとるかふたつ用意された外部カートリッジスロット(普段ゲームカートリッジを差し込むところ)は、どれも基本スロット。そこで、"スロット拡張器"を接続して、4個の拡張スロットに拡張することができる。たとえば本体の 2個のスロット両方に、スロット拡張木を接続すれば、合計 8個ものスロットが誕生するわけだ。  ただ注意しなくてはいけないのが、拡張スロットでは動かないカートリッジもあるということ。日本語 MSX-DOS2(RAM を内蔵したタイプ)なども、そのひとつ。使いたいソフトを確認してから拡張しよう。