80286/386搭載機では CYRIX 486DLC,SLC および SRX2,DRx2 を直接載せ換え、あるいはこれらを使ったCPUアクセラレータに載せ替えていることがあります。サードパーティ製品では何らかのキャッシュユーティリティも付属しています。しかしどのような設定になっているのかがよく分からなかったり、そもそもアクセラレータ製品の場合、キャッシュ制御をどこまでハードウェアで行っているのか不明な場合があります。またハイレゾリューションモードでキャッシュ禁止領域の設定が適切に為されているのか不明でもあります。
そこでこれらのCYRIX製386互換 CPUのキャッシュ関連レジスタの内容をとにかく全部表示しようというのが、本プログラムです。
別のキャッシュユーティリティがインストールされそれが実行された後の段階で、DOSでコマンドラインから CX486D.EXE を実行してください。仮想86モード下でも一応動作します。ただしMELWARE付属のMELEMM.386などでは情報が取得できずに 不正な内容で表示されるなど、動作可能なものは全てではありません。
なんらかのキャッシュユーティリティ実行後は例えばこのような表示になります、お使いのCPUアクセラレータ、キャッシュユーティリティの設定により異なります。まさにそこを調べたいというわけです。
------------------------------------------ Cyrix486系 CPUキャッシュの状態表示 Ver. 2.20 Copyright(C) 2024 まりも CCR1,CCR0の設定 CCR1 0 RPLSET/RPLVAL# ピン 無効 bit7 0 SUSP#ピン無効 bit2 0 A20MASK# ピン 無効 bit3 0 KEN# ピン 無効 bit4 0 FLUSH# ピン 無効 bit5 1 HOLD ステートでフラッシュする(安全だが遅くなる) bit6 0 キャッシュ方式 2-way associative bit0 0 1MB空間毎の最初の64KBをキャッシュ無効にしない bit1 0 基本的に 640KB-1MB キャッシュ有効 Non cache regionの設定 NCR1 : 00080000 , size 256KB (注)バンク/メモリウィンドウエリア,VRAM前半 NCR2 : 000C0000 , size 128KB (注)VRAM後半と拡張BIOS域はキャッシュ禁止 NCR3 : 000E0000 , size 32KB (注)16色用VRAM はキャッシュ禁止 NCR4 : 000F8000 , size 32KB (注)SYSTEM BIOSの後半はキャッシュ禁止 ------------------------------------------キャッシュユーティリティ無しでの起動、あるいはCPUリセット後には、
NCR1 : 00000000 , 4GB(つまり全域でキャッシュ無効)と表示されます。このとき他の項目は表示が何であっても全て無効となっている 状態にありますのでご注意ください。
とくに注意する必要があるのは、
bit5 1 HOLD ステートでフラッシュする(安全だが遅くなる)
の項目です。これが
bit5 0 HOLD ステートでフラッシュしない
となっているときは要注意です。 ディスク(FD,HD)の読み書きではDMA転送が発生しますが、「HOLD ステートでフラッシュしない」のときはDMA転送のたびにCPUとの間でデータの不整合が生じ、最悪の場合ディスクのデータがおかしくなります。ただし付属のCX486IPLを実行後には、
bit5 0 HOLD ステートでフラッシュしない ※ CX486IPL によるDISK割込みフック済みのように DISK割込みフック済み という情報が追加されます。いっぽう
「HOLD ステートでフラッシュする(安全だが遅くなる) 」
はその通りなのですが、動作が遅くなり、ほとんどキャッシュを機能させていないに等しくなってしまいます。
このため各メーカのキャッシュドライバでは DISK BIOSに介入してディスク動作を検出し、その都度ソフト的にキャッシュを捨てるということを行っています。つまり、「HOLD ステートでフラッシュしない」はDISK BIOSまたは DISK関連I/O への監視がないと成立しないというわけです。
なおハイレゾリューションモード(事実上PC-98RLのみ)では NCR1〜NCR4はノーマルモード時と異なるのが正しいと思われます。例えばCX486IPLをIPLwareで実行済みの場合、下記のような表示となります。
------------------------------------------ Non cache regionの設定 NCR1 : 00080000 , size 256KB (注)08..0Bメモリウィンドウはキャッシュ禁止 NCR2 : 000C0000 , size 128KB (注)G-VRAMはキャッシュ禁止 NCR3 : 000E0000 , size 128KB (注)T-GVRAM,拡張BIOS域,SYSTEM BIOSはキャッシュ禁止 NCR4 : 00100000 , size 256KB (注)メモリウィンドウに投影される領域はキャッシュ禁止ひょっとすると 次のようにキャッシュ無効領域を1つにまとめている可能性もあります。安全寄りの設定ですがDOSのcommand.comやBIOSの動作が遅くなるでしょう。
Non cache regionの設定 NCR1 : 00080000 , size 512KB NCR2 : --- , 設定されていません NCR3 : --- , 設定されていません NCR4 : --- , 設定されていません ------------------------------------------
CX486IPL.COM (バージョン1.20)というプログラムも添付しています。各社、各製作者によるキャッシュユーティリティがない場合や、IPLwareとして使いたいという場合に試してみてください。DOS起動後の本来のキャッシュユーティリティの動作やEMMの動作に影響を与える可能性もあります。CX486IPL.COM では DISK BIOSへの介入(フック)を行い、キャッシュを破棄するようにしていますので、「HOLD ステートでフラッシュしない」のほうに設定が可能となっています。
詳しいことは CX486IPL.TXT をお読みください。なおCPUアクセラレータ製品では、一般にそれに付属するユーティリティを使うべきですが、IPLwareであることでこれまでにない使い方ができると思います。
このソフトウェアはフリーソフトウェアです。自由に使っていただいて構いませんが、作者は、このプログラムの動作結果や影響に対して、一切責任は負いません。著作権は作者である「まりも」が保有するものとします。不特定多数がダウンロードできる場所への転載はお断りします。連絡先メールアドレスは、ホームページ上に記載してあります。
2024-05-18 1.90 コンソール画面表示の改良、適用機種判定法の改良
2024-05-20 2.00 適用機種判定法の改良、ソースファイルの構成の変更
2024-05-25 2.10 CX486IPL 1.10 ハイレゾモード時の不具合を回避,EMS対応
2024-10-06 2.20 CX486IPLのNCRの設定が誤っていたバグと説明の修正