MSX Datapack wiki化計画

3章 システムの動作モード

 3.1 CPUのモード

 MSX turbo Rには、MSX-DOS2とMSX-DOS1との両方が内蔵されています。自動的に起動するアプリケーションプログラムは、どちらの環境で動作するかを選択することができます。また、起動するDOSまたはDisk BASICのバージョンによって、システムがR800モードになるか、Z80モードになるかが異なります。その組み合わせは、以下のとおりです。

表1.3 システムのバージョンとCPUモードとの組み合わせ

バージョンモード
MSX-DOS2または、Disk BASIC 2.0 R800 DRAMモード
MSX-DOS1または、Disk BASIC 1.0 Z80 モード

 この切り替えは、システムソフトウェアが自動的に行います。これらは、アプリケーションソフトウェアがBIOSの【CHGCPU(0180H/MAIN)】をコールして、CPUを切り換えることもできます。
 以下では、CPUの動作モードについて説明します。

3.1.1 R800 ROMモードとR800 DRAMモード

 MSX turbo Rに搭載されているCPUのR800は、DRAM上のプログラムやデータをROMより速く読み書きできる機能を持っています。したがって、ROM上にあるBIOSやBASICなどのシステムソフトウェアをDRAM上において実行すれば、動作速度が速くなります。そのため、MSX turbo Rには、システムソフトウェアをDRAMに置いて実行する機能があります。
 システムソフトウェアが、ROMから読み出されて実行されている状態を「R800 ROMモード」、DRAMから読み出されて実行されている状態を「R800 DRAMモード」と呼びます。
 MSX turbo Rでは、DRAM上におかれたシステムソフトウェアは、ROM上におかれたシステムプログラムと同じスロットに見えるハードウェアになっている(S1990が実現している)ので、アプリケーションプログラム側では、R800 ROMモードかR800 DRAMモードかを、意識する必要はありません。
 R800 DRAMモードのときは、システムソフトウェアのあるDRAMはライトプロテクトされているので、RAMとしてアクセスすることはできません。システムソフトウェアとして読めるだけです。
 MSX turbo Rは、DRAMをメモリマッパーをとおしてアクセスしています。システムソフトウェアのあるDRAMは、メモリマッパー上に実装されているDRAMの最後の4セグメントです。例えば、MSX turbo R本体に内蔵されているRAMが256KBならば、全セグメント数は256KB÷16KB=16セグメントとなり、セグメント番号12〜15のセグメントが使われることになります。
 また、この4セグメントは本体内蔵のDRAMのサイズ毎にイメージが見えます。256KBであれば、セグメント番号12〜15のセグメントがセグメント番号28〜31、44〜47、60〜63にも見えます。内蔵RAMが512KBであれば、セグメント番号28〜31のセグメントがセグメント番号60〜63にも見えます。
 つまり、システムプログラムの転送先は、本体に内蔵されたRAM容量にかかわらず、セグメント番号60〜63になるわけです。
 Z80モードやR800 ROMモードのときは、この4つのセグメントは未使用になります。この領域の使い方は、6章「マッパーRAMセグメント」を参照して下さい。

3.1.2 Z80モード

 Z80モードでは、Z80 CPUが動作します。したがって、システムの動作速度はMSX2+と同じになります。

 3.2 ソフトウェアの起動

 アプリケーションには、大きく分けて

  1. ROMカートリッジの機械語プログラム
  2. ROMカートリッジのBASICプログラム
  3. フロッピーディスクの機械語プログラム
  4. フロッピーディスクのBASICプログラム

の4種類があります。以下では、この4種類のプログラムによって、どの様に日本語MSX-DOS2とMSX-DOS1とが選択されるかを説明します。

3.2.1 ROMカートリッジの機械語プログラム

 Disk BASIC 1.0で、ROMカートリッジの機械語プログラムを起動するためには、いままでと同じように、カートリッジのINITルーチンで、起動させたいプログラムへのインタースロットコールを【H.STKE(0FEDAH)】に書いて、リターンします。すると、すべてのカートリッジの初期設定が終わり、アプリケーションプログラムが起動するときは、Disk BASIC 1.0の環境になります。
 Disk BASIC 2.0でアプリケーションプログラムを起動するためには、カートリッジのINITルーチンが、【H.STKE(0FEDAH)】を設定するときに、【USRTAB(0F39AH)】に074Hを、【USRTAB+1】に064Hを書き込み、リターンします。すると、すべてのカートリッジの初期設定が終わり、アプリケーションプログラムが起動するときは、Disk BASIC 2.0の環境になります。
 ROMカートリッジの機械語ソフトウェアを起動させる手順の詳細は、Volume 1の第2部7.10.3「オートスタート」とVolume 2の第5部3章「カートリッジソフトの作成法」とか、「MSX2 テクニカルハンドブック」のP.87とP.328〜P.339とを参照して下さい。なお、カートリッジソフトの作成についての記述は、「MSX-Datapack」と「MSX2 テクニカルハンドブック」とは同じです。

