Cyrix486 SLC,DLC,SRx2,DRx2 などのCPUのキャッシュユーティリティをIPLware化

CX486IPL 2.21

Copyright(C) 2024-25 まりも

要点を6行で

1.このプログラムの目的

 Cyrix486 SLC,DLC,SRx2,DRx2などのCPUのキャッシュユーティリティをIPLware化、ROM化しようというのが目的です。FD-IPLwareを使えばDISK BASIC、ROM BASIC、そほのか非MS-DOSのFD起動システムでもCPUキャッシュが効くようになります。またROMで実行するアプリケーションも用意されており、ブート時からキャッシュを有効にできます。

 このプログラムが主に対象とするのは、もとが80386/286機で、贅沢なハードウェア回路を持っていないCPUアクセラレータか、単体で載せる486DLC,SLCです。独自のハードウェアでCyrix486の拡張されたピンに接続があるような製品では、本プログラムは最適な動作を行うことができない可能性があります。80286機ではCPUがソフトウェアリセットを起こすことがあると、その時点でキャッシュが無効となってしまいますが、避けることのできない仕様です。

2.使い方

【IPLwareなどでDOS起動前に】

 CX486IPL.COM は、IPLware(FD-IPLware、OSFD-IPLwareを含む)として、またはDOSコマンドラインからの実行としても使えます。

 別途IPLware.exe など を入手しておき、
 IPLware CX486IPL.COM
で組み込みます。FD-IPLware, OSFD-IPLwareも同様です。このうちFD-IPLware以外の環境で実行したものは、どういう使い方に発展しても安全な、必要最小限の設定になります。

 CX486IPL.ROMはROMアプリケーションのイメージデータです。ROMボードを製作・入手できる方は試すとよいでしょう。動作環境によってキャッシュ設定が後述のように異なります。

【DOS起動後に】

 CX486IPL.COM をDOSコマンド、とくにAUTOEXEC.BATの中で実行します。DOS起動後にはキャッシュ可能なゾーンを拡げても問題なくなるので、ここで改めてキャッシュの設定がなされます。キャッシュされる範囲は、3.の選択で指定したものとなります。

 以上、さまざまな動作環境がありますが、まとめると次の表のようになります。

表1
実行環境 CPUキャッシュの動作
IPLware(固定ディスク起動) 「安全な固定設定 」
OSFDIPLware(最初にフロッピー起動) 「安全な固定設定 」
FD-FDIPLware(フロッピー起動) 「キャッシュ可否設定に従う(変更可能) 」
MS-DOSコマンド 「キャッシュ可否設定に従う(変更可能) 」
ROM(もと80286機,ノーマルモード) 「キャッシュ可否設定に従う(変更可能) 」
上記以外のROM 「安全な固定設定 」

