#0039/9999 Q&A集 ★タイトル (88VAUSER) 95/11/01 00:00 (147) 4.4.1 バンク切り替えポートとは何ですか? ★内容 バンクを切り替える為のポートです (^^; PC−88VAのCPU(μPD9002=V30相当)には、最大で1Mバイト迄の メモリしか接続できません。 漢字ROM、GVRAM、メインメモリ、BIOS……到底、1Mバイトだけでは足り ません。 そこで、メモリの1部を必要に応じて切り替えて使おうというのがバンク切り替え方式 、「バンクメモリ」や「EMS」などの規格です。 また、BIOS等のROMの一部もバンク切り替え方式でアクセスするようになってい ます。 バンクを切り替えるには、バンク切り替えポートに特定の値をセットする事によって行 ないます。 但し、EMSの場合はEMSドライバ経由でページ(=バンク)を指定することになっ ており、ユーザーが直接ページ切り替えポートを触ってはいけません。 また、ROMのバンクを切り替えた場合、元のバンクに戻しておかないと暴走すること があります。 ※ 単に「バンク」というと、「バンクメモリ」のバンクを指す事が多いようです。 VA/2/3の標準メモリ機のメモリ配置は以下のようになっています。 ? ? 640K???????????A0000h ? ? ? メモリ未実装 ? ? ? 512K???????????80000h ? ? ? ? ? ? 384K? ?60000h ? ? ? ? ? ? 256K? ?40000h ? ? ? メインメモリ ? ? ? 128K? ?20000h ? ? ? ? ? ? ???????????00000h オプションの拡張メモリ(バンクメモリ)を装備すると、以下のようになります。 ? ? 640K???????????A0000h??????????????????????? ? ? ? ? ?拡張メモリバンク0? バンク1 ? バンク2 ? バンク3 ? ? ? ? 512K???????????80000h??????????????????????? ? ? ? ? ? ? 384K? ?60000h ? ? ? ? ? ? 256K? ?40000h ? ? ? メインメモリ ? ? ? 128K? ?20000h ? ? ? ? ? ? ???????????00000h 通常はCPU(ソフト)側から見れば、80000h〜9FFFFh(512K〜640K) のアドレス空間 には拡張メモリの「バンク0」の内容が現われています。 もし、バンク1の内容にアクセスしたいなら、80000h〜9FFFFh のアドレス空間を 「バンク1」に切り替える必要があり、この指示をするのがバンク切り替えポートです 「バンク1」に切り替えると、「バンク0」の内容はCPU側からは見えなくなります バンク切り替えの機能は、VA本体ではなく拡張RAMボードが持っています。 従って、拡張RAMボードの種類によってバンク切り替えポートが違います。 1.NEC純正VA用増設RAMボード (PC−88VA−01/02) I/O−DATA製VA用増設RAMボード それほど流通していません。 →1D0h 2.PIO9234G等、9801用バンクメモリの流用 通称”I/Oバンク”、”バンクメモリ”と呼ばれているもの。 多くはこのタイプでしょうね。 EMSやプロテクトメモリ等に設定できる「汎用ボード」をバンクメモリとして 利用する場合もこのタイプです。 →ECh 3.9801−02N、9801−31等のメインメモリ増設用メモリ バンク切り替えをすることはできません。 従って、使用できるのは「バンク0」のみになります。 但し、「I/Oバンク」(*1)の定着する以前の旧式のボードや、不揮発RAMの1部 などに上記とは異なったポートを使用するものが存在します。 ※ バンク切り替えの注意点 もし、バンク切り替えをするプログラムがバンク0 80000h〜9FFFFh(512K〜640K) に ある場合どうなるでしょう? バンクを切り替えたとたん、CPUからはプログラムが見えなくなり、動作は不定に なり、多くの場合は暴走します。 また常駐ソフト等の割り込みの分岐先が、この位置にある場合も同様です。 バンク切り替え中は、用心の為に割り込みを禁止しておく方が無難です。 port equ 0ECh ;98用 port equ 1D0h ;VA純正 mov dx,offset port cli ;割り込み禁止 out dx,al : : 各種処理 : : xor al,al mov dx,offset port out dx,al sti ;割り込み許可 (*1) I/Oバンク ?I/Oデータ機器が提唱したバンクメモリ規格 メインメモリの 80000h〜9FFFFh(512K〜640K) を、128KB単位で切り替える それ以前(概ね98VMの頃)は、各メーカが独自の規格を採用していたが、こ の頃から、I/Oバンクに統一されていった。 <<< end of article >>>