3.2.2 ROMカートリッジのBASICプログラム

 Disk BASIC 1.0で、ROMカートリッジのBASICプログラムを起動するためには、今までと同じように、ヘッダーのTEXTにBASICプログラムの番地を設定します。
 Disk BASIC 2.0でBASICのプログラムを起動するためには、それに加えて、ヘッダーのINITルーチンで、【USRTAB(0F39AH)】に074Hを、【USRTAB+1】に064Hを書き込みます。
 ROMカートリッジの機械語ソフトウェアを起動させる手順の詳細は、Volume 1の第2部7.10.3「オートスタート」とVolume 2の第5部3章「カートリッジソフトの作成法」とか、「MSX2 テクニカルハンドブック」のP.87とP.328〜P.339とを参照してください。なお、カートリッジソフトの作成についての記述は、「MSX-Datapack」と「MSX2 テクニカルハンドブック」とは同じです。

3.2.3 フロッピーディスクの機械語プログラム

AUTOEXEC.BATによる立ち上げ

 MSX-DOS1で、AUTOEXEC.BATによりプログラムを起動するためには、MSX-DOS1でフォーマットしたフロッピーディスクに、MSXDOS.SYSとCOMMAND.COMをコピーし、AUTOEXEC.BATおよびアプリケーションプログラムを作成(またはコピー)します。
 MSX-DOS2で、AUTOEXEC.BATによりプログラムを起動するためには、MSX-DOS2でフォーマットしたフロッピーディスクに、MSXDOS2.SYSとCOMMAND2.COMとをコピーし、AUTOEXEC.BATおよびアプリケーションプログラムを作成(またはコピー)します。

ブートセクタによる立ち上げ

 MSX-DOS1で、ブートセクタによりプログラムを起動するためには、MSX-DOS1でフォーマットしたフロッピーディスクのブートセクタの001EH〜00FFHにアプリケーションプログラムを読み込んで実行させるプログラムを書き込みます。
 最初に、001EH〜00FFHに書き込まれたプログラムは、0C01EH〜0C0FFHに読み込まれ、キャリーフラグを0にしてコールされます。この時点では、ページ1をRAMに切り替えることができないので、ユーザープログラムの起動には不適当です。次に、もう1度MSX-DOS1の環境下で、キャリーフラグを1にしてコールされます。この時スロットの状態は以下のようになっています。

ページ内容
0 RAM
1 Disk ROM
2 RAM
3 RAM

 また、レジスタには以下の情報が入っています。

レジスタ内容
A 0ならば電源投入直後を示す。
DE この内容をコールすると、ページ1のDisk ROMがRAMに切り替わる。
HL ディスクエラー処理ルーチンへのポインタへのポインタ(MSX Datapack Volume 1の第2部7.9.3「エラー処理」参照)。

 MSX-DOS2で、ブートセクタによりプログラムを起動するためには、MSX-DOS2でフォーマットしたフロッピーディスクのブートセクタの0030H〜00FFHに、アプリケーションプログラムを読み込んで実行させるプログラムを書き込みます。
 最初に、0030H〜00FFHに書き込まれたプログラムは、0C030H〜0C0FFHに読み込まれ、キャリーフラグを0にしてコールされます。この時点では、ページ1をRAMに切り替えることができないので、ユーザープログラムの起動には不適当です。次に、もう1度MSX-DOS2の環境下で、キャリーフラグを1にしてコールされます。そのときのスロットの状態やレジスタの情報は、MSX-DOS1と同じです。
 MSX-DOSのブートシーケンスについての詳細は、MSX-Datapack Volume 1の第3部3.1「MSX-DOSの起動」か「MSX2 テクニカルハンドブック」のP97〜98を参照して下さい。
 

3.2.4 フロッピーディスクのBASICプログラム

 Disk BASIC 1.0で、BASICプログラムを起動するためには、MSX-DOS1でフォーマットしたディスクに、AUTOEXEC.BASおよびアプリケーションプログラムを作成(またはコピー)します。MSXDOS.SYSとCOMMAND.COMとは入れてはいけません。
 Disk BASIC 2.0で、BASICプログラムを起動するためには、MSX-DOS2でフォーマットしたディスクに、AUTOEXEC.BASおよびアプリケーションプログラムを作成(またはコピー)します。MSXDOS2.SYSとCOMMAND2.COMとは入れてはいけません。