---------------------------------------------------------------------------- MU.COM μ - Memory mapper Utility system - for MSX1/2/2+/turboR version 1.05 Copyright (C) 1993-1995 Yoshikazu Yamamoto ---------------------------------------------------------------------------- 【1】はじめに μは DOS1 上で動作する RAM ディスクドライバつきマッパ管理システムです。 RAM ディスクは 2 ドライブまで使用することができます。 μを使用するためにはマッパ RAM が最低 80K バイト必要です。なお、μは DOS2 上では動作しません。turboR で 使用する時は、マシン起動時にフルキーボード上の 1 を押しながら起動して下さい。 【2】起動方法 μを使用するためには、MSX-DOS が起動可能なディスク(MSX-DOS でフォーマットし たディスク)に MSXDOS.SYS と COMMAND.COM、MU.COM をコピーしてください。 μを起動するには上記のディスクをドライブに挿入して A> MU [オプション] [RAM disk1 のサイズ [RAM disk2 のサイズ]]  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ と入力します。 RAM disk1(RAM disk2)のサイズはキロバイト単位で指定してください。 このとき 16K 未満の端数は切り上げられます。 また、 992 を越える数を指定した場合は 992 として処理されます。 指定できるオプションは以下のものです。ただし、CPU のモードを切り替えるオプシ ョンは turboR で使用した場合のみ有効です。 ・/Z80 … CPU を Z80 モードにします。 ・/ROM … CPU を R800 ROM モードにします。 ・/DRAM … CPU を R800 DRAM モードにします。 ・/B … AUTOEXEC.BAT 中でμを組み込む場合に指定します。 (詳細は後述) CPU モード、RAM ディスク容量は後述するコンフィギュレーションファイルでも設定 できます。 エラーが起こらなければ、 マッパ RAM の存在するスロットと容量、及び、RAM ディ スクの容量を表示して DOS のプロンプトが表示されます。 以下に、例を示します。 A>MU  ̄ コンフィギュレーションファイルの内容に従って各種設定を行いま す。 A>MU/ROM  ̄ ̄ ̄ CPU を R800 ROM モードにしてμを常駐させます。 このとき、RAM ディスクドライブのサイズはコンフィギュレーションファイルでの 指定となります。 A>MU 720  ̄ ̄ ̄ RAM ディスク 1 のサイズを 720K にします。 CPU のモード、 RAM ディスク 2 のサイズはコンフィギュレーションファイルに従いま す。 A>MU/DRAM 720 64  ̄ ̄ ̄ ̄ ̄ ̄ ̄ CPU のモードを R800 DRAM、 RAM ディスク 1 のサイズを 720K、 RAM ディスク 2 のサイズを 64K にしてμを常駐させます。 【3】エラーメッセージ μ起動時に以下のエラーが発生することがあります。 ・No mapper RAM. マッパ RAM がみつかりません。マッパ RAM をスロットに挿して下さい。 ・No enough segment. マッパ RAM の容量が不足(80K 未満)しています。マッパ RAM を増設して 下さい。 ・HIMSAV is modified. マシン起動後に何らかのプログラムがワークエリアを確保しています。一度、 リセットしてからμを起動し直して下さい。BASIC で _KANJI, _MUSIC など を実行したあとでμを起動するとこのエラーがでます。 また、DOS2 上で起 動した場合にもこのエラーがでます。 ・MU system already exists. すでにμは常駐しています。 【4】コンフィギュレーションファイル コンフィギュレーションファイルには、RAM ディスクの容量と turboR で使用した場 合の CPU モードが記述できます。 コンフィギュレーションファイルのファイル名は MU.CNF でカレントドライブから読み込まれます。 なお、コマンドラインでの指定がコンフィギュレーションファイルの内容より優先さ れます。 コンフィギュレーションファイルは、 属性 : 値 を一行に一つのフォーマットで並べたものです。以下、指定できる属性の説明をしま す。 ●RAMDISK1 RAM ディスクの第一ドライブの容量を指定します。値は数値でキロバイト単位で書き ます。指定できる数値は 0 〜 992 で、16K 未満の端数は切り上げられます。もし、 992 を越える数を指定した場合は 992 と同様に処理されます。フォーマットは、 RAMDISK1 : nn [K] です。既定値は 0 です。 ●RAMDISK2 RAM ディスクの第二ドライブの容量を指定します。指定方法は、RAMDISK1 と同じで、 フォーマットは、 RAMDISK2 : nn [K] です。 なお、RAM ディスクの第一ドライブの容量が 0 の場合は、この指定に関わら ず RAM ディスクは一切使用できませんので注意して下さい。既定値は 0 です。 ●CPUMODE turboR で使用した場合の CPU モードを指定します。MSX1/2/2+ では意味を持ちませ ん。指定する値は Z80, R800ROM, R800DRAM のいずれかです。フォーマットは、 CPUMODE : {Z80|R800ROM|R800DRAM} です。CPUMODE の指定がない場合は CPU モードの変更はしません。 コンフィギュレーションファイルの例を次に示します。 ========== (MU.CNF の例) ========== RAMDISK1 : 720 RAMDISK2 : 64 CPUMODE : R800ROM =================================== 【5】AUTOEXEC.BAT 中での組み込み μをバッチファイル内で組み込むようにした場合にはμを組み込んだところでバッチ ファイルの実行が停止してしまいます。 これは、μを組み込んだときに DOS を再起 動しているためです。 このため、AUTOEXEC.BAT 中でμを組み込み、RAM ディスクに ファイルをコピーするというようなことができませんでした。 そこで、 version 1.05 から /B オプションを追加してこのようなことができるよう にしました。 /B を付けてμを起動した場合は、 μを実行したところで一度画面がクリアされ、あ らためて DOS の起動時のメッセージが表示されます。 このとき、もう一度最初から AUTOEXEC.BAT が実行されます。二度目にμが起動されたときに、マッパ RAM と RAM ディスクの情報が表示され、AUTOEXEC.BAT の続きの行が実行されます。 このように、 AUTOEXEC.BAT は二度実行されますので、必ずμの組み込みは最初の行 で行って下さい。そうしないと、μの組み込む行までが二回実行されることになりま す。また、μの最初の実行と二回目の実行の間に他のプログラム等が実行されると二 回目の実行時にエラーメッセージが表示されたり、画面に変な文字が表示されたりす ることがあります。 以下に AUTOEXEC.BAT の例を示します。 ========== (AUTOEXEC.BAT の例) ========== MU/B 720 COPY MSXDOS.SYS C: COPY COMMAND.COM C: ========================================= 【6】μ拡張BIOS μ拡張 BIOS のデバイス番号は 84H です。 μ拡張 BIOS を使用するには、機能ごと のパラメータを設定して 0FFCAH をコールして下さい。 なお、 GET_VER 以外の拡張 BIOS を使用する時は、まず GET_VER でμシステムが存在することを確認したうえで 使用して下さい。 ●GET_VER 機能 μのバージョンを獲得します 名称 get version number (GET_VER) パラメータ A = 0 D = 84H E = 00H 結果 A = 1 HL = バージョン番号 (H:major version/L:minor version) 備考 μシステムが存在しない場合は A = 0 のままで返ってきます ●ALL_SYSSEG 機能 システムセグメントの割当をします 名称 allocate system segment (ALL_SYSSEG) パラメータ D = 84H E = 10H 結果 Cy = 0:割当に成功 / 1:割当に失敗 A = セグメント番号 B = スロット番号 ●FRE_SEG 機能 セグメントの解放をします 名称 free segment (FRE_SEG) パラメータ A = セグメント番号 B = スロット番号 D = 84H E = 11H 結果 Cy = 0:解放に成功 / 1:解放に失敗 補足 システムセグメント・ユーザセグメントのどちらのセグメントの解 放もこの拡張 BIOS を使用します ●ALL_USRSEG 機能 ユーザセグメントの割当をします 名称 allocate user segment (ALL_USRSEG) パラメータ D = 84H E = 20H 結果 Cy = 0:割当に成功 / 1:割当に失敗 A = セグメント番号 B = スロット番号 ●FRE_USRSEGS 機能 すべてのユーザセグメントを解放します 名称 free all user segments (FRE_USRSEGS) パラメータ D = 84H E = 21H 結果 なし 【7】DOS2互換マッパ拡張BIOS DOS2 互換マッパ拡張 BIOS のデバイス番号は 04H です。 これは、DOS2 が提供して いるマッパ拡張 BIOS と同じです。 DOS2 互換マッパ拡張 BIOS を使用するには、機 能ごとのパラメータを設定して 0FFCAH をコールして下さい。 ●GET_VARTAB 機能 マッパ変数テーブルの番地を獲得します 名称 get mapper variable table (GET_VARTAB) パラメータ A = 0 D = 04H E = 01H 結果 A = プライマリマッパのスロット番号 HL = マッパ変数テーブルの先頭アドレス 備考 マッパ BIOS が存在しない場合は A = 0 のままで返ってきます ●GET_JMPTAB 機能 マッパジャンプテーブルの番地を獲得します 名称 get mapper jump table (GET_JMPTAB) パラメータ D = 04H E = 02H 結果 A = プライマリマッパの総セグメント数 B = プライマリマッパのスロット番号 C = プライマリマッパの未使用セグメント数 HL = マッパジャンプテーブルの先頭アドレス マッパ変数テーブルとマッパジャンプテーブルのフォーマットは以下の様になってい ます。 ・マッパ変数テーブル オフセット 機能 0 マッパのスロット番号 1 16K RAM セグメントの総数 2 未使用の 16K RAM セグメントの数 3 システムに割り当てられた 16K RAM セグメントの数 4 ユーザに割り当てられた 16K RAM セグメントの数 5-7 未使用。予約。 8- ほかのマッパのスロット なければ、オフセット 8 の値は 0 ・マッパジャンプテーブル オフセット 名称 機能 0H ALL_SEG 16K のセグメントを割り当てます 3H FRE_SEG 16K のセグメントを解放します 6H RD_SEG A セグメントの HL 番地の 1 バイトを読みます 9H WR_SEG A セグメントの HL 番地へ E の 1 バイトを書きます CH CAL_SEG インタセグメントコール FH CALLS インタセグメントコール 12H PUT_PH セグメントをページ (HL) に置きます 15H GET_PH ページ (HL) の現在のセグメント番号を獲得します 18H PUT_P0 セグメントをページ 0 に置きます 1BH GET_P0 ページ 0 の現在のセグメント番号を獲得します 1EH PUT_P1 セグメントをページ 1 に置きます 21H GET_P1 ページ 1 の現在のセグメント番号を獲得します 24H PUT_P2 セグメントをページ 2 に置きます 27H GET_P2 ページ 2 の現在のセグメント番号を獲得します 2AH PUT_P3 何もしません 2DH GET_P3 ページ 3 の現在のセグメント番号を獲得します マッパサポートルーチンを以下に示します。エントリポイントは GET_JMPTAB で得ら れるマッパジャンプテーブルの先頭アドレスからのオフセットで示してあります。な お、 DOS2 のマッパ拡張 BIOS ではプログラム終了時に自動的にユーザセグメントは 解放されますが、μの DOS2 互換マッパ拡張 BIOS では解放されません。DOS に戻る 前にμ拡張 BIOS の FRE_USRSEGS を呼んでユーザセグメントの解放を行なって下さ い。 ●ALL_SEG 機能 プライマリマッパのセグメントを割り当てます 名称 allocate segment (ALL_SEG) オフセット +00H パラメータ A = 0 ユーザセグメントの割当 A = 1 システムセグメントの割当 B = 0 結果 Cy = 0:割当に成功 / 1:割当に失敗 A = セグメント番号 B = 0 使用レジスタ F 条件 スタックはページ 1 または 3 ●ALL_SEG 機能 複数マッパのセグメントを割り当てます 名称 allocate segment (ALL_SEG) オフセット +00H パラメータ A = 0 ユーザセグメントの割当 A = 1 システムセグメントの割当 B = スロット番号 (FxxxSSPP) と割当方法 F000SSPP 指定スロット割当 F001SSPP 指定以外スロット割当 F010SSPP 指定スロット優先割当※ F011SSPP 指定以外スロット優先割当※ ※そのスロットに空きセグメントがなければ、別のスロットか ら割り当てられます 結果 Cy = 0:割当に成功 / 1:割当に失敗 A = セグメント番号 B = スロット番号 使用レジスタ F 条件 スタックはページ 1 または 3 ●FRE_SEG 機能 セグメントを解放します 名称 free segment (FRE_SEG) オフセット +03H パラメータ A = セグメント番号 B = スロット番号(0 ならばプライマリスロット) 結果 Cy = 0:解放に成功 / 1:解放に失敗 使用レジスタ AF 条件 スタックはページ 1 または 3 ●RD_SEG 機能 セグメントから 1 バイトのデータを読みます 名称 read segment (RD_SEG) オフセット +06H パラメータ A = セグメント番号 HL = アドレス(上位 2 ビットは無視されます) 結果 A = 読まれた値 使用レジスタ F 条件 ページ 2 はマッパスロット スタックはその他のページ 備考 割り込みは禁止されて戻ります ●WR_SEG 機能 セグメントに 1 バイトのデータを書きます 名称 write segment (WR_SEG) オフセット +09H パラメータ A = セグメント番号 HL = アドレス(上位 2 ビットは無視されます) E = 書き込む値 結果 なし 条件 ページ 2 はマッパスロット スタックはその他のページ 備考 割り込みは禁止されて戻ります ●CAL_SEG 機能 セグメントをコールします 名称 call segment (CAL_SEG) オフセット +0CH パラメータ IX = アドレス(ページ 3 は不可) IY = 上位 8 ビットにセグメント番号 AF, BC, DE, HL はコールされたプログラムに渡されます 結果 AF, BC, DE, HL がコールされたプログラムから返されます 使用レジスタ AF', BC', DE', HL', IX, IY 条件 スタックはコールされるページにない コールされるページはマッパスロット 備考 割り込みの状態は変わりません ●CALLS 機能 セグメントをコールします 名称 call segment (CALLS) オフセット +0FH パラメータ AF, BC, DE, HL はコールされたプログラムに渡されます 結果 AF, BC, DE, HL がコールされたプログラムから返されます 使用レジスタ AF', BC', DE', HL', IX, IY 条件 スタックはコールされるページにない コールされるページはマッパスロット 備考 割り込みの状態は変わりません 補足 BIOS の 30H 番地のインタスロットコールと同様に、 CALL CALLS DB セグメント番号 DW アドレス(ページ 3 は不可) と、コールするセグメントと番地を指定します ●PUT_PH 機能 指定されたページのセグメントを切り替えます 名称 PUT_PH オフセット +12H パラメータ A = セグメント番号 H = 上位 2 ビットがページ(ページ 3 は不可) 結果 なし 使用レジスタ なし 補足 DOS に戻る前に必ずセグメントをもとに戻して下さい ●GET_PH 機能 指定されたページのセグメントの値を調べます 名称 GET_PH オフセット +15H パラメータ H = 上位 2 ビットがページ 結果 A = セグメント番号 使用レジスタ なし ●PUT_P* 機能 指定されたページのセグメントを切り替えます 名称 PUT_P0, PUT_P1, PUT_P2 オフセット +18H PUT_P0 +1EH PUT_P1 +24H PUT_P2 パラメータ A = セグメント番号 結果 なし 使用レジスタ なし 補足 DOS に戻る前に必ずセグメントをもとに戻して下さい ●GET_P* 機能 指定されたページのセグメントの値を調べます 名称 GET_P0, GET_P1, GET_P2, GET_P3 オフセット +1BH GET_P0 +21H GET_P1 +27H GET_P2 +2DH GET_P3 パラメータ なし 結果 A = セグメント番号 使用レジスタ なし 【8】参考文献 [1]“MSX2 テクニカル・ハンドブック”、アスキー出版局、1986 [2]“MSX マガジン”、株式会社アスキー、Jan-Mar 1991 [3]“MSX テクニカルガイドブック 第四版”、ASCAT 編集部、1992 [4]“MSX テクニカルガイドブック ディスク編 第二版”、ASCAT 編集部、1993 【9】使用/配布/転載条件・権利 このソフトウェアの著作権は放棄されていません。 このソフトウェアは、営利目的でない限り、無料で使用/配布/転載ができます。た だし、転載する場合は事前に作者まで連絡を下さい。 このソフトウェアを使用した結果に対するいかなる責任も負いません。 --- Author: Yoshikazu Yamamoto (山本義一) Date: 1995/08/13