「安全な固定設定」とは

 安全なキャッシュ範囲は、次のような箇所をキャッシュ無効にしたものです。

  • SYSTEM BIOS
  • テキストVRAM、CGウィンドウ、グラフィックVRAM
  • 1MBから64KBの範囲、ハイレゾモードでは1MBから256KBの範囲
  • バンクメモリが使う範囲128KB、ハイレゾモードではメモリウィンドウ256KB

    ノーマルモードでは次のような Non cache regionの設定です。

  • NCR1 : 00080000 , size 256KB (注)バンク/メモリウィンドウエリア,VRAM(A0000-BFFFF)
  • NCR2 : 000C0000 , size 128KB (注)拡張BIOS域はすべてキャッシュ禁止
  • NCR3 : 000E0000 , size 32KB (注)16色用VRAM はキャッシュ禁止
  • NCR4 : 000F8000 , size 32KB (注)SYSTEM BIOSの後半はキャッシュ禁止
  • CCR0 bit0=1 1MB空間毎の最初の64KBをキャッシュ無効

    ハイレゾモードでは次のような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 (注)メモリウィンドウに投影される領域はキャッシュ禁止
  • CCR0 bit0=1 1MB空間毎の最初の64KBをキャッシュ無効

     1MB空間毎の最初の64KBをキャッシュ無効にしないとならないのは、MS-DOS起動後のHIMEM.SYSが「A20ライン制御エラー」という誤った判断を起こすためです。80000hからの128KBをキャッシュ無効にしないとならないのは、他のIPLwareアプリケーションで「メモリウィンドウ」を使用する場合(例えばSCSI_RAM、壁超えSCSI など)です。SYSTEM BIOSは F8000h以上のところがバンク切り替えとなるときにはキャッシュ有効では問題が起こりますが、そうでなければおおむねキャッシュ可です。ただし遅い80286機では不具合が出る可能性があります。

    3.特定のエリアのキャッシュ有効/無効の設定

     上の表1で「キャッシュ可否設定に従う」 としているところは、下記の設定を行うことで、よりキャッシュ範囲を拡げて、CPUパフォーマンスを向上させます。DOS起動完了後には、通常はメモリ領域のバンク切り替えなどが発生することがないためです。DOSコマンドからの場合、

     CX486IPL /SET  
    というようにコマンドラインオプション -set または /set を付けると、設定モードとなります。

    ■■■キャッシュ可否エリアの選択■■■ ←→で選択(操作は1回,やり直し不可)

    という表示に続き、
    ・HMA(10000h-10FFFh)をキャッシュ無効に しない←→する           
    ・システムBIOS域(F0000h-FFFFFh)をキャッシュ無効にしない←→する      
    ・15MBの下の14MB(E00000h〜)システム空間もキャッシュ無効に しない←→する  
    ・I-Oバンクメモリが使う所(80000h-9FFFFh)をキャッシュ無効に しない←→する 
    ハイレゾモード時には最後の問に代えて、
    ・ハイレゾモ−ド時メモリウィンドウをキャッシュ無効に しない←→する     
    ・ハイレゾモ−ド時 DOSメモリ704〜768KBの所をキャッシュ有効に しない←→する

    といった問が出ます。左矢印キーを押すと「しない」のほうが即時選択され、次の問に進みます。というように、1回の操作で進んでしまうので、やり直しはできないことに注意してください。操作を間違えた場合はESCキーを押して中断し、最初からやりなおします。

     キャッシュ無効に「しない」と「する」の選択ですから、基本的には「しない」のほうを選択すべきです。キャッシュによるパフォーマンス向上が見込まれます。全てについて無効に「する」を選ぶと、表1の「安全な固定設定」と同じになります。メッセージにしたがって、実際のお使いの環境に合わせて選択してください。なおハイレゾモードでNECのEMS.SYSや各社EMSボードでB0000hのところをウィンドウとして使用する場合は、「メモリウィンドウ」をキャッシュ無効とする必要があります。

     DOSコマンドだけでなく、IPLware,FD-IPLware,OSFDIPLware ,ROMで実行した場合でも、設定モードに入ることができます。 CX486IPLが実行される直前に[GRPH]キーを押しておいてください。

    【DOSでは二度付け実行】

     上記のメニューの通りに設定されるのは、表1で「キャッシュ可否設定に従う(変更可能) 」としている動作環境のときだけです。具体的には、MS-DOS以前の場合はFD-IPLware版と、「元が80286でノーマルモードのROM版」だけです。MS-DOSの場合は、それまでの段階でどのような設定であっても、コマンドラインで実行したときからこの設定が適用となります。したがって、IPLwareやROMとして実行してあっても、MS-DOSのAUTOEXEC.BATなどでもう1回実行しておくべきだと言えます。

    4.注意事項

     キャッシュ可否範囲の設定を行った場合、その情報はメモリスイッチ7に記憶されます。バックアップバッテリが正常な状態で、DIPスイッチ2-5をONにし、メモリスイッチを保持する側で使用してください。メモリスイッチが保持できない環境では、デフォルトの設定(キャッシュをより広く効かせるが危険性は高い)になります。

     本プログラムをIPLwareに組み込んである場合、EMM386はMS-DOS version 6.20やWindows 3.1に付属のものは動作するようです。LEMMも概ね動作するようです。MELEMM.386は動作しているかどうかあやふやです。 /CX オプションを指定すると本プログラムと同じようにDISK BIOSへのフックが発生します。どうしてもMELEMM.386を使いたい場合は、基本的には本プログラムを実行しないほうがよいでしょう。それか他のEMMに変更してください。

     もとが80286機である場合、シャドウRAMがなくシステムBIOSにパッチを当てることができません。このため「CPUのソフトウェアリセット」が発生すると、キャッシュが全無効となってしまいます。HIMEM.SYSやEMM386の使用ではこのリセットが発生することがあります。他のXMM,EMMを使うと問題が解消される場合があります。

     EPSON PC ではCPUリセット後のキャッシュ有効化は機能しません。NEC製の、もと80286機と同じ動作仕様となります。H98model70,60は仕様の詳細が不明のため対象外とします。ハイレゾ初代機のPC-98XAでは動作しません。

     このプログラムを実行または組み込むと、有名なリブートツールであるHSBでの再起動ができなくなるかもしれません。ディスクブートからの再起動ではさまざまな問題が生じる可能性があります。再起動はリセットボタン押しが基本となります。

    ■ DIP SWITCH 2-1,2-7での機能変更

     PC-9801前面の DIPスイッチ 2-7 をONにすると、強制的に「DISK BIOSへのフックを行わない」モードにします。もともとOFFがデフォルトとなっています。もしIPLwareのあとDOS以外のプロテクトモードを使うOSを起動する場合は、DIP SW 2-7 をONにしておいて下さい。そうでないと、DISK BIOSからOSのディスクドライバに切り替わったとき、ドライバがDMA転送を行うと、データを失うなどして正常に動作しなくなります。本来はCyrixのCPUにきちんと対応したOSのドライバを必要としますが、Win95用VxDを除くと存在はほとんど知られていません。なお「DISK BIOSへのフックを行わない」にするとパフォーマンスはかなり低化してしまいます。

     ハードウェア改造をするか、ハードウェア回路によるFLUSH#ピン制御を行うCPUアクセラレータの場合、CCR0の bit4 を1 にして、FLUSH#ピン制御を行うようにすべきです。DIP SW 2-1 をONの状態で CX486IPLを実行すると、そのような動作になります。ハードウェア回路によるFLUSH#ピン制御を行う場合は DISK BIOSへのフックも不要のはずですから、同時に DIP SW 2-7 もONにすべきです。

     なお DIP SW 2-1,2-7 は早期のPC-9801で廃止となっており、Cyrix486を搭載できるような機種では未使用・未参照となっているため、構わず流用しています。しかしPC-9801Dシリーズでは機械式DIPスイッチ自体が廃止となっており、上記の機能が使えません。

    ソースプログラム

     ソースプログラムはこちらです。CX486Dと共用です。

    5.免責事項

     このソフトウェアはフリーソフトウェアです。自由に使っていただいて構いませんが、作者は、このプログラムの動作結果や影響に対して、一切責任は負いません。使い方を誤るとディスクのデータを破損する可能性のあるツールです。

     著作権は作者である「まりも」が保有するものとします。不特定多数がダウンロードできる場所への転載はお断りします。連絡先メールアドレスは、ホームページ上に記載してあります。

    まりも  (連絡先メールアドレスはホームページ上で)

    7.改版履歴

     日付  版  内容
    2024-05-15 0.93 80286のままの機種に載せたときにエラーで終了するようにした
    2024-05-16 0.94 CPUIDを見ずCyrix判定を行うようにし、486SLCが動作可能となった
    2024-05-17 0.95 適用機種判定強化、DIP SW2-1によるFLUSH#ピン使用の機能を追加
    2024-05-18 0.96 コンソール画面表示の改良, 内蔵SASI/SCSI存在判定の誤りを修正
    2024-05-20 1.00 CPU判定の改善
    2024-05-25 1.10 ハイレゾモード時の不具合を回避, ハイレゾEMSに対応
    2024-10-06 1.20 ノーマルモード時のNCRの設定が誤っていたバグを修正
    2025-07-20 1.21 SASI HDDが存在するときCX486IPLが暴走するバグを修正
    2025-09-01 1.30 I/O 22hへの不要なアクセスを削除, SYSTEM BIOSを一部キャッシュ可に変更
    2025-09-08 2.00 キャッシュ可否範囲を設定できる機能を追加、多数のバグの除去
    2025-09-12 2.10 CX486Dから内容を分離、FDIPLware時はDOSの時と同じ設定にした、
     システム共通域を偽装し486機にみえるようにした
    2025-09-13 2.11 特定アドレスのキャッシュ可否設定画面に乱れがあるのを修正
    2025-09-14 2.20 ROM版でも設定メニューを出せるようにした
     もと80286機でのノーマルモードのROM版はDOSでの設定と同じとした
     説明文書の簡略化 このバージョン2.20のダウンロード
    2025-09-15 2.21 PC-98XAでは動作しないことを明記した
     ハイレゾモードのIPLwareやROMで実行中に768KBまで
     キャッシュできるというメッセージが現れないようにした

    [戻る]