98システム解析スレッド2024年5月 /人'A`;人\ 2024年5月1日(水) 5:00 |
Cyrix 486DLC/SLCの再履修 まりも 2024年5月2日(木) 12:38 |
工作室の記憶→98tips→Cx486SLC/DLC関連の記事を先月ご教示頂き、ありがとうございます。そこにCYRIXのデータシートのリンクがあったので、ソフト側からの使い方がわかりました。ハイレゾ関連では各社のキャッシュユーティリティがどう扱っているのか疑問に思っていました。またCx486SLC/DLC使用のアクセラレータもどこまでハードウェアで行っているのかよくわかりません。そこでとにかくCx486SLC/DLC/DRx2のキャッシュ関連の設定をぜんぶ表示するものを作ってみました。 ttp://hp.vector.co.jp/authors/VA012947/util/cx486d.html
ノーマルモードの9801では VRAMと拡張ROM空間 A0000-DFFFFhはキャッシュしないほうが安全です。SYSTEM BIOSはキャッシュしてもいいし高速化もするでしょうが、速すぎてFDDが動作不良になる可能性や、F8000h-のROMバンク切り替えでおかしなことが起こる可能性もあるので、すくなくともF8000h以上はキャッシュしないほうがいいような気がします。
I/Oバンク切り替えを行うアプリケーションを使うなら 80000h-9FFFFhもキャッシュしないほうがいいのだろうと思います。CPUから見た物理アドレスに作用するはずなので、投影中のメモリの本当のアドレスのほうにはキャッシュ禁止を掛ける必要はないように思います。
ハイレゾモードでは同様に80000h-BFFFFhを禁止にしたほうがいいかもしれません。問題はHMAなのですが、CYRIXのCCR0レジスタには「各1MB領域の最初の64KBをキャッシュする/しない」という機能があります。これってHMAを見据えたものなのでしょうかね。だとするとハイレゾではキャッシュ禁止にしたほうがよいのかもしれませんが、それだとHMAに置いたDOSの実行が遅くなってしょうがありませんよね。初代XAだと最上位からHMAのメモリを切り取ってきますが、CPUから見たアドレスに効くのであれば、これは考慮しなくてよいのでしょう。
ところでCYRIXのレジスタはI/Oで設定しますが、CPUリセットを掛けると飛んでしまう仕様のようです。したがってキャッシュ関連設定をIPLwareで行うことはほとんど無意味ということになります。少なくともEMM386実行時にリセットされますし、ひょっとしてHIMEM.SYSでもありえます。だからいろいろなXMSのマネージャやEMM(仮想86サーバ)プログラム、さらにはリブートツールHSBなどに、Cyrix486オプションがだいたい付属していたわけですね。
つまり基本的にキャッシュ関連設定は各OS上で最初に行わないといけないことになります。メルコ製品ではWin95用ドライバがあったり、FreeBSD(98)でも行っているようです。しかし、ハードウェアでどこまでフラッシュ制御する機構になっているかは、各種アクセラレータによって異なります。それに合致したキャッシュユーティリティの設定が必要なので、他の製品のを勝手に流用するというのは、最適でなかったり危険だったりする可能性があるわけです。FreeBSD(98)でも使用しているアクセラレータのに対する最適化は必要でしょう。
Cx486SLC,DLC系アクセラレータとそれに付属のキャッシュユーティリティ実行後に、拙作cx486d.com を実行して、どのような表示になるかを調べてみてください。ちなみに表示が2桁目からとしていて、左端をあけてあるのは、ハイレゾモードの映像がうまく表示できない環境を考慮してのことです。PC-98RLでアクセラレータを使っているひとは極めて少ないとは思いますけど・・・
|
EUD-Hの場合 くりすと 2024年5月2日(木) 13:58 |
載っているのがCx5x86なのと、この製品自体はRLでは物理干渉するため載せられないのと(まともに動くRLも持っていませんが)486DLC/SLCとは違うとは思いますが、そもそも80000-FFFFFhまではキャッシュが効いていません。 CPUBENCHもWB ONにしてもキャッシュOFF時と同じ速度でした。
GVRAMで実行したらハングを疑う位の速度だった気が…
|
486SLC/DLC系は かかっくん 2024年5月2日(木) 20:10 |
Cx486SLC/DLC系は、搭載対象は新規開発が念頭のIBM486SLC/486BLと違い元から386SX/DXからの 直接の取り替えを念頭に開発され増したから、設定はDRVでして居る気がし枡 逆にハードウェアでする部分は可也少なそーな? 其れを考えると、286用の486DLCアクセラは余りいじらずに素直に386DX用ゲタと成りそーな希ガス i486系を載せる386DX用アクセラでわi486に其のやうなレジスタが無い為ハードウェアで制御して居枡 Cx486DXの386DX用アクセラでわド〜でせう?
あとはDMA信号(DREQ?)をFLUSH#に結ぶとDMAの度にフラッシュされ枡がCx486SLC/DLCや其の直系 (SRx2/DRx2等)はキャッシュがWBなんデスよねぇ...単純なフラッシュでなくコPYバックをしなくて良いのか? 其れともWBに設定するとFLUSH#アサートでコPYバックして呉れるの哉? # 派生品(Ti486SXL/SXLC等)はWT。尚IBM486SLCは無関係 386DX機用i486アクセラでわ、WTだけなら何も考えずに結んでも良さそーな? 仕上げに、I/O 005Fhが無い機種(の内XA/U/VM以降)には後付けするとか?待ち時間は10/8Mのnクロック とかで良いでせう # タイムスタンパの後付けは不要でせう # アクセラに依っては後付けのウェイトが有る鴨
|
基板のないタイプも KAZZEZ 2024年5月2日(木) 20:19 |
> RLでアクセラレータで使っているひと RL対応製品でCyrix系のものは専用基板を介さずにCx486DLC/DRx2直載せするものが多いのではないかと思いますので、キャッシュコントロールソフトの中にハイレゾ対応の秘密があるような気がします。
IBM Blue Lightningを用いたものであればアイオーのPK-A486BL75-Lが基板を介すタイプでRLにも正式対応していました。IBM系はデータシートが公開されなかったのか情報が少ないですが、海外のサイトにある程度の解析情報はあるようです。キャッシュ有効無効のアドレスを細かくビットマップ指定したりできます。
|
無設定でどういうときにフラッシュ? まりも 2024年5月2日(木) 23:07 |
WT/WBも含めて、いろいろ疑問はあるわけですが、 (1) PK-486Dのようにただの486DLCを載せただけのものは、キャッシュ設定のうち HOLDステートでフラッシュする/しないのどちらなのか? (2) 基板付きの486DLCアクセラレータでFLUSH#ピンを使う設定にするものなんてあるのか? というあたりです。9801DAを持っていたことはあるのですが、記憶ではCPU benchで倍くらいの速度が出ていました。HOLDステートでフラッシュにすると、非常に遅くなるとされているので、おそらくこの設定は無効なのかと思います。
ではDMAが動作した時にはどうしていたのでしょうね?というのが疑問です。アイオー製のキャッシュソフトを普通に無意識的に使っていましたが、ディスク関係で特に問題が起こったことはありませんでした。Int1Bhフックでinvd/wbinvd命令実行ですかねぇ。当時はBIOSを使わないでディスクのR/Wなんていうのはまずあり得ませんでしたから。DOS以外のOSではそうは行きませんが、ドライバもないなら全域キャッシュ無効で、遅いままだけど問題も出なかったということでしょう。
Cx586系で80000h以上のアドレスでキャッシュを利かせないというのは、やはりバンク切り替えを考えてのことでしょうね。アプリレベルでバンク切り替え(だけでなくメモリウィンドウ操作のプログラムも)は絶対使わないなら、キャッシュ有効でいいように思います。少なくともWTなら問題ないです。以前調べたように、Xe10/BX4では80000h以上のエリアにWBキャッシュすら効いてましたので、バンクメモリなんて使わないという時代になったという判断をミイソは下したのでしょう。Xe10/BX4は起動途中ではITFがこのエリアをメモリウィンドウ操作で使いますが、その期間はキャッシュ禁止にしていると思われます。ITFではout 63Fを頻繁に操作しています。
【3日追記】ざべ特別公開講座 98パワーアップ改造名人 技術評論社 pp.160-163.の記事では、 ttp://98epjunk.shakunage.net/miscel/miscel_pics/ugt1009.gif のようにCバスのメモリ書き込み信号とHLDAのNAND(実質OR←誤り AND)でFLUSH#を動作させていますが、これだとメモリの書き込み時はキャッシュがフラッシュされるので、常にWTと同等になるのではないでしょうかね。【←この考察は誤り:15日追記】 DMA要求信号に接続するのだとWB戻しをどうするかの問題があるので避けたのでしょうか。
ところで先月のAnおよびAp3/As3のアナログサウンド子基板のピンのピッチですが、61.6mmくらいでピン間隔35個ですから、ピッチは1.776mmかと思います。2mmではないですね。
|
ライト且つHLDAでFLUSH かかっくん 2024年5月3日(金) 19:16 |
記憶が余り定かでわないのデスが、確か此んな方法だったやうな肝し枡 確かにHLDA(他のデバイスがバスを占有)且つRAMライト(詰まりDMACや バスマスタがRAMライト)でFLUSHされ枡ね
> ttp://98epjunk.shakunage.net/miscel/miscel_pics/ugt1009.gif
の説明は?な点が有るやうな?
MWC0又はMWE0のアサート(L)、且つHDLAアサート(H)でFLUSH#アサート(L)が正しいなら FLUSH# = -[ [ -(MWC0) OR -(MWE0) ] AND HLDA ] FLUSH# = [MWC0 NAND MWE0 ] NAND HLDA
MWC0かMWE0がL(アサート)をH(此処でわレベルの確定だけで論理の定義はしない)とするとNANDに成増 次に此れにHLDA(アサート=H)をANDし全体を反転させる(NAND)とFLUSH#に成増 結局2段共NANDと成増
デモ、他(DMA・バスマスタ他)がRAMにライトする際にフラッシュするのは兎も角CPUがライトする 分にはWBとすると、其れをRAMに書き出す前に他がライトしてフラッシュしたりすると... 抑々WBは何んなタイミングでコPYバックするのでせう?キャッシュが埋まった時と命令で明示的に 書き出す時と、(略)
|
CPUリセットを行わないOSはあるのでしょうかね? KAZZEZ 2024年5月3日(金) 20:42 |
> cx486d.com ベクターにあるキャッシュ設定ソフトDCにもCyrix486のCPU状態を表示する簡易ツールは付属していましたが、各ビットの役割はまったく情報が表示されないものでしたから、個人的にはアイオーやメルコの設定ツールで設定した内容を読み出した値をそのままDCに適用するだけでした。設定の意味が表示されるのはありがたいですので、時間が取れたらRAで試してみたいと思います。
> キャッシュ設定関連をIPLwareで行うことはほとんど無意味 以前DCX(DCにCPU判別を加えるだけのパッチ)を作ったときにもCPUリセットで設定が飛ぶことは確認していましたし、仮想EMSを使う場合は各社独自のメモリマネージャを使う必要があることも周知の通りでしたから、確かにDCがIPLDOSでも動いたことは気休めのような感じではありました。 EMM386などによるCPUリセットが行われない環境では使えるかも知れませんが、NT系OSなんかの場合はどうなるのでしょうね。過去ログの通り、以前VXもどき(普段はIBM486SLC2)をCyrix系アクセラレータに変えて2k起動を試したときは(恐らく熱暴走で)アクセラレータが壊れたりしたので、怖くて確認が取れていなかったりします。
> ひょっとしてHIMEM.SYSでも そういえばアイオーのアクセラレータにはHIMEM.SYSだけを代替するPKXMS.SYSも付属していましたが…286機におけるA20ライン対策のためだと思っていました。もしかしてCPUリセット対策もあったんでしょうかね? ABM 486GT-Rあたりにはキャッシュ設定ツールだけで独自メモリマネージャは付属していなかったのですが、CPUリセット対策はどうしていたんでしょうね。
|
本来A20制御とCPUリセットの要否は不可分 かかっくん 2024年5月4日(土) 1:31 |
本来HIMEM.SYSに於いてA20制御とCPUリセットの要否は不可分(A20がI/O 00F2hの機種は286ナノで CPUリセット必須、一方I/O 00F6hの機種はCPUリセット不要)で、此の原則が崩れるのわ一部の例外機種を 除けばアクセラ使用時デスから、みいそDOS6のHIMEM.SYSでのスキップわ若しかするとみいそに由る アクセラ排除の一環ナノ鴨知れません。えぷDOS6のHIMEM.SYSはド〜でせう?
「A20制御とCPUリセットの要否がド〜関係有るの?」との問いの答え、XMSの内HMAとUMBにわ 無関係でEMBに関係し枡。ノーマルモードでわ後年の機種迄PM窓が設けられなかったのでプロテクト モードでしかPM(HMAの65520バイトを除く。以下同様)にアクセス出来ませんですた # 386+のunreal modeに似たモードも286に有ったやうな?リセット直後のFFFFF0hのやうに。ゐゃ # 此のモードはリセット直後にしか成らなかった鴨 と云うワケでリアルモードとプロテクトモードを往復しながらXMMがPMと1M以内に設けたバッファの 間で写して遣う仕様デス。ソフトウェアEMSの1方式に似て居枡 詰まり286であればEMBを遣うならCPUリセットが一般的ナノで日常的に起こると云う事デス # 此処で此んな事わ釈迦に説法のやうな
ところで386DX用486DLCアクセラや286用486SLCアクセラに石が載った板が有馬すが386SX用は 486SLCに載せ替えるか486SRx(2)其の物を被せるかばかりで被せる486SLCアクセラは余り無かった 気が? # アセットコアのViperとUGTばかり。ソースは此処の/kenkyu/386upg.htm
|
純正himem.sysがダメなのは まりも 2024年5月4日(土) 12:19 |
>此処で此んな事わ釈迦に説法のやうな ここは釈迦クラス以外の多くの衆生もROMっているので、済度のためにまとめておくことは良いと思います。 (・_・):なんやその雲の上から目線は 各社独自のXMM(himem.sys相当の1M以上メモリマネージャ)が付属する背景は、元が80286な機種で再度のA20マスクできないためです。CPLDと基板付きの上被せアクセラレータなら、I/O F6hをデコードして、A20M#ピンに接続し、ソフト側ではCCR0レジスタのA20M#ビットを立てることで、リセット無しにA20再マスクができると思います。そのような製品なら、himem.sysと自社ドライバを独立に使用できそうです。(ただし元が80286機であることを見破られないためのhimem.sysパッチは要るかも)
しかし単に被せるか貼り替えた場合は、Cyrix用ドライバとXMMは切り離し難くなります。当時はWindows95がなかったので純正himem.sysでなければいけないということはありませんでした。他社製のデバイスドライバを流用するときは、A20M#接続bitも含めて他の設定が適合してにいるかに注意を払う必要があります。
|
アクセラにI/O 00F6hを載せる かかっくん 2024年5月4日(土) 16:23 |
286→486アクセラにI/O 00F6hを載せる手は確かに有馬すね
窓9xであっても、純正HIMEM/EMM386でなければならぬと云う事わ無く64M以上に対応したXMM/EMMで あれば遣えたと憶い枡。IOのVMM386は64M以上に対応のバージョンも有った気がし枡 VEM486は64M迄でしたがLEMMは(略)
|
XMM version まりも 2024年5月4日(土) 19:09 |
たぶんXMMバージョンが3に上がったことと64MB超えが可能となったことがイコールかと思いますが、VMM386は結局Win9xに対応できないようです。わたしも95以前はVMM386を使っていました。 ttps://weblabo.griffonworks.net/dorlog/2nddorcom/pc-98/26027.html ↑の最後の書き込み、「EMM386があると WC2MSR.EXEが起動しない」とは、MSR操作プログラムが一般的に仮想86ではハングアップするという意味ですかね。しかし逆順の実行だと設定したMSRがリセットされるのでしょう。これも一つのドライバで完結したいところかも。
|
主にPK486D.COMの場合 KAZZEZ 2024年5月5日(日) 1:03 |
ようやくPC-9801RA2とアクセラレータをセッティングできました。調査環境はMS-DOS5.0A-Hのリアルモード(CONFIG.SYS/AUTOEXEC.BATなし)です。Cx486DLC/SLCキャッシュイネーブラとしてはアイオーの ・PK486D.COM(16820バイト、94-08-30 1:08) - Cx486DLC/DRx2用? ・PK486S.COM( 2571バイト、92-12-14 1:01) - Cx486SLC/SRx2用? を試しましたが、どうもこれらはCPUリセットが起きてもCPUキャッシュ設定が消えず、CPUキャッシュは有効のままでした。しかしオプションスイッチでBIOSを書き換えない設定にすればCPUリセットで設定が消えますから、アイオーのイネーブラはRAMにコピーされたBIOSを書き換えることでCPUリセットに対応しているものと考えられます。ちなみにRAM BIOSを書き換えた場合、ソフトウェアでV30に切り替えようとするとハングします。(TT)
CPUアクセラレータはCx486DLCおよびDRx2直載せのほか、Cx486DLCを基板上で2倍化するPK-A486DWシリーズを使いましたが、どれもcx486dの結果は同じでした。
まずアイオーのキャッシュイネーブラのデフォルト設定では以下のようになりました。 CCR1,CCR0の設定 RPLSET/RPLVAL# ピン 無効 A20MASK# ピン 無効 KEN# ピン 無効 FLUSH# ピン 無効 HOLD ステートでフラッシュしない キャッシュ方式 2-way associative 基本的に 640KB-1MB キャッシュ有効 1MB空間毎の最初の64KBをキャッシュしない Non cache regionの設定 NCR1 : 00080000 , size 256KB NCR2 : 000C0000 , size 128KB NCR3 : 000E0000 , size 128KB NCR4 : 00E00000 , size 1MB
さらにオプションスイッチ設定があり、以下のほかCCROとNCR1〜4(とsize)を直接指定することもできます。 /f (キャッシュを無効にする) → NCR1が00000000,4GBに /b (RAM BIOSを書き換えしない) → HOLDステートでフラッシュする /i (I・Oバンクメモリエリアをキャッシュする) → NCR1が000A0000,128KBに /n (ハイレゾモード時RAMウィンドウをキャッシングする) → 変化なし /r (BIOS ROMエリアをキャッシングする) → NCR3(000E0000)のsizeが32KBに /h (HMAエリアをキャッシングする) → 1MB空間毎の最初の64KBをキャッシュ無効にしない、NCR4が----に /d (ディスク以外のDMA転送を使用する) → HOLDステートでフラッシュする
/nで変化が無かったのはノーマルモードのRA上で実行したせいかもしれません。 /bと/dでは、cx486dの結果が全く同じです。しかしCPUリセットで設定が飛ぶか飛ばないかの違いがありますから、/bだと文字通りRAMにコピーされたBIOSを書き換えているのでしょうね。
以上はPK486D.COMのオプションですが、PK486S.COMには/oオプションもあります。 /o (I/O Writeでキャッシュをフラッシュする) → FLUSH#ピン有効(本当に配線されているかは不明) …でした。このオプションはPK486Dで指定しても誤りになりますので、もしかして286機用でしょうか? 一方でPK486Sに/b/n/dはありません。単にバージョン古いせいかもしれませんが、少なくとも外部16bitのCx486SLCの場合はハイレゾ機(/n)は関係無いということでしょうね。
以上の結果があればキャッシュイネーブラ作成のご参考になるかもしれません。
>> キャッシュ設定関連をIPLwareで行うことはほとんど無意味 > NT系OSなんかの場合は 自己レスですが、IBM486SLC2/BL3系アクセラレータでもCPUリセットで設定が消えるようでした。しかしVXもどきで2kが(Cバスメモリを除けば486相当と思われるパフォーマンスで)動いていたことを考えると、NT系OS用のキャッシュイネーブラとしてはIPLwareで使える可能性がある気がします。さすがに32ビットOSではプロテクトモード以降後にCPUリセットを起こすことも無いということでしょうか?
> 釈迦に説法 おっしゃる通りで、私の発言で不快な思いをされた方がおりましたら、申し訳ありません。
|
窓だけならEMMは不要 かかっくん 2024年5月5日(日) 1:07 |
64M以上のEMB=XMM3で合って居枡 まぁ窓だけ(XMMだけで可)で遣う(DOS環境は別途用意する)ならEMMは 不要デスからXMMさえド〜にかすれば取り敢えず動くやうにわ成りそーデス
>> 釈迦に説法 > おっしゃる通りで、私の発言で不快な思いをされた方がおりましたら、申し訳ありません。
ゐゑゐゑ、皆さんがご存知の事を改めて...と云うのも何だかな?と まりもさんの通り、大勢がROMって居枡から無意味でわ無さそーと云う事で。
ところで前から疑問デスが、Cx486SLC/DLC系の直系は2ウェイが無くダイレクトマッピングしか 無かった気が?
|
釈アイオーデータに説法 まりも 2024年5月5日(日) 7:22 |
>KAZZEZさん 完璧なまでのテストありがとうございます。疑問のほとんどが氷解しました。それにしてもアイオーデータのドライバもすごいですね。オプションが全て用意されています。お釈迦様はアイオーデータです。我々は衆生。そういえば釈(石川県に多い苗字)由美子はアイオーデータのイメージガールでしたから、釈迦で間違いありませんw
さてオプションとそのときの動作状態を考えてみます。「RAM BIOSを書き換える」がやっている内容ですが、HOLDステートでフラッシュをしなくて済むようになるので、Int 1Bhフックが含まれるのかなという感触です。アイオーデータのドライバは常駐はしないのですよね?常駐するのであればそちらでInt1Bフックにするはずです。いずれにしてもディスク動作時のDMA対策ですので、これをやらない限りは「HOLDステートでフラッシュ」にしないと危険です。
/i はその通りでバンクメモリを使わない限りキャッシュ有効でいいと思います。ただしIPLware段階ではここのメモリウィンドウ操作を行うアプリが多いので、config.sys以降で許されます。 /r はROM BASICエリアをキャッシュするのでやっておいて普通は問題ないでしょう。GVRAMのE0000hの32KBはキャッシュしてはいけない所ですが、上の書き込みで挙げた画像では忘れてます(汗 /d はサウンドボードを入れたときなどでしょうが、Int1Bフックで対処できないので「HOLDステートでフラッシュ」にするのでしょう。
/o はSLC搭載アクセラレータだけにある物で、ザベ記事のようなFLUSH#への配線が基板上にあることを示唆します。が、、、アイオーデータの説明書では“IO write”なんですよね?、MEMORY writeではなくて。ここだけが理解できません。DMA関係ないんじゃない?となります。Int1Bフックはそもそもやっていそうですが元80286機なのでRAM BIOSがありません。コンベンショナルメモリ空間に常駐になりますかね。
それからCPU F0hリセットでCyrixのレジスタ設定が失われていないというのは、「RAM BIOSの書き換えをする」のためですよね。CPUリセットからのすぐ戻りルーチンに、Cyrixのレジスタ内容も復帰するルーチンを付け足しているように思います。すごい大掛かりな書き換えです。それにEPSON機には別対応が必要です。やっぱりお釈迦様は完璧であったという他はないです。IPLwareに書き写す写経修行に励んでみますか。その前にアクセラレータ欲しい、、、
|
MELCUTLの場合 KAZZEZ 2024年5月5日(日) 11:55 |
旧MELCOのイネーブラ(MELCUTL)を発掘しました。これはMELCSET.EXE/DEFで常駐し、CACHESW.COMで設定するもののようです。しかしマニュアルは持っておらず"/?"で表示される情報も少なく、どんな設定を持っているのかよく分かりませんでした。ただCCRxとNCRxを自由に設定できる点は同じようです。とりあえずCx486DLCを直載せで常駐したところ、オプション無しデフォルト設定でアイオーと異なる部分は以下の通りでした。 NCR1:000A0000, size 128KB NCR2:000C0000, size 256KB NCR3,NCR4の設定なし
CPUリセットについては、残念ながらCPUキャッシュ(というかNCRの設定)が解除されるようです。この場合、CACHESW.COMではキャッシュが有効のままと誤判定されるようです(アイオーのCPUCHKでは無効と判定)。CACHESWはNCRを直接書き換えられますから、キャッシュONのままでNCRを全域無効に設定した扱いになっているのでしょうか。 なお書き忘れていましたが、CPUリセットのテストには拙作wapicoを使っています(CPUIDの取得にCPUシャットダウンを利用しますので)。
> アイオーデータのドライバは常駐はしないのですよね? さすがです。MSDで確かめたところ、PK486S.COMのほうは常駐していました。なぜか常駐解除のオプションは無いのですが。 RA前期で試す限りですが、PK486Dに関しては普通に実行しても空きメモリが変化しませんので、常駐しないタイプかもしれません。 MELCOのMELCSETには普通に常駐解除のオプションがありますし、常駐すれば空きメモリも減ります。ただPK486Sと違い、なぜかMSDではTSRやデバイスドライバとして見当たりません。(追記) アイオーのMSTAT.EXEでは表示されました。 ABMのイネーブラは昔手放してしまったので確認できません。
> “IO write”なんですよね?、MEMORY writeではなくて。 "PK486S /?"で表示されるオンラインヘルプでは/oのところでは確かに「I/O write でキャッシュをフラッシュする」と表示されているんですよね。PK-486SRx2であれば箱説ごと持っていたと思うのですが、発掘の難しいところにあって取説は確認できておりません。
----追記---- RA2で0000:0501のハイレゾフラグを有効にしてからPK486D.COM /n を実行したところ、NCR1(00080000)のsizeが「設定されていません」に変わっていました。さすがにcx486dの表示後はそのままハングしましたが。
|
RS、DS、USでは まりも 2024年5月5日(日) 14:00 |
メル子は釈迦の弟子クラスにも及ばないので、釈由美子様とはソフトウェアの出来が違いますね。CPUリセットに対抗できないということだと、まだ修行が足りません。リセットされてもキャッシュ有効と判定するのは、常駐部のどこかにあるフラグを見ているだけなのでしょう。その他はデフォルトで80000hのバンクメモリウィンドウをキャッシュ可にするところが違うようです。
アイオーデータ製の方は、 PK486D.COM 386DX機用なのでRAM BIOSの書き換え、int1Bhフック PK486S.COM 286機用でRAM BIOSが使えず常駐によりint1Bhフック、何かしらの抗リセット これがはっきりしました。と同時に386SX機(US、RS、DS)はどうなんだろうという疑問はあります。シャドウRAMはあるので、機種判別して常駐でなくRAMBIOS書き換えにしているかもしれません。EPSON386機も裏RAMがあるのだか使えるのだか、いろいろありそうなので、RAMBIOS書き換えでの対応は開発側からすると大変ですが、お釈迦様ならたやすいことでしょう。常駐解除オプションがないのは、さらにint1Bhフックをするsmartdrvなどが後に控えているかもしれないことから安全上当然といえます。キャッシュの設定変更ができれば十分です。
ところでいくらハイレゾフラグを騙したとしても >CX486Dはハングアップ となる理由が思いつきませんが、GW後に調べてみます。
|
PK486Sでは設定が消える。 KAZZEZ 2024年5月5日(日) 14:43 |
> PK486S.COM 286機用でRAM BIOSが使えず常駐によりint1Bhフック、何かしらの抗リセット あ、すみません。m(_ _;)m 主にPK486Dのほうで確認していたのでPK486Sのほうだけで確かめたところ、こちらは普通にCPUリセットで設定が初期化されるようでした。おっしゃるように両者は似ているようでも根本的に機能が違うようです。 PK486DのほうはRAM BIOSを書き換えない設定で実行したところで、一度書き換えたものを後から元の内容に戻す機能は無いようですから、PK486Sを試したときにPK486Dの影響が残っていたのかもしれません。 同じ286用のPK486SQ.COM(IBM486SLC2用)でもVX上で試したところCPUリセットで設定は普通に消えます。 今回用いたPK486Sが何の製品に付属していたものかは今となっては分からないのですが、仮にこれが286機専用だった場合、確かに386SX用では異なる可能性もありそうですね。
----追記---- >>CX486Dはハングアップ >となる理由 とりあえずソース見ながらデバッガで最後のほうを追ったところ、DisplayWait にあるシフトキー投下状態を見るBIOSファンクション(INT 18h)のところでハングしていました。 PK486D実行後でなければ普通に終了しますし、/bを指定してBIOSを書き換えないようにすると不具合が起きないようでしたので、結局、PK486DがRAM BIOS書き換えの際にハイレゾモードのメモリマップと誤認して異なるアドレスを書き換えたことが考えられそうです。
----(24:00追記)---- 前述の、基板上でCx486DLCを2倍速にするPK-A486DWですが、検索してもスイッチ設定等の詳細情報が見当たりません。載っているCPUはヒートシンク付きなので詳細は分かりませんが、CPUIDが0421(Cx486DLCには0420が多い?)であるせいか、CLKEPSではCx486DRx2と判定されます。 PK-A486DWにはコプロ付き(QFP直付け)の製品とコプロ別売り(PGAソケット)の製品があるようで、両方とも小さな4連DIPスイッチがありますが、前者は他にもジャンパスイッチが数箇所あります。 両者でベンチマークの値がずいぶん違ったのでちょっと試してみたところ、4連DIPの1番は恐らく、OFF(下側)で2倍、ON(上側)で1倍クロックのようで、大きくパフォーマンスが変わるようでした。また、4番目のスイッチはON(上側)にしたほうがベンチマークのパフォーマンスが多少良くなるようでした。こちらはウェイトか何かでしょうか? 他のスイッチはよく分かりませんでした。
ところで、RA2でIBM486BL3のアイオーPK-A486BL75とメルコHRD-20T(基板上の表記なのでたぶんHDA-C20TJあたり)についても試してみました。 アイオーのPK486BL.COMにはPK486D.COMと同様、CPUリセットで設定が維持されます。しかもソフトウェアでV30に切り替えてもハングしませんでした。オプションスイッチもPK486D.COMと同様のものに加え、倍率設定と/s(RESET.COM使用時に指定)があります。ただし基板上の独自の機能を使うためか、メルコHRD-20T(HDA-C20TJ?)に適用すると正常動作しないようでした。メルコのほうのイネーブラはたぶんBLCACHE.EXEだと思いますが、こちらはCPUリセットで設定が消えました。設定時に「BIOSをフックしました」とは出るのですが、アイオーのようなCPUリセット対策のBIOS書き換えはしていないということでしょうかね。
|
たぶんI/O wait まりも 2024年5月5日(日) 18:28 |
なるほど元80286機用486SLCドライバの方はCPUリセットに対抗する術は持っていないということでしたか。これはまあそうでしょうね。486SLCをマザーボードにハンダつけしたような人は、CPUと用途決めうちでITF ROMのCPUリセット再起動部を書き換えるといいのでしょうけど。
あと基板付き486SLCアクセラレータで試すとすると、上で書いたようにもしかしての I/O F6hが機能するかどうかですが、まあ期待薄でしょう。
I/O writeでキャッシュをフラッシュする目的は、DMAでは考えられませんが、往々にして起こる周辺デバイスのウェイト不足に作用させる方ですかね。用もないところで遅くなる問題はありますが、FDDやGDCの動作不良は致命的なので。これは元80386機より80286機の方が問題になることは間違いないでしょう。
ところで↓を読むと、Viper Jet type1というのはやたらと強そうですね。 ttps://weblabo.griffonworks.net/dorlog/2nddorcom/pc-98/29805.html 検索して出てくる画像を見ると回路規模が大きそうですし、大概のことがハードウェアDIPスイッチで設定できるようです。さらには純正およびメジャーなXMM、EMMが使えるという点です。ミイソ98の386SX機だとRAM BIOS持ってるので、いろいろ期待できそうです。付属のJET486.EXEの目玉は抗リセットか? 価格は当時でもお高かったのですかね?
|
IBM486用キャッシュ制御 リウ 2024年5月6日(月) 15:12 |
以前書いていたものをここ最近の議論を受けて、安全よりに改訂しました。 drive.google.com/file/d/1-xmFFRUxnzWgnejLTUEbeqMVq30dmVpR/view?usp=drive_link CPU判別部をFreeBSDからコピーしています。 1000セグメントを非キャッシュにするとDOSのブートだけはできないかな…、と勝手な期待をしています。とはいえ実物を持っていません。面白がって書いてはいます。 しかし486SXなCPUで5555を2で割ったときにcarryが立つのは目にした瞬間嘘かと思うくらい驚きました。 (追記)アップロード後DCX.ASMで勉強しました。CPU判別は奥が深いですね…。
|
アクセラレータのDIPSW まりも 2024年5月6日(月) 20:08 |
スレッド冒頭のCX486DもCPUチェック周り強化とE0000hのほうのGVRAMキャッシュ禁止を入れ忘れていた点の改訂しました。 ttp://hp.vector.co.jp/authors/VA012947/util/cx486d.html お試しプログラムCX486IPLはIPLwareでも実行できますが、IPLwareでCyrix486のレジスタを(勝手に)設定するとconfig.sysでHIMEM.SYSのエラーが出るかもしれません。なのでやはりIPLwareでは無理があるような気がしています。
>PK-A486DWですが、検索しても アクセラレータのDIPSWは他の製品の類推から試すしかないのではないでしょうかね。しかしI/O waitのようなものは何かしらのベンチマークでないと効き目が判らないでしょう。
|
確かに実機で確かめないと分からないことは多いですよね。 KAZZEZ 2024年5月6日(月) 22:07 |
> drive.google.com/file/d/1-xmFFRUxnzWgnejLTUEbeqMVq30dmVpR/view?usp=drive_link ご苦労さまです。DLC3.comについて拝見させていただきました。画面表示が無くRETで終わっているのでIPLwareに対応したものですよね。IBM486系のCPUキャッシュイネーブラは当時、Cyrix系と違ってIPL起動するFDが存在しなかったので、IPLware対応のものがあればFD-IPLwareでそれが実現できますね。
個人的には数年前に、えらー15氏の情報(ttps://hp.vector.co.jp/authors/VA000363/tech/ibm486.txt)を参考に、CPU判別の強化を加えてIBM486SLC2用のものを作成しており、VXもどきで2k起動の実験に使っています。IBM486BL3(DLC3/SX3などとも呼ばれていてどう呼んだらよいのか良く分かりませんが)についても同じ方法でキャッシュ有効化できていますが、キャッシュ禁止アドレスを設定変更する仕様や、CPUによって倍率を変更する仕様がまだ定まっていないので公開していません(SLC2で3倍設定にするとハングしますので)。
前置きが長くなりましたが、現在のバージョンのDLC3.comについてRA2+PK-486BL75で試したところ、どうも正常動作していないようでした。付属のソースを見ながらデバッガで追ったところ、まず上記の5555を割るルーチンでIntel486と判定されて何もせず終了しているようでした。 判別部分をスキップして「;MSRの使える486なCPUの場合だけここに来る」のところから実行したところ、キャッシュ禁止メモリアドレスとクロック倍率3倍の設定はできていたのですが、MSR 0x1000のところで肝心のCPUキャッシュ有効化が行われていないようでした。 CPUキャッシュの有効化は上記えらー15氏のページでも確認できると思いますが、参考までにPK486BL.COM(アイオー)とBLCACHE.EXE(旧メルコ)でのMSR 0x1000の変化は以下のようでした。 ・PK486BL.COM:MSR 0x1000=0x8C92(有効)/ 0x8412(無効) ・BLCACHE.EXE:MSR 0x1000=0x9C92(有効)/ 0x9C12(無効)
それにしてもCPU判別でIntel系486を判別する方法があったのですか。個人的にはDCX.ASMのように判断していたわけですが、持っていないCPUの挙動が分からないのは気になりますよね。MEMSYS.TXTで知ったのですが、Intel純正でも「RapidCad」とかいう386DXソケット互換で486DX相当のCPUなんてのもあるそうで。Intelの486コアならi486と同じ挙動と信じたいところです。 なおBlueLightningのCPUIDはUndoc2のMEMSYS.TXTには載っていませんでしたが、手持ちのPK-A486BL75とHRD-C20T(HDA-C20TJ)のCPUIDはいずれも8439でした。できればCPUリセットや無効例外を使わずに判別できれば理想的だとは思うのですが、一応ご参考まで。
|
/人'A`;人\ 2024年5月7日(火) 5:02 |
jet486/potomac.exeのオプションスイッチとその意味。Viper-jet TYPE1付属のjet486.docとViper X TypePだかViper-P28だかに付属(確か共通でFDのラベルにはViper-P28用とあり)のpotomac.docの記述に基づきます.
■JET486.EXE(IBM 486SLC2用)
(1)デバイスドライバ・実行形式共用オプションスイッチ /S キャッシングの許可/禁止領域を設定.必ず/Sと併用. /B バンクRAM領域のキャッシングを禁止. /P プロテクトメモリ領域のキャッシングを禁止.IBM 486SLC2はプロテクトメモリ領域の一部のみキャッシングを禁止するという設定ができないため,禁止するなら丸々禁止しなければならない. /CX コプロセッサ命令のキャッシングを許可.Cyrix CX83S87使用時. /OFF キャッシュ無効.倍クロックモードは解除されない. /F[filename] コマンドラインから一々オプションスイッチを指定する手間を省くためにコンフィグファイルを予め作っておいてそれを使う.
(2)実行形式専用 /IN 486SLC2の状態表示. ・486SLC2 のレジスタ MSR1000H 〜 MSR1002H の値 MSR 1000H = xxxxxxxx,xxxxxxxxH MSR 1001H = xxxxxxxx,xxxxxxxxH MSR 1002H = xxxxxxxx,xxxxxxxxH ・クロックモード Syncronous divide by two mode. Two to one Syncronous mode.(倍クロックモード) ・キャッシュの状態 Cache Enabled! (キャッシュ有効) Cache Disabled!(キャッシュ無効) ・キャッシング領域の設定方法 External KEN mode.(ハードウェア制御) Internal KEN mode.(ソフトウェア制御) /ON キャッシュ有効.
■POTOMAC.EXE(TI486SXL/SXLC用)
デバイスドライバ・実行形式共通 /X1 CPUクロック1倍クロック. /X2 2倍クロック. /H HMAエリア(100000〜10FFFF)のキャッシュOFF. /R ROM BIOSエリア(E0000〜FFFFF)のキャッシュON. /B BANK RAMエリア(80000〜9FFFF)のキャッシュOFF. /D 1MByteごとの先頭の64KbyteをキャッシュOFF. /K BIOSエリア全てのキャッシュOFF. /S ホールドステートによりキャッシュをフラッシュ. /OFF 全てのメモリをキャッシュOFF. /F[filename] オプションをコンフィグファイルで指定. 例 /CCR0=20 /NCR1=A0-6 /NCR2=C0-6 /NCR3=E0-5 /NCR4=100-5 /CCR0=xx (xx = 00 - FF in HEX.) /CCR1=xx (xx = 00 - FF in HEX.) CPU内部レジスタCCR0・CCR1にダイレクトに値を設定する場合に使用./D /K /Sオプションは無視される. /NCR1=xxxxx-x (xxxxx = 0 - FFFFF x = 0 - F in HEX.) /NCR2=xxxxx-x (xxxxx = 0 - FFFFF x = 0 - F in HEX.) /NCR3=xxxxx-x (xxxxx = 0 - FFFFF x = 0 - F in HEX.) /NCR4=xxxxx-x (xxxxx = 0 - FFFFF x = 0 - F in HEX.) キャッシュOFFエリアを独自に設定.xxxxxは4KByte単位で先頭アドレスを指定1桁から5桁までのHEXが有効.xはキャッシュOFFの範囲を指定.0-FのHEXで指定. 0 = DISABLE 1 = 4KByte 2 = 8KByte 3 = 16KByte 4 = 32KByte 5 = 64KByte 6 = 128KByte 7 = 256KByte 8 = 512KByte 9 = 1MByte A = 2MByte B = 4MByte C = 8MByte D = 16MByte E = 32MByte F = 4GByte /98 /AT ディスクBIOSを監視し,ディスクアクセスが行われた時にキャッシュをフラッシュ.このオプションのみデバイスドライバ専用(192Byte常駐)./98の行は空欄ですが,以上は/98と/ATの両オプションについての説明でしょうか. /Vxx[[,xx],xx]... キャッシュフラッシュのために割込みを最大7ベクタまで監視.GPIBやA/DボードなどがDMA転送を行う場合に使用する割込を記述.xxは00からFFまでの2桁のHEXで記述.複数の記述はカンマで区切る. /WB セカンドキャッシュ搭載のマシンでライトバックをサポートしている機種で問題が発生した時に使用すれば回避できるかもしれない.
jetは出た時6万位したのではなかったかと思います。何かの本かどっかのウェブページに値段が書かれていて、何の真似だこの値段はと魂消た記憶あり。その後価格改訂があったかもしれませんが。大分遅い時期に発売されたものだったような。一倍速キャッシュ1kBの初代毒蛇が4万、アイオーの2倍速キャッシュ1kBが3万でした。で実は1998年か1999年だか忘れましたが、386ー486機用のアクセラレータの売れ残り品(僅少)が資産芯技術社の倉庫から出てきたとか何とかで、突発的に直販の処分セールがありました。ものによって値段が異なり、jetは5000円だったと思います。
ttps://web.archive.org/web/20071024195644/◼️ttp://sandy55.fc2web.com/ps55/Interposer/386_upgrade.html 386AT互換機用のアクセラレータの資料ですが、画像が失われています(私は印刷したものを持っています)。常緑樹社の被せるタイプはいくつか持っています。
|
/人'A`;人\ 2024年5月7日(火) 5:13 |
/Sは必ず/Sと併用は/Pは必ず/Sと併用の誤記。インターネットアーカイブのurl中の文字化け箇所は全角黒四角。
|
実行ありがとうございます リウ 2024年5月7日(火) 11:39 |
不動作報告ありがとうございます。いただいたフィードバックを反映しました。 実際に使われることをほとんど想定していなかったのですが、貴重な機体での実験まことにありがとうございます。IPLWareにしているのは文字表示がめんどうだ、というところもあります。
CPU判別部について ソースにもコメント残しましたが余りの出る割り算でcarryが立つ(zeroフラグが消える)のはMMXなpentiumですらそうでした。PentiumIIIではcarryが立ちませんでした。間のPentiumProやPentiumIIでどうなのか、K6ではどうなっているのか少し興味の出るところですがここいらのCPUではCPUIDが使えますから古い486のCyrix(TI?)判別には使えるようですけれども、Intel判別は実際にはできない気配です。
MSRの1000hはFPUの制御だけかと思い込んでいました。CyrixのFPUとIntelのFPUで値が違う、というのがFreeBSDのソースにはかかれているのですが、JET486.EXEのオプションでも違いがあるようですね。
連休に出かけなかった日のお遊びでしたが大変勉強になります。
ところでゲーム関連でGDCの石の種類が話題になっていました。 uPD7220の石に比べてuPD72020の石ではアドレス部分が2bit増加しています。(データシートで確認) マザーボードに7220が確認できるのは超初期機種だけでRAですらLSI化されていましてどっちの石の機能が内包されているのか見た目では判別できません。 ちょっとこれの確認プログラムも書いてみなきゃなあ、と思っています。
(追記)スタックの崩しわすれがありました。DSも0のまま帰るのはよろしくないと思いましたので変更しました。(追)ご指摘のとおり開発版バイナリがそのまま入っていました。言葉もありません。
|
皆様修正ありがとうございます。 KAZZEZ 2024年5月7日(火) 20:15 |
(修正) 修正版を試しましたので大幅書き換え。
> DLC3.com SLC2.com とりあえずDOS上で無事動作することを確認できました。さすがにIBM486SLC2ではDLC3.comがハングしますが、これは仕方ないですかね。 細かい設定の違いなのか、アイオーやメルコのイネーブラのデフォルト設定と比べると、CPUCHKでのパフォーマンスが、ごくわずかに速かったです。
> cx486d13.zip とりあえずcx486dを使って調査しなおしてみましたが、結果に変化はありませんでしたのでひと安心です。BIOSファンクションを使わなくなったのか、ハイレゾフラグ有効でもハングアップしませんでした。
|
GDCの統合 かかっくん 2024年5月8日(水) 15:56 |
> マザーボードに7220が確認できるのは超初期機種だけでRAですらLSI化されていましてどっちの石の機能が内包されているのか見た目では判別できません。
98でわVM2迄GDCが2ヶだったのがVM21/UV21/VXでわ片方(多分GRP側)のGDCが統合されて居枡 で、μPD7220(D7220D)わF辺り迄でしか見た事無く、VMでは7220Aですた np2系エミュでわ3種の切り替えが出来るのでAにも違いが有りそーな?
|
続き KAZZEZ 2024年5月8日(水) 22:43 |
> MSRの1000hはFPUの制御だけかと思い込んでいました。 まあMSRは文字通り機種依存で、CPUによって機能が全然違っていることがありますからね…。 とりあえず検索するとttp://phg.chat.ru/opcode.txtというページが見付かり、その中でIBM486系の各ビットの解析結果?も簡単に書かれていました。A20マスクのビットなんかもありますね。もっとも英字の略号が多くて、私にはよく理解できていない部分が多いです。 (・_・): 素人丸出しやな。
以下DLC3.com/SLC2.comのドキュメントより。 > CPU判別方法がわからないため えらー15氏がIBM486SLC2の同定に使っている方法ですと、MSR 0x1001のプロテクトメモリのキャッシュ上限の設定可能範囲を見ているようですね。IBM486BL3(DLC3)の場合は外部32ビットである分だけアドレス空間が多く設定できるみたいですから、試しにMSR 0x1001にFFFFFFFF-FFFFFFFFを書き込んだ後にMSR 0x1001のリード結果を表示させてみたところ、 IBM486SLC2:000000FF-FFFFFFFF IBM486DLC3:00FFFFFF-FFFFFFFF という違いが出ましたので、差分の00FFFF00-00000000の部分を見れば、両CPUを一応区別はできるということになりそうです。 ただし、IBM系の386ベースの486互換CPUには2倍設定すら持たないIBM486SLCもありますし、32ビットでも2倍速までしか持たないIBM486BL2もありますから、それらでは不具合が起きることも予想されます。PC-98であるという前提であれば正式対応CPUアクセラレータ製品でIBM系386ベースなCPUはSLC2とBL3の2種類しかありませんから、PC-98チェックを追加するという手もあります。それでも海外のAT互換機のCPUアクセラレータでIBM486SLCやIBM486BL2を使った物があるのか存じませんから、それをPC-98に載せているケースが無いとも言い切れませんが…どうなんでしょうね?
> 286に486命令を足すようなことを例外割り込みで作ることができたりします 例外割り込みは私も過去ログにあるMSRの存在をスキャンするツール(今回IBM486のMSR内容表示に大活躍しました)で使っているわけですが、命令追加なんて応用も実際に実現した方がおられるのですか。Windows上ではOSが介入しそうな気がしますがどうなるのでしょうね。PC-98ではPentiumIIIが限度なのでSSE2命令を使う3Dソフトとかにも使えればうれしいところですが。 一方で、例外割り込みが存在しない8086ではデバッガ用の1ステップ毎の割り込みモードで186命令を追加するなんてソフトを昔ベクターで見ましたが、相当遅かったらしいですね。PC-98ではむしろ(CPUアクセラレータの乏しい)V30機で286/386命令を追加するほうが有用に思えますが、V30は無効命令の割り込みには対応していない世代でしょうかね…。
|
CPU固有命令 まりも 2024年5月8日(水) 23:12 |
>286に486命令を足すようなことを例外割り込みで作る 無効命令の例外06をトラップして、代替コードでリカバーしちゃうわけですか。すごいもんですね。例外違いですがdiv0ROMもそれに近いかもしれません。勝手にリカバーしてDX=0,AX=FFFFhを返してしまいます。でも元の命令コードがなんだったかのトレースまではしていませんね。符号なし16bit割り算決めうちです。
ところで98RLにはout 43Fh,A0h でCPUのキャッシュをフラッシュ(または書き戻しも含む)するという機構はない可能性が大です。CPUが80386でその必要性がないため、ITFにもそれを実行するコードなんてありません。存在しないと思った方がよさそうです。CPUが486になった9801FAから装備でしょうね。 cyrix 486の場合は486一般にあるCR0レジスタで一時的に一次キャッシュを無効にすれば大概のことは済みます。wbinvd/invd命令も使えるようですが、Intel互換の本当の486のときに(間違って実行すると)問題になるのでCX486Dでは使っていません。
|
V30で286/386命令をエミュレート かかっくん 2024年5月9日(木) 2:13 |
V30に286命令を追加するのは殆どプロテクトモード命令デスから余り有用でないやうな? 286命令を追加と云うより挙動を286に合わせるやうな(後述)?386命令はリアルモードだけデモ66h/67hが 他用途(V30NDP用命令?8087〜387とわ無関係?)で遣われ枡からシングルステップでエミュレートする鹿 (V30NDP併用時は不可?)、元からか # バスサイクル等はV30が出す(8087/V30NDPはバススレーブ)ので全くのnopでわナイ 尚V30にわ無効命令例外は無く286からの実装デス あと386命令のエミュレートにわ大量のスタックが必要デスからオーバーフローしないやうにご注意 E**の上位16bitやFS/GSを何で代用するか?とかpushadでダミーのpushをしたり、同じくpopadで空popを したりとか
他には8086/V30と186+で挙動が異なる命令(シフト時の5bitとかpush SPとか。本来はDIV0も)のエミュ とか。286/386用アプリは286や386の挙動を前提として居枡からMUSTでせう
out 43Fh,A0hってH98/100 90に有馬すか?
|
SYSTEM BIOSのF800:0E80あたり空いてます? まりも 2024年5月10日(金) 15:38 |
PC-98RLのノーマルモードで SYSTEM BIOSの空きにパッチを当てて、CPUリセットがかかったときでもcyrix 486のレジスタを再設定するようにしてみました(試作)。これならIPLwareでCyrix486のキャッシュ設定を行う意味はあろうかと思います。
ただし、IPLwareで実行されるときは、バンク/メモリウィンドウ領域の80000h-9FFFFhはキャッシュ禁止にします。いっぽうDOS実行時やCPUリセット復帰時はキャッシュ可能にします。これはメモリウィンドウを操作するプログラムがIPLwareにはいくつか(壁超えSCSI-LBAやSCSI_RAMなど)あるからです。ネイティブな486機ではメモリウィンドウを操作するとそのI/O実行時にFLUSHピンが駆動されますが、元80386機ではそうは行きません。IPLwareアプリ側でメモリウィンドウ操作時にout 430h,A0hを入れてあっても(SCSI_RAMでは念の為入れていた)効かないと思われます。一次キャッシュを切るなどの大ナタを振るわないといけませんが、これまでのIPLwareアプリを全部元80386機向けに改修するのは現実的でないので、IPLware実行中はメモリウィンドウ領域をキャッシュしない方法を選択した方がいいでしょう。
同様にIPLware実行中は1MB空間の最低位64KBをキャッシュしないようにしてXMM組み込みが落ち着くまでそのままとするのがよさそうです。いっぽうCPUリセットからの復帰ルーチンではinvd命令を入れたので、フラッシュされるはずです。HMAにあるDOSのパフォーマンス重視で64KB域はキャッシュ可で抜け出すことにしました。
ところでそのパッチを埋め込むSYSTEM BIOSの場所なのですが、RLではF800:0A00-0EFF hが空いていたので、0E80 hからを使ってみました。他の機種、RA以降FA未満の元80386機種ではこのエリアに空きはあるのでしょうか?ちなみに上記のリセット復帰ルーチンは64バイトあれば足ります。
|
F800:0A00 リウ 2024年5月10日(金) 16:16 |
RA2(一桁)では空いていました。 具体的にはF800:0987hからF800:EFFまでが0埋めされています。 386に486なbswapも埋め込めそうな(と悪いことを考えてしまいますね)
|
RAM BIOSパッチ、IPLware +configデバドラ まりも 2024年5月10日(金) 23:02 |
空きの開始オフセットは機種により少し違いそうですね。その続きF800:0F00にはBASICのROMの一部があるようなので、後方詰めで格納するのがよさそうです。ということで今後コードが増える余裕を残して、0E80 hからにします。空きの前半分はint 1Bh DISK BIOSフックのために使いますかね。それよりはハードウェアでFLUSHピン操作の方をやってみたいですが。
現在のところ試作品はノーマルモードはもちろん、ハイレゾモードでも、DOS起動後にHMAや続く192KBのEMBをキャッシュ可でうまく行っています。RAM BIOSパッチにより、ハイレゾモード時のHIMEM.SYSが行うリセットからの復帰ができています。リアルモードでしか使わないので個人的にはこれでも満足なレベルです。
ところが難しいのがEMM386です。DOS 5では組み込み時にハングアップします。DOS 7.10ではEMSでメモリ確保した瞬間にリセット再起動になります。いっぽうDOS 6.2およびWin3.1のは問題ないようです。なんか根本的な無知のため見落としていることがありそうな、、、
|
キャッシュのフラッシュ KAZZEZ 2024年5月11日(土) 1:19 |
> out 43Fh,A0h でCPUのキャッシュをフラッシュ(または書き戻しも含む)するという機構はない 汗;。そうだったのですか。PX98IPLでは0.02でRA/DA上のi486のCPUキャッシュ有効化の際にout 43Fh,A0hを入れていたのですが、無意味だったのですね。一番最初の有効化だけですから、フラッシュしなくてもたまたま平気だったんでしょうか。というかIntel486系のアクセラレータの場合、CyrixやIBMのような386向けの付加機能はありませんから、CPUアクセラレータ基板上でハードウェア的になんとかしてくれていたということでしょうかね? KSGJ/JBC…だったか?メーカーうろ覚えですがHYPER CPU 486という386DX用CPUアクセラレータのキャッシュイネーブラの場合、キャッシュをオンにするCOMファイルが155バイト、オフにするCOMファイルが162バイトで、そのうちテキストデータが126バイトを占めるという正味30バイト前後…というかジャンプ命令や終了コードを除けば更に短いシンプルなもので、どうもCR0をいじるだけでキャッシュフラッシュを行っていないようでした。そうなるとハード的に何か対処しているのかもしれません。
> I/O F6hが機能するかどうかですが、まあ期待薄でしょう。 とえりあえずVXもどきに載せたPK-X486S-50(IBM486SLC2)では、アイオーのキャッシュイネーブラの有無に関係なくout F6,2では切り替わらないようでした。
> F800:0E80 hから 念のためRA2でアイオーのイネーブラ実行前後でも比べてみましたが、ここはゼロで埋められたまま変化は無さそうでした。
|
脳内ハングアップ まりも 2024年5月11日(土) 16:31 |
>HYPER CPU 486という386DX用CPUアクセラレータのキャッシュイネーブラ たぶんですが、常駐部はint 1Bhの入口でキャッシュを切ってから本来の呼び出しを行い、戻ってきたらキャッシュを有効にするのだろうと思います。それだけなら32バイト程度で行けます(pusha/popa使用)。ところがこのキャッシュを切るという手法が特権命令を使うものだと、仮想86モードのとき動作しなくなるので、本当にそれなのかどうか? まさに今それをやろうとしていたところで、疑問になりました。int 1Bhフックできないではないですか。
ところでDOS 7.10とDOS 5では、EMM386が組み込まれるときに発生するCPUリセットルーチンに特権命令があると、戻れずにハングアップするようなのですが、理由がよくわかりません。SYSTEM BIOSにあるコールドリブートルーチンは、out F0hでリセットかかった後なのだから、リアルモードで呼ばれると思うのですよね。そもそもハングアップしているのはEMM386に再び戻ってからなのかも?
【17時追記】そもそも仮想86モード下では、Cyrix486のレジスタに書いても保持されないじゃないですか。仮想86のI/Oモニタがトラップしてますよね。やっぱりEMM386というか仮想86に深入りせずにやるのは無理です。元386/286機の486 CPUキャッシュユーティリティのIPLware化はほぼ無意味という結論でいいでしょう。起動後そのままリアルモードで動作するOS(MS-DOS以外)なんて無いですし、、、あ、N88-DISK BASIC,ROM BASICだけがありますか。
|
仮想EMSを使うCONFIG.SYSにキャンセルドライバを作っておくとか… KAZZEZ 2024年5月11日(土) 18:50 |
> キャッシュユーティリティのIPLware化はほぼ無意味 HDDでは起動メニューなどでOSを選べるわけですから、DOS+仮想EMSのように、あると不具合のある環境向けに、IPL段階で行った処理を仮想EMSを組み込む前に解除するCONFIG.SYSデバイスドライバがあれば良いのではないかと思います。CPUリセットを起こす機会の無い環境やOSであればそのまま使えますし、DOSで仮想EMSを使うときはVMM386なりMELEMM.386なりの、CPUアクセラレータに対応したメモリマネージャに切り替えられれば良いと思いますので。
---- ところでIBM486SLC2/BL3の場合、動作倍率設定は初回設定時のみ有効となっていて、途中から倍率変更を指定しても繁栄されないことになっています。しかしCPUリセット(WAPICOなど)でいったん設定を飛ばせば、再設定時に新しい倍率で動いてくれるようです。 面白いのはCPUリセットでCPUキャッシュ設定が解除されないアイオーのドライバを使った場合で、普通に倍率を変更しても繁栄されないのは同じですが、倍率再指定後であれば、CPUリセットを行ったタイミングで、CPUキャッシュを切らすことなく倍率を変えることができました(もちろんリアルモードの話ですが…)。
|
なんでEMM386だけはCPUリセットが必要なのか まりも 2024年5月11日(土) 23:32 |
VMM386 3.55があったので適用してみたところ、Cyrixのキャッシュ関連レジスタにI/O設定をしても仮想86のI/Oモニタに拒否されることなく通りますね。さすがはアイオーデータです。
いっぽうDOS 6のEMM 386ではそれまでの設定はリセットルーチンで再設定され、キャッシュが効きますが、仮想86に入るとI/Oは通らなくなるので再設定はできません。melemm.386も同様です。つまりIPLwareで設定しておくと起動後にも有効ではあります。
ところで試作品ではリセット復帰ルーチンを通ると画面背景を青くするようにしていますが、各種メモリマネージャーではCPUリセットが起こるものと起こらないものがあります。 ・CPUリセットが起こるもの HIMEM.SYS ハイレゾモード、DOS 6のEMM386両モード ・CPUリセットが起こらないもの HIMEM.SYSノーマルモード、VMM386両モード、melemm.386両モード この差がよくわからないというか、CPUリセットが必要な理由がわかりません。とにかくEMM386は何か気に入らない点があればリセットしているとしか言いようがありません。HIMEM.SYSが組み込み時にハイレゾの時だけリセットを起こす必要性も理解し難いです。通常動作時にはプロテクトモードからの戻りには80286の作法ではなくちゃんと80386の作法で行なっています。つまりハイレゾの時だけ何か気に入らないことがあってリセットをかけているとしか思えません。
ということで、 >仮想EMSを組み込む前に解除するCONFIG.SYSデバイスドライバ でIPLware併用というのはありだと思いますが、最大限解除すべきなのはリセットルーチンでのCPU設定ですね。Cyrixで使えないEMMはここから先でハングアップしていますから。CCRやNCRはIPLwareでは控えめに設定しており、そのまま継承されてもいいし、リセットがかかればどうせ消えます。
|
互換性の権化の変更点 リウ 2024年5月12日(日) 1:38 |
drive.google.com/file/d/18bmn4PYTOtsU92bVcw_7bQSHuZ_FB8a6/view?usp=drive_link GDCの機構変更点が自分の中では結論できました。 こんなものはグラフィックを扱うゲームプログラマーにとっては常識だったのかもしれませんし、np2には切り替えオプションもあったわけで周知の事実だったのかもしれませんが、正直かなり驚いています。 カセットBIOS、5インチ2Dインターフェース、CBUSの286機での変更と初めのころは投げ捨てていた互換性維持もそれ以降はかたくなに守ってきた(と信じていた)ものが突然の変更ですから。
ハイレゾのXMSマネージャは最近こんなものを改造してみました。とはいえこれもIO f6hが使えることを前提にしています。32bitレジスタも使っているので286機ではちょっと無理です。 drive.google.com/file/d/1cDIsT4UQIVwiuVd-PswBM2a1oi-pbaFC/view これもDOS6のEMMを使うと即暴走です。まさかのCPUSHUTDOWNが入ってるのですね。 で、ハイレゾ機のHIMEM.SYSのCPUSHUTDOWNはInt1FのAH=90hが原因です。こいつで例の80000hのメモリをコピーしていますが、そのInt1FのBIOS中身が286機そのままでしてプロテクトモードへの行き帰りにCPUSHUTDOWNを使ってやがります。非常にやっかいです。そのため仮想86がやるべきInt1FのフックをXMS段階でやってみました。
ITFが設定しないIPLwareでのCPUキャッシュフラグ設定はNTを使う場合にはとても役に立つとは思うのです。それらのOSがCPUに対して適切な初期化をしてくれない可能性はそれなりにあると思います。FreeBSDの初期設定コードを見ると相当頑張っているとは思います。もはや誰もメンテしていないわけですがDMAの見張りもいちいち行っていて大変そうでした。
|
リアルモードの儘動くOS かかっくん 2024年5月12日(日) 2:44 |
リアルモードの儘動く物と云えばゲームでせう FDでプロテクトモード(米ゲーの移植モノにDOSエクステンダ使用のが有ったらιぃ)やV86で動くのは 極少数で、殆どがリアルモードでせう
HDDでのIPLwareでわ余り意味無い鴨知れませんがFD-IPLwareで其れ也に有用鴨
|
Cyrixの面倒を見てくれるEMM まりも 2024年5月12日(日) 7:50 |
>GDCの機構変更点 ゲーム用途にあえて古めの9801を買い求めるのは意味があるということになりますね。高速機を遅くすることはできるのだから、なるべく新しい機種の方がいいではないかと思っていましたが。 >Int1FのAH=90h 原因はこれでしたか。なんで80386機なのに80286相当のまま放置なのか、それこそが互換性の権化なのですかね。では先回りして元のint 1Fh,AH=90hに非リセットなモード遷移を行なうようにパッチを当てるのもありかもしれないです。もっとも大概のメモリマネージャはint 1Fhをフックしてそれをやっていそうです。稼働中は問題なく、インストール時だけの問題です。
さてCyrixにある程度対応するEMMで何が違うのかを比べてみました。 ◎VMM386 DISK BIOS int 1Bhをフックしないようです。既知のI/Oはトラップしているからそこでキャッシュをフラッシュするのでしょう。独自に設定されるNCRを見ると、HMAもバンクメモリエリアもキャッシュ可です(画像)。さすがは釈尊。なおハイレゾでもNCRの設定は同じでしたが疑問はあります。
◯MELEMM.386 /CXオプションをつけるとint 1Bhをフックします。I/OモニタがCyrixのI/Oに全く対応しないので、キャッシュ関連レジスタ設定の読み出しすらできません。独自にNCRを設定しているのかもしれませんが不明です。BIOSフックですからDISK関連I/Oも見てないのでしょう。
▲DOS 6/Windows3.1のEMM386 ×他のバージョンのEMM386 Cyrixの面倒は一切見ませんが、キャッシュ関連レジスタの読み出しのみはできます。他のバージョンのNEC/MS製EMM386は先立ってキャッシュ関連のお膳立てをすると正常動作しませんし、事後にもキャッシュ関連の設定はできません。
○LEMM IPLwareで事前にキャッシュ関連の設置がなされていると暴走して組み込めないことがありました。うまく行った場合は事後に仮想86モード下でキャッシュ関連の設定はできるようです。I/Oは素通しでしょうか。設定の読み出しが効くのは便利です。
となるとconfig.sysで解除を行なうデバドラが必要なのは基本的にDOS 6以外のバージョンのEMM386ということになろうかと思います。HD上のIPLwareの場合は手動で実行キャンセルできるので、解除用configドライバは要らないかもという気がします。ほとんどの用途の場合はFD-IPLwareでしょうかね。アイオーデータのPK-486D付属品にはFDリブート用のプログラムがあったと思いますが、FD-IPLwareと同様メディア差し替えの手間はあります。OSFD-IPLwareならその手間要らずとなります。
ただしIPLwareで期待できるのは既に書いたようにDISK BASICくらいであり、ネイティブなディスクドライバで動作するNTやOS/2では int 1Bhフックで賄う部分が効かなくなります。つまり超安全激遅設定の「HOLDステートごとにフラッシュ」にしないとディスクのデータを壊してしまいます。基本的にOSごとにcyrix 486のキャッシュを考慮したデバイスドライバは必要です。ディスクドライバの実行コードのうちDMA転送かける前後にパッチというのがいいのだろうとは思いますが、ソースレベルでないと難しいでしょう。
【21時追記】というわけで、Cyrix486系キャッシュ設定表示プログラム「CX486D」とIPLware兼DOS版キャッシュ設定ユーティリティ「CX486IPL」を公開します。設定内容は、主に486DLC,DRx2のCPU単体を持っている人向けの最大公約数的なものとなっています。SLC対応機(元80286機)にとってはつまらない設定です(DISK BIOS int 1Bhフックを行わないため)。【追記】SLCでもint1Bhフックを行うようになりました。 ttp://hp.vector.co.jp/authors/VA012947/util/cx486d.html
|
FDベースのL1コントローラって かかっくん 2024年5月13日(月) 0:11 |
FDベースならVectorに有馬すし、目新ιぃ物デモなさそーな? 勿論細かく設定出来るのは重宝デス
ディスクキャッシュ(L1をフラッシュしないPIO^h^h^h単純なRAMコPY)と併用しFD讀み(DMA)を減らすと パフォーマンスが挙がりそーデス。ディスクキャッシュがWTであってもDMAでRAMを書き換えるFD讀みが劇的に 減り枡から効果は圧倒的でせう と云うワケでゲーム用キャッシュFDにL1キャッシュコントローラを組み込むと効果覿面でせう
ところでRLのHR BIOSが286当時の儘放置なのわ純正の環境なら無問題だからでわ? H98/100+やA-MATEでは改めて居るでせう。SV-H98にはP5ベースのも有馬すし
で、他のOSと云えば ・BASIC ・CP/M ・PC-UX ・OS/2 ・BSD/Linux ・他 とか有馬すがBASICとCP/MはHDDベースで現存する環境が余り無いでせうからFDベースと考えても 良さそーな? PC-UXはバージョンに依り68kベースとV60ベースが有馬す。何方も本体のCPUとわ粗無関係ナノで略 # 286/386用PC-UXは有馬したっけ? OS/2やBSD/Linuxはプロテクトモードで動き枡からプロテクトモードでのL1有効イヒが必要そーな?
|
元80286機でもint 1Bhフックでキャッシュをフラッシュ まりも 2024年5月13日(月) 10:02 |
シャドウRAMが無い元80286機では、不可侵なメモリ領域でint 1Bhのフックができないと思い込んでいましたが、0000:41Ehからのシステム共通域の空きが使えることに気がつきました。ここはBranch4670だかが使う38バイトのエリアですが、今更趣味で98をいじる上でB4670を使う人はいないでしょう。21バイト空きがあればいいのでお釣りが来ます。コード実行速度もシャドウRAMより速いはずです。毎回リセット時にはクリアされているのも好都合です。シャドウRAMだとリセットボタン押し再起動時にも残っていて、空き判断で困る場合もあるのですよね。
未使用となっている物理DIPスイッチの2-7を流用して、int 1Bhフック可否選択に使いましたが、Dシリーズからはソフトウェア化されていましたね(汗 これってソフト側からどう操作するのでしょうね? I/Oの841Fhあたりでいいのでしょうか。
|
2-7と6連DIP かかっくん 2024年5月13日(月) 14:36 |
第三研に由ると2-7をUV11/CVで遣って居るそーデスがV30機ナノで関係無い哉? www.amy.hi-ho.ne.jp/nakajima-jr/com/appendix/dSwitch.htm
DXは6連DIPを遣ってわ?
|
CX486IPLとか KAZZEZ 2024年5月13日(月) 21:44 |
とりあえずDOS(モード)上だけのテストですが、CX486IPLでCx486DLC/DRx2のCPUキャッシュ有効化を確認しました。CPUリセットでCPUキャッシュが切れないというのは素晴らしいです。95のDOS7.0上で試したところ、EMM386の後だとおっしゃるようにBIOSパッチだけで、レジスタ設定は効いていないようでした。アイオーのイネーブラはEMM386の後でも機能するようでしたので、PK486S.COMを持っていてPK486D.COMを持っていない人が併用すればEMM386時のBIOSフックを活用できるのかも(?)。 ちなみにCR0をいじってCPUキャッシュを無効化した場合、ふつうのi486搭載機ではCPUリセット後も無効のままでしたが、CX486IPLでは自動的にキャッシュが有効になるようでした。これはアイオーのPK486Dも同じ挙動でした(もちろんPK486D /Fでキャッシュを切った場合はNCRで全域無効に設定されますからCPUリセット後もそのままですが)。
ところで386機ではIntelの486を使ったCPUアクセラレータでもCPUリセットでCPUキャッシュが切れるみたいでした。ただ、(95の)EMM386組み込み後であってもDOS(モード)上ではCR0をいじるだけで簡単にキャッシュ有効・無効化はできるみたいでした(さすがにWindowsのDOS窓では無理でしたが)。CR0を含むMOV命令はシステム命令だと思うんですが、特権命令ではなかったのでしょうか? いずれにしてもCX486IPLと同じ手法を用いればIntel 486でもCPUリセット対策はできそうですね(フラッシュにはINVD/WBINVDを使えばよいのでしょうかね?)。アイオーの386用CPUアクセラレータ製品にはIntel486の採用例が無かったのか、対応したイネーブラも存在しない(486ピン互換のCx486DX2やCx5x86のものならあるようですが、それらの対応イネーブラもCyrixでないと怒られる)みたいですから、Intel486用イネーブラでCPUリセットで飛ばないものがあると良さそうです。
それにしてもIntel 486であってもCPUリセットでキャッシュが切れるとなると、素で486以降を搭載したマシンの場合は、BIOSに元からCPUリセット対策が行われているということでしょうか。そうなるとMendocino以前のキャッシュ有効化ツールは、CPUリセットの影響とか、各OSで固有のドライバが必要とかの事情があったのかどうか…当時ぜんぜん気にしていませんでしたが。
> CPUリセットを起こすOS Windows3.0のスタンダードモードは286に対応していますから、当然DOSに戻るときはCPUリセットが起こるものかと思っていましたが、NEC版3.1をスタンダードモードで起動して終了した場合、対策なしでもCPUキャッシュは有効のままでした。IBM PC用のオリジナル版(英語版)3.1は286にも対応しているので日本語版でもそのへんは変わっていないかと思ったのですが…あるいは何かの裏技でリアルモードに戻っていたのでしょうか? やはり3.0で試さないと分かりませんね。(ぉ
|
A20 リウ 2024年5月13日(月) 22:30 |
日本語版win3.1は286が正式に対応からハズレています。3.0のスタンダードモードで確かめてみたいです。 IO F6hのA20mask unmaskbitについて、Xe10ではread値がundoc2の記述と違って変化なしでした。F2hの当該bitについては記述どおりでした。 が、RA2ではどちらもFFが帰ってきます。古い機種では思ったとおりの値を返してくれないようです。チェックとしては実際にFFFF:0010hを読むなどの必要性があるようでめんどうだなあ…という気分です。
|
牛寺 木又 命令 まりも 2024年5月13日(月) 22:57 |
仮想86モードで実行すると一般保護例外で通常はハングアップになるはずですが、CR0の読み書きはいいのですかね。INVDも通っているっぽいです。いっぽうRDMSRなんていう命令は必ずハングアップします。大概のEMMが用意している仮想86モニタに例外トラップがあって、キャッシュ関連の主だった命令は通すようにしているのではないでしょうかね。
ところでシステム共通域の0000:041Eからの38バイトを使えると思いきや、ハイレゾRLでは2箇所何かに使われていました。したがってハイレゾのときだけ別のところを使わねばなりません。98XA専用でその後即廃止の0000:04E0からの21バイトがどうも大丈夫そうなので、そこを使うようにしました。というわけで本日今からバージョンが上がっています。CX486IPLはバージョン0.92です。なおCX486Dのほうでディスク割込みのフックの表示が出っぱなしのバグも修正されています。 ttp://hp.vector.co.jp/authors/VA012947/util/cx486d.html
DIP スイッチ2-7はCVだのUV11のみで使われているとなっていますが、Cyrix486を載せる機種ではないから大丈夫でしょう。仮に機能が残っていたとしてもFDDのモーター関係なので致命的なことにはならないでしょう。それよりDシリーズはどうする、、、
|
VXもどきでも試してみました。 KAZZEZ 2024年5月16日(木) 0:46 |
仕様だとは思いますが、cx486iplはワークエリアのCPUIDを見てCx486を判別している様子ですので、元286機では事前に拙作WAPICOなどでワークエリアのシステム情報にCPUIDを設定しておく必要がありました。Cx486DLCを用いた286用CPUアクセラレータの場合は単にwapico → cx486iplの順番で実行ないしはIPLware登録すれば動くと思います。Cx486SLC/SRx2の場合、CPUIDは0410か0411ですので、コマンドラインで明示的にワークエリアに0420または0421を指定すれば動くようでした。したがってIPLwareに登録する場合は「WAPICO 0421」とIPLDOS経由で登録する必要があると思います。強制指定なので、cx486iplが非対応の環境でも実行できることになります。Cyrixの固有レジスタはI/Oアクセスなので不具合が起きる可能性は低いかもしれませんが。安全に行くなら拙作DCXをWAPICOに適用しておくのも手かもしれません(cx486iplはdc.comよりサイズが大きいのでそのままではDCXを適用できません)。 (・_・): なんやいちいち「思います」って!? (^_^;): いや今回もDOS上でしか試していなかったので…。(殴 なお手持ちのCx486系CPUアクセラレータをいくつか通り試す限り、下一桁が0のものは25MHz版、1のものは33MHz版や40MHz版のようでした。下2桁目はDLC/DRx2で2、SLC/SRx2の場合は1のようですから、最低でも0421/0420/0411/0410の4種類はあることになります。ただ、Cx486系を判別するのであれば、ある程度486の候補を絞ったうえで、Cx486特有の挙動を見たほうが確実だと思います(DCXではベクターにあるCLKEPSのソースを一部参考にしました)。
なおアイオーのIPL起動FDにはワークエリアのCPU情報を書き換える機能があり、Cx486系のときにこの機能を有効にすると元CPUIDが4種類のどれであっても0421と書き込まれるようです。 このアイオーのIPL起動FDをVXもどきに適用したところ、BIOSは書き換えられない旨の警告が出ます。当然WAPICO等のCPUリセットを行うソフトではCPUキャッシュが切れます。 さすがにVXもどきはXA/XLとは違ったのか、cx486iplでもCPUリセットでキャッシュは切れるようでした(BIOS RAMをパッチした旨のメッセージは出るのですが)。
ところでアイオーの旧ページにあったPKシリーズのアップデート差分のドキュメントを見たところ、PK486D.COMが初代9821での不具合に対応したという記述がありました。初代9821(+PK-486SRx2)がPK486D.COMの対象機種だとすれば、この時代の386SX機はBIOS RAM書き換えに対応した機種である可能性がありそうに思います。PK486S.COMのほうは286用か、または単に旧バージョンということでしょうか?
> IBM486系のCPUキャッシュイネーブラは当時、Cyrix系と違ってIPL起動するFDが存在しなかった すみません。アイオーのIPL起動FDはCx486系の他にIBM486SX3(=BL3)にも対応していました。ただ、なぜか同じ方法で有効化できるはずのIBM486SLC2には対応していませんでした。IBM486BL3と違ってBIOSをRAM化できない286機だからでしょうか? 何か相応の理由があるのでしょうかね。
|
外貨獲得に貢献 まりも 2024年5月16日(木) 8:46 |
うあ486SLCはCPUIDが違うんですか。80286用アクセラレータがオクで出ていたので、検証用になんとしても手に入れたいと思ったのですが、倍いいとか全負けっととかの軍団が強すぎてどうにもなりませんでした。というか張り合う意味はありません、日本にお金を落としてもらいましょう。それにしてもなんでSLCの載ったアクセラレータが世界的に人気なんですかね? DLCが載ったVX用のアクセラレータ(割と初期のでしょう)には食いついていなかったので、SLC目当てなことは確かです。
ところでCX486IPLでは、CPUIDを0000:486のシステム共通域から得ていましたが、これは元80286機では不可能なんですね。意図的にリセットかけて調べるしかないですかねぇ。ただそうなると仮想86では動作しなくなります。Cyrix限定なので先にI/O 22hをつついて23hを読み出すといいですかね。いきなり23hを読み出すとDMAコントローラのほうに行ってしまいます(W/Oなので返り値はFFh)。Cyrixのデータシートを読む限りでは、22hを正しい値で叩いたあとはCPU外部に23hが出ることはなくなるようです。その後は22hに無効な値を叩き込んで元に戻しておかないと、本当の23hのDMAコントローラの方に書き込みできなくなってしまうようです。
【13時追記】CX486IPLはそういうわけでいまアップデートしました。SLCでちゃんと動作するまでにはテストをお願いすることになり、時間がかかると思います。DLCのほうは元80386機では完璧に動作すると思っています。
【23時追記】なんと9821RaではI/O port 23hを読み出すことができてしまいます。普通には00hが返ってきます。たぶんwriteした値がおうむ返しに保存されているだけだろうと思います。しかしこれでは返り値チェックでCyrix486だという判断はできないことになりますね。やはり0000:486も組み合わせですかね。ここが0の機種は80286以前かXLダブルくらいだと思いますので、まずそれは除外して、CPUIDが04xx hですらないのを次に除外でしょうか。
|
参考までにDCXでの判別方法 KAZZEZ 2024年5月17日(金) 1:17 |
お手数おかけしております。1.70版を試しました。 仕様なのかcx486dのほうはワークエリアのCPUIDを参照する仕様のまま変わっていないようでしたが、これはこれでワークエリアを書き換えれば非対応環境でも動かせますのでテスト用には重宝しています。 cx486iplはCPU判別方法が大きく変わったようで、VXもどきでCx486SLCでも動作するようになりました。前回のように事前にワークエリアのCPU情報の設定を行っていると元286機でもRAM BIOS機種と誤認してしまうようになりましたので、WAPICOは使わないほうが良さげです。
ただ既にお気付きとのことですが、今回のCPU判断では色々まずそうでした。IBM486SLC2/BL3を用いたアクセラレータや、RA2+Turbo486EX(i486DX/33)では無事に実行中止されましたが、普通の486機(Ce、BX3)ではなぜか普通に実行されてしまいます。RA21+EUD-Q(Cx486DX2)でも実行されます。これらの非対応環境では不正にBIOSパッチされる形になるのか、CPUリセット後にフリーズします。
CLKEPSの付属ソースの判別方法では、Cyrixの486互換CPUは、割り算(DIV命令)を行った際に余計なフラグを変化させないのでi486やIBM486とは区別できるようです。これを参考に、私は結果がゼロにならない割り算を行っても立てておいたゼロフラグが寝ないままだという挙動を見ています。この挙動は486ピン互換のCx486DX2でも確認できますが、Cx5x86には無いようです。 また以前にも書いたのですが、386ピン互換のCx486は486で追加されたフラグレジスタの全部を持っているわけではなさそうで、試したところNEビットが変更できませんでした。こちらについてはIBM486SLC2やBL3も同様なのですが、i486と互換性の高い486ピン互換CPUであればこのビットを持たないとは考えにくいです。 拙作DCX(0.02)では、この2つの判別により、CPUリセットを行わずに、486系CPUの中から386ピン互換のCx486だけを特定しています。
なお486ピン互換のCx486DX2などはi486との互換性が高く、CR0をいじるだけでCPUキャッシュのオンオフが(ライトスルーモードですが)できるようですが、一方でアイオーや旧メルコのイネーブラではCx486DLC/SLC用のものが486ピン互換のCx486DX2にも対応しており、それらと同じくCCR0やNCRを設定できますから、一応上位互換性があるようです。しかしCx486DLC/SLC向けの流儀そのままではCx486DX2には効かないらしく、cx486iplではCx486DX2のCCR0やNCRは設定できませんでした。もしこれが簡単に対応できるようであれば、386ピン互換CPUを判別する必要は無くなると思います。
そのほか細かいところとしましては ・DOS上で実行した際、色付きの表示で終わると、コマンドプロンプトに色が残る。 ・RA21+内蔵型SASI-HDD(サードパーティ製40+40MB)で、SCSIと誤表示される。 ということがありました。ご参考まで。
|
CX486D 1.90/ CX486IPL 0.96 まりも 2024年5月18日(土) 0:00 |
内蔵SASI/SCSI BIOS装備チェックは確かに逆になっていましたので、CX486IPLではそこを修正したほか、色つき表示も表示後に白に戻すようにしました。このプログラムはCyrix486DLC/SLC専用であり、Cx486DX2などでは使うことは無いものとしているので詳しいチェックは入れていません。間違って使うのはむしろCyrix486SLC/DLCを外したのに実行してしまったときです。そのときCyrixのCPUが無い判定になっていればいいと思います。【追記】Intel 486ではちゃんと弾かれることは確認しました。
|
RE:CX486IPL 0.96 KAZZEZ 2024年5月19日(日) 1:33 |
CX486IPL 0.96を試しました。元286機(VXもどき)に関しては、V30時・286時のほか、i386SX・IBM486SLC2のアクセラレータ装着時であっても、きちんと実行中止されました。一方で、Cx486SLC・DLCを用いたCPUアクセラレータではちゃんと設定されました。あらかじめシステムワークエリアのCPU情報を設定していた場合に限りBIOSを書き換えた旨のメッセージが出ることを除けば、元286機におけるCPU判断は特に問題なさそうな感じでした。 ただ、Cx486SLC互換でCPUキャッシュを増量したTI486SXLを用いたCPUアクセラレータは持っていませんので、それが動くかどうかは存じません。たぶんCPUIDは違うのでしょうけど、Cx486SLC/DLC用のイネーブラがそのまま使えるはずですので、気になるところです。
元386機に関しては、486下駄(Turbo486EXやEUD-Q)経由で486系CPUを試したところ、おっしゃるようにCx486DX2を載せたCPUアクセラレータではCx486DLC/SLCと誤認してしまうようでした。Cx486DLC/DRx2からCx486DX2を載せたCPUアクセラレータに交換するケースは有りうるかもしれません。 Cx5x86は上記の下駄(+降圧下駄)ではまともに動かなかったので試していませんが、それ以外に関してはiDX4でもAm5x86でも実行中止になりました。もちろんIBM486BL3も大丈夫でした。
元386機に486を載せたものでは実行が中止されることは前回も報告はしたのですが、素の486機に関しては前回同様、CPUの種類によらず実行されてしまうようでした。HDDを付け替えるケースなどで誤動作することは考えられると思います。
細かいところとしては9821Ce(486機)では内蔵SCSIに何も繋いでいなくても内蔵SCSI-HDDという表示が出るようでした。また内蔵SASI-HDDと両方表示が出ましたが、実際に繋いでいるのは(ノート用)IDE-HDDでした。Ceと構成が同じと思われる初代9821や、同じ386SX機でノート用HDDパックを使うUSなどはCx486SRx2のアクセラレータ対象機種になると思いますので、同様の挙動が予想されます。
> DLCのほうは元80386機では完璧に動作すると思っています。 触発(?)されてH98m70を10数年ぶりに引っ張り出してみたのですが、残念ながらすでに起動しなくなっていました。H98の電源は独自のソフトウェア制御できるタイプですから、修理や電源基板交換の敷居は高そうですね。 当時Cx486DLCは普通に動作していた記憶はありますが、外部キャッシュをあわせた2段階キャッシュとなった場合に予想される不具合とかはあるのでしょうか?
|
今夜までで一旦終了 まりも 2024年5月19日(日) 8:09 |
どのCPUIDであればCyrixか4種類のIDの他が完全にはわかっていないため、CPUIDが4XXhかどうかの大枠でしか見ないようにしていますから、初期のIntel 486SX機では、I/O 23hが読めてしまう機種だと間違って実行しますね。
対象が386機であることからI/O F0h bit5で判断される内蔵HDDはSASIと決めうちしていますが、9801USと386SXノート機でIDEの可能性があるわけですね。持っていない機種は基本的には対応するつもり無しです。そういえばEXIDE543もUSはわからんので対応してないですね。いろいろとお値段高過ぎの昨今ですが中でもUSはほんとお高すぎます。DO+の価値もわからんですよね。98と88の2台じゃダメなんですか?(蓮舫
そういえばEPSON機とH98model70/60はチェックの上除外しています。実機を持っておらずRAM BIOSパッチのノウハウがないためです。H98model70で486DLC載せてまともに動いていた事例ってあるんですかねぇ。何かしら工夫しないとFDD I/Oで不具合が出やすかったと思います。という以前にmodel70の電源が生きているやつもほぼ見かけないし、修理して動くようになったという事例も見ません。
|
/人'A`;人\ 2024年5月19日(日) 13:04 |
製造番号3401197AAのUSでOSFDIPLW+EXIDE543.BIN。MS-DOS6.2。 HDDパックを装着せずにテストしたところ、IDE BIOSが対応しているともしていないとも表示されませんでしたので、NS/AのELECOM EN-500NPを入れてテストしたところ、画面中央に対応しませんのメッセージが表示されました。製造番号46C15901AのNS/AではEN-500NP入りでもIDE BIOSが出現していない・HDDが接続されていないと出ました。まぁノート機は全くの別物なのでしょうが。
|
ハードウェアでキャッシュをフラッシュする・・・ まりも 2024年5月19日(日) 21:34 |
ざべ特別公開講座 98パワーアップ改造名人 技術評論社 pp.160-163. の記事にあるように(この回路説明図はヘンで、上に挙がっているかかっくんさんのが正しい)、Cバスの(MWC | MWE) & HLDA で FLUSH# を駆動するようにしてみました。基板の改造は画像1,2のとおりです。パッチ用ランドパターンを有効活用しました。TTL ICは74LS00です。Xc16の不動マザーボードからはがしてきました。キャッシュソフト側の設定では「HOLD ステートごとにフラッシュしない」「FLUSH#有効」そしてDISK BIOSをフックしない状態です(画像4)。
【23時修正】やはり配線ミスでした(汗 画像3を差し替えます。CPUbench 9.80の値は向上して23.66になりました。配線間違ったかなと思ってオシロで見てみると、確かにHLDAは規則的に16μsで正論理のパルスを出してますが、アイドル状態ではFLUSH#ピンはアサートされません。ディスクを読みっぱなしにすると画像3のようになります。でも不定期にではなくHLDAに同期した16μsごとですね。
|
|
HLDAがせわしない かかっくん 2024年5月19日(日) 23:18 |
HLDAがせわしないのはRAMリフレッシュがDMAだからもありそーな気もし枡が、のて機は違ゥんデスかねぇ? デモRAMリフレッシュがDMAナノはもっと旧世代の肝? # バスマスタもHOLDステートか ん?RAMリフレッシュてRAMリードだった希ガス CAS-RASリフレッシュを前提とわして居ませんね?CバスRAMが困るから
|
HLDAの信号 まりも 2024年5月19日(日) 23:45 |
HLDAは何がなんでも16μs毎にしか出ないのかと思ったら、FDリード時などにはもっと細かく出てました。このいずれかの時にDMA転送が起こってメモリに書き込みが発生し、FLUSH#ピンをアサートするんですね。平常時にはHLDAは無視されてキャッシュは有効状態を保てます。
>RAMリフレッシュがDMAナノはもっと旧世代の肝 だと思うのですが、無駄な互換性でHOLDステート出しっ放しにしているんですかね。
|
NS/AのIDE リウ 2024年5月20日(月) 1:40 |
メモリ窓操作IO053dhのRAM化bitが4ではなく3です。(undoc非掲載) RAMDRIVE機特有ですかね?手持ちではこれしかありませんので調べようがないのですが、一応手元のNS/AではLBAパッチで543MBの壁を越えての4Gまでのブートまでは見ています。(2Tまでは可能と信じるだけです。)
壁越えSCSIのBIOSのUMB用の移動をできるように改修し始めましたが、ソースのあまりの可読性の低さに涙が出ます。ちょこちょこ間違えも見つかるわけでそこはよいのですが
|
Re:H98m70とか KAZZEZ 2024年5月20日(月) 2:16 |
> 何かしら工夫しないとFDD I/Oで不具合が出やすかった おっしゃる通りで、前述のH98対応CPUアクセラレータではかなりのウェイトを入れていると見えて、メモリのベンチマークを見ると外部キャッシュが埋もれてほぼ機能していない状態でした。それでもiDX2が動くので386よりは明らかに高速でした。アクセラレータ上のDX2をDX4ODPやPK-A586/98(要ライトスルー改造)に変えると更に高速には動きますが、FDDはまったく使えなくなります。 CX486DLCをm70で本格的に常用していたわけではないので断定はできないのですが、FDDがまったく使えなければすぐ気付くはずですから、それなりに動いてはいたと思います。というのも、外部64KBキャッシュの環境で内部キャッシュが1KB増えたところでパフォーマンスはほとんど変わりませんから。386系H98本来の機能を殺さずにパワーアップするのはそれが限度なのではないかと思います。 m70でCPUアクセラレータにするとグラフィック回り(95のH98用スタンダードディスプレイアダプタのようにノーマルモードからハイレゾ画面を呼び出した場合)で不具合が出ることは過去何度か話題に出したと思いますが、逓倍率が二倍以上のCPUで起こる現象でしたので、上記のH98対応CPUアクセラレータの件とあわせて、CPUクロックの高速化を行わないCx486DLC直差しであれば、FDDも割と安定するのではないかと予想しています。
> EPSON機(略)除外しています ありゃそうでしたか。手持ちの386LSではCx486SRx2に貼り換えたマザーボードもあったので発掘を考えていたのですが。どちらにしてもI/O F6でA20制御できない286機の延長上にあるマシンですからRAM化も期待できそうにないですよね。
> 初期のIntel 486SX機では 末期の486SX機であるBX3(+ODP)でも同様でした。
> 9801USと386SXノート機でIDEの可能性 もちろん9821初代もそうで、SCSIは内蔵していてもHDDはノート用パックです。
> 電源が生きているやつもほぼ見かけない 出回った数自体が少ない、というのもあるでしょうね。 今回、仕舞い込んでいた非PCIな時代の98をすべて確認したのですが、長期間放置した個体は軒並み電源が入らなくなっていました。これまでVM21やRAやEPSON機が普通に動いているのは偶然だったようです。m90もだめでハイレゾ環境全滅です。orz
結局、動かない機種はほとんど仕舞い込み、電源の入らないRXだけ出しておきました。これならRAの電源が使えますから。同じPU463でもRXはトーキン、RA2はSANKENでした。上位機種のほうが良い電源が使われているんでしょうかね? 動かなかったのはRX、EX、FXと下位機が多い一方で、RA2や21は元気なもんです。
---- ところで今回5インチ機ばかり何台もいじってきたので外付け3.5インチFDDも引っ張り出したのですが、PCLINE35Dという2ドライブ製品は、なぜか環境によって2台目が動いたり動かなかったりします。 どうやら、VFOのあるFD1137Dを外付けFDD-I/Fに直配線する方式の場合、2台目を接続する場合はディップスイッチで内蔵#3#4/外付け#1#2に設定していないと外付け2台目が正常動作しないようでした。恐らくVM未満とか15ボード用の、古い規格の製品なんでしょうね。さすがにご存知だった方もいらっしゃるとは思いますが、ご参考まで。
|
FDD動作時だけウェイトを入れられないか かかっくん 2024年5月20日(月) 3:21 |
どーせ速く成った処でFDDの動作も速く成るワケでわナイので、せめてFDDの動作時だけウェイトを入れられま せんかねぇ?動作不良の原因が解らないと対策しようが有馬せんが。I/Oリカバリタイムとかとわ念い枡が まぁH98/70わDOS2.11が動作不良とか色々と互換性に問題が有馬したし余り期待しない方が良い鴨知れま せんが。H98/(U)60を33MにOCした方が良かったり?
ところでFDCを765から72065に替えると此の辺は変わり枡かねぇ?もう統合されて居枡か
旧型機用のFDDの中にはDS2,3に設定されたモノが有馬す。デモ2台目だけの理由には成らない気が?
|
H98対応のアクセラレータやソフトウェアに興味 まりも 2024年5月20日(月) 9:00 |
H98model70の場合オンボードのキャッシュがあり、これに対してもなんらかの操作が必要かも。とくにハードウェア制御は改造必要レベルのはずで、対応するアクセラレータがほぼなかったのも道理です。Disk BIOSへのフックはDOS常駐プログラムならRAM BIOSのことはわからなくてもできます。 フックするついでにFDアクセス中はキャッシュ禁止にしておけばいいのですが、i486なH98でもODPに載せ替えるだけでFDアクセスに問題が出るほどシビアでした。主な対象がH98S8だと思いますが、FDアクセス時に遅くするFDSLOWという名前のソフトウェアもあったと思います。
EPSON 386機は今後の課題。
|
(U)60にキャッシュは? かかっくん 2024年5月20日(月) 14:10 |
H98/70に64Kのキャッシュが有馬すが、(U)60には有馬せんか?
|
H98のCPUキャッシュ KAZZEZ 2024年5月20日(月) 23:07 |
> キャッシュ禁止 H98の場合、I/O 9896hで外部キャッシュのON/OFFができることがio_cpu.txtの最後に書いてありますが、これが486系H98の場合は内部キャッシュに対して機能するようでした。これは仮想86の影響を受けないらしく、WindowsのGUI時でもDOS窓から簡単にCPUキャッシュの有効無効が操作できました。FDSLOWもH98(S)を対象としている以上は、たぶんこのI/Oを使っているのではないかと予想します。486系H98であれば逓倍率の高いCPUに変えてもCPU内部キャッシュは同じ方法で制御できるはずですが、386系H98の場合はI/O 9896hが外部キャッシュに対して機能するわけですから、486CPUに載せ変えた場合のL1キャッシュ制御は自前で行わなくてはならないと思われます。
> (U)60には有馬せんか とりあえず第三研究所やpc-9800.netのデータではmodel70と同じく64KB搭載となっています。
|
正式版に まりも 2024年5月20日(月) 23:45 |
CX486D はEXE形式に変更(間違ってIPLwareにしないため)してバージョン2.00、CX486IPLは1.00になりました。試作版ではなくなりますが、CPUリセットが起きた場合青バックになる点は残しています。本体のDIP SW2-1と2-7をONにすると、上の書き込みの98RLのようにFLUSH#ピンを活かす改造を行った際に適合した状態になります(BIOSフックしない、FLUSHピン有効)。DOS以外のOSでもIPLwareの段階で設定した最小限のキャッシュ(80000-9FFFFとHMA 64KBが除外)が有効なはずです(ただしCPUリセットが発生した場合の元80286機を除く)。OS/2 2.11などはどうなんでしょうかね? OS/2 1.21だとCPUキャッシュがあることでインストールすらできないようでしたが。
なお対象機以外の機種/CPUチェックが甘いのはさほど直していません。
>これが486系H98の場合は内部キャッシュに対して機能 あやや、model70,60ではダメなんですか。完全なハードウェア制御なんですかね?それで不都合なことというとOS/2 1.21とか、、、
だいぶ上の方へのコメント >DXは6連DIPを遣ってわ? その未使用部分をいろいろ設定して全I/Oを読み出しダンプしてみたものの、変化があるところは見つかりませんでした。どうも何処にも繋がっていないダミーではないでしょうかね。I/Oアドレスデコードして物理的に繋ぐか、DIP SWITCH 2に接続される8255のportの地点を探して対応bitに繋ぐ改造でもしないことには流用できる気がしません。
|
いろいろ KAZZEZ 2024年5月21日(火) 23:37 |
アイオーのPK486S.COMは、やはり286向けのキャッシュイネーブラであるようです。なんとシステムワークエリアの0000:0486〜0487のCPUIDに決め打ちで0420を書き込んでいました(0000:0480にも386フラグが付きます)。これらの値がゼロであるかどうかで元286機かどうかを判断するようなプログラムでは誤動作するかもしれません。というか、そこで判断するのは良くないということでしょうね。
> model70,60ではダメなんですか。完全なハードウェア制御なんですかね? 386系H98に対応したCPUアクセラレータで486を載せた場合も、さすがにデフォルトで有効になるのは外部キャッシュだけではないかと思います(前述のようにベンチマークでは外部キャッシュは機能していない感じでしたが)。そのままではi486の内部キャッシュが有効になっていませんので、普通にソフトウェアで有効化する必要がありました。アクセラレータ基板でハード的に何をやっているのかは存じませんが…。
> CPUリセットが起きた場合青バックになる 開発版ではそうなるという旨は書いてありましたが、こちらではこれまでにCPUリセットを起こしてもまったくそのようなことにはなりませんでしので、てっきり試作版であっても公開版では除去された機能かと思っていました。何か条件があるのでしょうか? 実のところデジタル出力のモノクロモード(グリーンディスプレイ)を頻繁に使っていたせいもあるかもしれませんが、普通にアナログRGB出力でも結構試していたはずですので。
> 対象機以外の機種/CPUチェックが甘いのはさほど直していません。 CX486IPLを試す限り、とりあえずこれまでに報告したことは直っている感じでした。
ところでCx486DX2の場合ですが、RA21でキャッシュ有効化後にCX486Dで読める情報は、よく見ると結構でたらめみたいでした。キャッシュ無効時の情報はCx486DLC/SLCの返す情報と同じなのですが、キャッシュを有効にした後に読める情報はCx486DLC/SLCの返す情報とは必ずしも互換性が無かったみたいです(すみません)。
|
ハイレゾで怪しいCX486IPLというかRESETパッチ まりも 2024年5月22日(水) 12:13 |
>PK486S.COM うわぁそんなことをやっていますか。当時としてはそれで486機に偽装する方が都合は良かったのだと思います。しかしCX486に触る他のユーティリティとはケンカします。当時はアイオーデータ独走でしたのでまあよかったのでしょう。
>青バックにならない 青といっても16段階の3程度の薄暗い色なので、ディスプレイによっては気が付かなかっただけかと思います。
ところでCX486IPL 1.00のハイレゾモードでの動作はおかしいようです。XMSを利用するアプリでハングアップまたは異常動作になります。EZエディタはXMSを使いますが、そこで問題が出るのですよね。原因になりそうな点は見つけて修正してみたものの、症状は同じです。本当の原因を見つけるまでは時間かかりそうです。RLのインターレースな映像信号がきちんと映るモニタがなくて実機デバッグがしにくいというのもあります。それにしてもハイレゾのメモリウィンドウ、XMM、EMMの闇はとことん深いです。既存のキャッシュユーティリティがハイレゾできちんと動くのか?というのがきっかけでチャレンジし始めたわけですが、まさにその穴に落ちているという、、、
【25日追記】ハイレゾでの問題、どうも本質的にはXMMでもなくキャッシュでもない感じです。CPUコールドリセットルーチンのあるF800:000Dhにパッチを当てると、なぜかキーバッファの対応が狂うことが原因のようです。これは普通には顕在化しませんが、STOPキーを押すと起こります。またはSTOPキーint6hをhookするアプリの後でも起こります。リセットルーチンでとくに何もせずRETFするだけでも起こるという不思議な現象なので、対策も思いつきません。アイオーデータのドライバではハイレゾの時にどうしているんですかねぇ? 【25日17時追記】そもそもVMM386のCAオプションでハイレゾモードの時にどうなっているのか調べたら、全然対応してないではないですか(画像)。これはノーマルモードに適合する設定です。なおCX486Dで表示後はハングアップします。ちなみにこの画像はディスプレイがCenturyのLCD-10000VH5です。インターレースにもかかわらずなんとか表示できているのはびっくりです(水平位置手動設定、コントラストは異常)。
というわけでバージョン2.10/1.10でハイレゾ問題は一応解決しました。
|
一応なんとかなったような まりも 2024年5月28日(火) 0:07 |
アイオーデータのVMM386 /CAでの設定の件です。よく考えてみると、ハイレゾでのこの設定はあながち間違いではないかもしれません。なぜかというと、VMM386はハイレゾ時にはメインメモリを640KB(A0000h-1)に制限しないといけないためです。EMSのウィンドウはB0000hからで、A0000-AFFFFhはどうせ使わないからキャッシュを効かせない場所にしまっているのかもしれません。しかしMEMORY SERVERにはMEX.COMというプログラムが付属しており、この64KBをDOSのメモリコントロールブロックに繋いで拡げることはできるのです。そこをキャッシュしないというのは、ハイレゾモードにきっちり対応しているとは言い難いです。。
拙作CX486IPL 1.10では、DOS起動後に実行した場合はEMMを検出してキャッシュ無効域をB0000hからの64KBに設定しています。EMMが無い場合はこの設定は行わず、768KBのDOS全空間にキャッシュ有効です。IPLware段階のCX486IPLでは有効域を狭くして、HIMEMやEMSがごちゃごちゃメモリウィンドウをいじったりCPUリセットかけたりしたのち、落ち着いた段階でCX486IPLを実行すると(このときはCPUリセットルーチンをいじらない)、うまく行くようです。
なおこのような手順なので、HSBのことは全く考慮できません。というかとっくにHSBでのリブートは諦めています。何でもかんでも設定しておこうとするIPLwareと、なんでも元に戻してからにしようというHSBは、全く逆の方向を向いており、相入れないものです。ディスク段階でのリブートを高速化するには、拙作DISKBOOTを活用してください。今回、EMM386仮想86モードからのリブートにもいくらか対応しました。肝心のRLのハイレゾモードで動作しないのが難ですが...外字メモリ領域が足らんのですかね?【1時追記】ハイレゾで外字に一部しか情報が保存されていなかったのを修正(汗 ttp://hp.vector.co.jp/authors/VA012947/knowhow/diskboot.html
|
ハイレゾモードの未使用RAM まりも 2024年5月28日(火) 23:42 |
まず A-mate(Ap3)でのテストです。以下の数値は十六進です。 out 93, 0E out 53D, B2 で E0000〜FFFFFの領域の裏にあるRAMを A0000〜BFFFFに写し出し、 IDEとSCSI のBIOSデータがあるA6000〜A9FFFとAE000〜AFFFFを除いてデータを埋め込みます。ついでにF5000が写されているB5000〜の4KBにもデータを埋め込みます。その後out 93, 0Aで復帰します。先に埋めずに読み出すと例によってPARITY ERRORが出ます。
SYSTEM BIOSのスキマであるF5000は確かにRAMになっています。また53Dのbit7が立っているとEA000,EB000,EC000,ED000の各4KBが連続でRAMになります(A-mateのみ、RLでは不可)。しかし E5000はRAMが表にでることはありません。試しにI/O 1E8Eに80/81以外の値を出力してもダメでした。ここのRAMを表に出すことができる方法はあるのでしょうか・・・ ないにしてもハイレゾモード「だけ」で動作するROMボードに価値がありそうな気がせず、E5000のよい使い道が思いつきません。Ap3くらいだとCバスより内蔵メモリが優先されるので、E4000〜16KBを強引にEMSボードのメモリに割り振ることで、「E5000だけ」そのRAMを出すことはできそうですが、重複するアドレスにメモリを置くというのは気持ち悪すぎます。
なおPC-98RLでは物理アドレスC0000〜DFFFFのRAMは表に出せませんが、E0000〜FFFFFにはRAMがあり、F0000〜のSYSTEM BIOSはRAMになっているはずです。ノーマルモードではSCSI BIOSがRAM化できませんでしたが、ハイレゾではRAM化するような気がします。また同様にF5000もRAMにできるはずです。今月中はRLを引っ張り出したままなので、ちょっと調べてみます。
|
RL2/5とRL21/51で違いそーな? かかっくん 2024年5月29日(水) 0:27 |
RLデスが、RA2/5を元にしたRL2/5とRA21/51を元にしたRL21/51で違いそーな?
|
RLにはout 43F,Cx の機能は無い まりも 2024年5月29日(水) 18:01 |
RLでノーマルモード/ハイレゾモード共通で妙なことがわかりました。ノーマルモードモード時にC0000~DFFFFの裏RAMを表に出すことができない(方法が知られていない)のですが、out 43F C0を一回やっておくとディスクの読み書きが速くなります。(←誤りと判明)同様にハイレゾモードではE0000~EFFFFの裏RAMはどうやっても表に出ませんが、out 43F,Cx で高速化します。裏RAMにEE000のSCSI BIOSはコピーされていないのに、C4を出力しているわけでもないのに、高速になるのです。これは一体何が起こっているのでしょうね。SCSI BIOSはCバスのROMのままではあるが、ウェイトがキャンセルされてROMの読み出しが速くなるということでしょうか。そしてさらに不思議なことに、ディスク読み書きが速くなった状態の時はCPUbenchの結果は少しだけ遅くなることがわかりました。CPUを犠牲にしてROM読み出しは高速化?よくわかりません。
【23時追記】どうもお騒がせしました。dskbenchが実行ごとに結果が大きくばらつくというのが真相のようでした。一応、DOSのbuffersは2と最小、smartdrvなしなのですが、結果の変動が大き過ぎます。DOS起動後、ディスクを初めて読みに行く時に遅い結果が出るというだけで、out 43Fは全然関係ありませんでした。HDB98を旧機種に対応させるしかないですかねぇ。CPUbenchの方も同様で単なるばらつきのようですが、Cyrix486DLCでキャッシュ運用であることとは関係しているかもしれません。
なおF0000~FFFFFの裏RAMはSYSTEM BIOSとして表に出ており、RLでもハイレゾ時のF5000~の4KBの空白部に何かを書いておけばそのまま現れます。起動後の何かのBIOSの引っ越し先には使えます。
|
うなるHMA KAZZEZ 2024年5月31日(金) 23:31 |
うちだけかどうかは分かりませんが、VXもどきにCバスメモリをプロテクトメモリとして載せてDOS=HIGHを行うと、DOSのコマンドプロンプト入力待ち待機状態のときに限って内蔵スピーカーから中音域の異音を発するようになります。スピーカーのコネクタを外せば収まりますが、スピーカーボリュームの影響はほとんど受けないようですので電気的なノイズだと思われます。Cバスメモリの種類によっても症状に差があり、NEC純正の51ボードだと顕著で、ジャストシステムのメモリは割と静かでした。
面白いのは、CX486IPLを実行すると静かになるところです(高音域のノイズはあるようですがだいぶ目立たなくなります)。アイオーやメルコのイネーブラでは静かになりませんので、何が違うのだろうと思ったんですが、いろいろ試したところ、単にHMA領域のCPUキャッシュが有効になると静かになるだけでした。アイオーのイネーブラでも/Hを指定すると静かになりました。
DOSの入力待機時はCPUが激しく活動していると言いますけど、その際にCバスメモリのHMAに展開したDOSに頻繁にアクセスして、その電気信号がノイズとしてスピーカーに載るのでしょうか? メモリに頻繁にアクセスするといっても、Cx486系の1KBキャッシュに収まる領域だったのでしょうかね。
CバスメモリをHMAに割り当てるという都合上、もともと本体メモリ640KBしかない機種でしか試せないのですが、少なくともRXでは同様の現象は起きないようでした。VM21/VXは40年近く前の機種ですのでどこにどんな不具合が出てもおかしくないでしょうけど、一体なにが原因なんでしょうね。電気的相性なのか電解コンの劣化なのか…。
|
|
|