戻る
<< BACK  2019年2月  NEXT >>
 PCIノート機のIDEのスレーブについて  リウ  2019年2月25日(月) 16:19
反転IDEにやられてCFを壊したにも関わらず続きをやりました
twitterに書きましたがせっかくなのでここでも

PCIノート機のIDE-BIOSが起動時にやる仕事
1.0:55dの数値変更
2.0:5baも変更?
3.0:457を変更
4.d800:2100で仕事

4つは調べてわかりましたが他があるのかなぁとか
IDE-BIOS自体にパッチあてないとダメだよとか
IDE_DISKはフリーソフト開発ならリバースエンジニアリングしてもいいよとは書かれていますが…

 ノート機はよくわからず  まりも  2019年2月25日(月) 18:51
ノート機については大していじってないのでサッパリですが、デスクトップ機では 0000:0457や05BAは 約515MB以下のHDDのためのワークエリアなので、それ以上の容量のHDDでは設定不要かと思います。CD-ROMドライブの接続でもなにか設定しているんでしょうか?

PCIノート機のHDDの容量は810MB以上はあったかと思いますので、0000:055DとD800:2100のつじつま合わせだけでよさそうな気もします。ちなみにidentify deviceで読み出された200hバイトのデータがある場所は、PCIデスクトップとPCIノート機では異なるようです。

IDE_DISKはIDEデバイスI/Oを直接操作して、DOSのI/O Ctrlで読み書きしているようです。BIOS無関係にスレーブが使用できます。今どきならWin95OSR2とFAT32に対応していただきたいところではありますね。ASPIディスクドライバでもFAT32対応というのは見たことがありません。

 f8e8にも変更が必要でした  リウ  2019年2月25日(月) 22:09
自前emulatorにNa12/HのIDE-BIOSを使わせてみてXt13のf8e8セグメントの状態だとスレーブが使えることを確認したのち
IPLWAREでf8e8以降のノートフラグ?も消してやるとマスターのCFから起動しスレーブがBIOSアクセスで見えるようになりました。
DOS起動なら大丈夫っぽいですがインストール済みWin95が起動すると書き込みエラーがわんさかでてきて再起動させられました(1台の場合は一応操作できていました)

つまりIPLWAREでやったことを羅列すると
f000とd800のセグメントの書き込み禁止を解除
f8e8でノート機であることを止める
d800:2100にそれっぽい値を入れる
0:55dに接続状態を足す
一応f000とd800の書き込み禁止を戻す

でプライマリCFから起動したDOSからスレーブCFの中身が見えるようになりました
f8e8次第なのはつい最近にNECCDMでヒントがあったのに触るのが遅かったのがバカなところです
スレーブからは起動できていませんが またなんなんでしょうね

scandiskでエラーがまだ出ていますが以前のゴミじゃないかなと楽観視しています

追記f8e8は不要でしたので訂正いたします。
なおエラーは深刻でしたのでもうちょっとやってみます

さらに追記 酷い誤植があったのでそこも修正しました。

 FreeDOS(98)さまさまでした  リウ  2019年2月27日(水) 3:46
twitterとこちらでマルチになるのもあれなのですが結果は書き込まないといけないと思いますので
FreeDOS(98)付属のbtnpart.exeで確保した1パーティションにFreeDOS(98)のシステムを書いたときだけスレーブからも起動させることに成功しました。

 CFに起因する問題がわかっていない  まりも  2019年2月27日(水) 13:38
MS-DOSのIO.SYSが起動途中で止まってしまう原因のほとんどは、DOSが想定したパーティションのディスクアドレスに正しいBPBやFATが書かれていないことです。FATがズレている?とか scandiskでエラー?というのはそのあたりが関係していませんでしょうか。CFだと拙作フォーマッタ関連ツールが動かないとか誤動作するという話しも出ています(FORMATX公開取りやめの理由のひとつ)。原因などは私はCFを使わないのでわかっていません。

個人的にこの問題をよく起こすのは、DISK BIOSのCHSとフォーマット時のシリンダ境界=H*Sの積 が一致しない場合です。DOSが想定したディスク番地にBPBやFATがありませんから当然のように起きます。EXIDE**でいろいろなパラメータにできることが根本原因ですが(汗
ちなみにCHS不正でもIO.SYSが起動できる場合もあります。ただしそのときはDOSメモリマップが異常となります。64KBバイトくらいの無用なバッファ?が確保されています。ドライブ認識に失敗した残骸なのでしょう。

スレーブのドライブを認識させることとCFを使うことの問題の切り分けも必要かと思いますので、まずHDDで試してみようと思っています。

話は変わりますが、Free386というのが作られていたんですね。しかも98に対応しているそうで。私は本家Pharlap 386 DOS-extenderのアプリケーションを98依存でいろいろ作っていました。しかしEXPファイルでは公開しても使う人がいないのでお蔵入り状態でした。

 PCIのノート機に代わるデスクトップ機  まりも  2019年2月27日(水) 13:58
La13しかノート機は持っていないし空間的に内部にデバイス増設不可能な機種のため、エミュレータでないと調査が面倒過ぎるので・・・
実はデスクトップ機のXe10/BX4は、IDE BIOSがPCI機とほとんどそっくりに作られています。デバイスユニット番号も空きなしで80hから詰められます。
# 実機持っていないのですが、聞いた話やデータを見せてもらったことがあるということだけで
ところがXe10/BX4でスレーブ接続のHDDが認識できた、4台認識できたという話しを聞いたことはありません。なにかフラグ立てるところを殺してあって、仕様上スレーブなしという扱いにさせられているように思います。つまりPCIノート機と似ている何かがありそうです。

2/28 追記:そのIPLwareの最後に、
mov ax,0380h
int 1Bh
の二行(BIOSのイニシャライズコマンド)を追加すると勝手に認識してくれる可能性もあります。ちなみにセカンダリのない機種でやると、プライマリスレーブのHDDがこれで認識できなくもないです。しかしワークエリアが1台分しかなく2台で共有されてしまうので、認識容量が1台目と同じになってしまいます。それでもアクセスはできます。

 デスクトップでは  リウ  2019年2月28日(木) 15:35
Cx13はスレーブを無視します。Xb10/Jはスレーブを無視しません。

ということでCx13で試しました。反転コネクタは恐ろしく切り欠きもない詰め物もない2台用ケーブルがなかなか見つからず焦りました。

I/O 430でスレーブチェック(これはCx13でも効くようです)
セグメントD800を書き込み可(山猫用)
0000:055dを変更
d800:2100に嘘の値を書き込み(本物は800MBですが2GBのシリンダ値をそのまま流用)
int1b 0x380

これで領域確保済みのスレーブからも普通に立ち上がりました。そしてscandiskをかけても問題はないようでした。
Windowsをインストールなどはしていませんがおそらく大丈夫かと

スレーブをBIOSで無視してきたデスクトップ機種でスレーブを生かせるソフトにはなりそうです。

デスクトップ用のスレーブがつかえるCFアダプタを持っていないのでこれ以上は今は試せません。日本橋に出かけても店頭にはもうなさそうですよね…

ネット通販探してみますが、まともな製品チェックされていない噂がいろいろと聞こえてきますから…

 PCI Canbeの救世主になるか  まりも  2019年2月28日(木) 18:25
ワークエリア(パラメータテーブル)のつじつま合わせとDISK BIOSのinitializeコマンド発行のみでうまく行きましたか。おめでとうございます。Cx13はPCI機とIDE BIOSの構造も同様のはずです。スレーブ無視はミイソの出し惜しみ仕様に過ぎないということははっきりしました。逆に言えば、IDE BIOSのどこかに無用な操作をしてスレーブ無視している(検索しないでいる)箇所があるはずなので、それを探したいところです。その解除をEXIDECBに組み込めれば容量上限拡大とともにスレーブ対応になります。

<ここから23時に追記>:
CHSアクセスではやっぱりそう甘くはなかったですか。HDDに対してInitialize device parametersを一発送らないといけないのでしょうかね。旧作のExide32gでは、D800:2100のパラメータ書き換えの後そうしています。スレーブのHDDはBIOSのイニシャライズではきちんと初期化が行われていないとすると16:63で振舞っているかもしれません。<ここまで>

Xe10/BX4でも同様にうまく行くと期待できそうですが、D800:2000〜が普通の状態では表に出ていなくて、out 1E8Eh, 81h で表に出す必要があるかもしれません。

ちなみにSCSIの場合は0:460からのパラメータテーブルを書き換えてax=03A0h で initializeコマンド発行して再認識させれば、IPLwareの段階でCHSパラメータをある程度自由に変更できるようです。PC-9801-100の容量上限拡張パッチで使ったことがあります。

 2つのアプローチ  まりも  2019年3月1日(金) 17:30
まあ普通に考えれば、BIOSの初期化ルーチンに再び入ったところで、無視されるスレーブの初期設定は完全には行われないということになるでしょう。自分でIPLwareの段階で初期設定(BIOSのCHSに合わせてATAコマンド initialize device parameters=91hを発行)を行うならEXIDE32Gにスレーブ機能を付ける手があります。こっちのほうが普通は簡単ですが、もともと4.3GBオーバー対応機専用でしたので、ノートの場合でもNr13以降くらいの機種のスレーブ拡張に限られてしまいます。CanbeだとCt20かCEREBくらいでしょうか?

いっぽうIDE BIOSを直すほうはリバースエンジニアリングですから大変ですが、エミュレータ環境ならそのほうがよさそうです。

ということでとりあえずEXIDE32Gのソースを14年ぶりに引っ張り出してきましたが・・・ライブラリに入れたルーチンの互換性がとれなくなっていてコンパイル/アセンブルができませんでしたw
それらもアーカイブから探してこないと。まずは今公開しているROMアプリ版EXIDE*** との整合性を取るところからやってみます。

<18時追記>CFで、容量変更コマンドが通らなくても、HS変更(initialize device parameters)コマンドはまた別ですので通ると思います。が・・・もしかして「98でDOSですら正常に使えないCF、フォーマットもできないCF」というのはこれも通らないモノだったという可能性はありますかね。

<23時追記>うまく行ったようですね

 完了いたしました  リウ  2019年3月1日(金) 23:21
Na12/Hで2GBのスレーブCompactFlashがきちんと使えるようになりました。
必要なIPLwareは以下のことを実行させるだけです。

1、d800セグメントの書き込み禁止の解除
2、0000:055dの数字の変更
3、d800:2120からの2バイトに有効な値を代入(後ろのものは不要のようです)
4、I/Oアクセス 4個
0x430に0(プライマリを選択)
0x64cに0x17(スレーブをCHSアクセスでヘッド8)
0x644に0x11(Sを17に)
0x64eに0x91(諸元変更コマンド)

たったこれだけでした
まりもさまの的確なアドバイスのおかげでたどり着けました
4GBオーバーを実現するのはパッチが必要でしょうがそこは宿題ということで

d800:2100からのものの設定
3バイト目 おそらくモーター停止までのカウンター スレーブなら0でも大丈夫
4バイト目 おそらくオフセット0000:045Dを指定している むしろ入れると起動が遅くなる 0のままで大丈夫
19バイト目 おそらく45Dに入れてほしい値が入る デスクトップのプライマリスレーブだと0x10になるけど0のままで大丈夫

今はスレーブから立ち上がったDOS6でscandiskでクラスタスキャン中です。
16000クラスタまで何もエラーが起きていません。大丈夫でしょう。

ありがとうございました。

P.S.私がIPLware用ソフトとして公開してもなかなか評価されないでしょうがどうしましょうか

 リンク先だけうちにおいておきますか  まりも  2019年3月1日(金) 23:38
「スレーブはBIOSから使えない」という固定観念を打ち破ったのだから高い評価は受けるはずです。ただ評価はともかく、存在を発見されにくいかなとは思います。そちらで然るべきところ(Google?)にアップロードしていただいたら、リンク先と紹介をうちのサイトに載せておくというのはどうでしょうか。

4.3GB以上への対応は、EXIDECBのソースEXIDEPCI.Sの中身を移植、マージしてやればいいと思いますよ。使っていただいて構いません。ただしそうするとワークエリアの使い方から何から総引っ越しとなりますので、D800:2100の書き換え箇所もEXIDECBと合わせる必要が出てきます。また起動するマスターのHSはいじれませんので、4.3GB以下の容量帯では変更しないようにします。
マスターが無理でもスレーブのドライブが壁を超えられるだけでも価値は高いでしょう。

<3月2日 23時 画像の追記> EXIDE***検証用にチェックツールは作ってありましたが(E10CHKを改造しただけの物)、IPLwareで後から認識のスレーブもしっかり通りました。問題なしです。Xe10/BX4でもPCI Canbeでも絶対イケると確信。

 その後  まりも  2019年3月3日(日) 17:56
Canbeは全然わかりませんが、Xe10/BX4では問題ないように思います。NTと2000は、スレーブのCD-ROMドライブの認識でもそうだという話が出ていますから、最初から期待していません。
STOP押しリセットは9801VXの頃の機能で、今では全く機能していないでしょう。代わりにあるのが[CTRL]+[SHIFT]+[STOP]押しリセットで始まる(beepが鳴るのでその後FD入れてCOPYキーも叩く)MMDUMP機能です。FDに、「そのとき」の1MB空間の全メモリの内容が出力されます。F800:000については ITFではなくSYSTEM BIOS ROMがダンプされます。RA21くらいから486機にはこのMMDUMPがありますが、これもPCI機では廃止されていたような?ノート機ではどうなんでしょうね。

あと、ATAのレジスタにoutしたときはステータスレジスタがreadyなのを確認して次の書き込みに移るのが真っ当ですが、そうすると大がかりなので、私もEXIDE32Gではそれを省いていたような気がします(追記:ちゃんとチェックしていました)。エミュレータだとその必要もたぶんないでしょう。

 BIOS読みも慌てて始めました  リウ  2019年3月3日(日) 20:41
GUIでどうなるかのチェックもしましたのでその報告を
WinNT4 スレーブは無視されました
Win2000 CompactFlashはOSの制限にひっかかるようです(はずしてまで試しません)
Win9x デバイスマネージャで内蔵インターフェイスを無効化してBIOSアクセスモードに落とすと使えるようになりました。

IPLwareとして公開も致しました
https://drive.google.com/drive/folders/1BZ7b4an5o_EI9lKoyU6RzOlsZ4AADlFJ
私が紹介しても確かに誰も見てなさそうです 笑

で、今ここに来たらBIOSの接続チェックの中りが書かれていたので慌てて見てみました。

修正
Na12/HのIDE-BIOS
確かに4台分見てるっぽいですね
もっと真剣に読まないとダメですが

 CFの諸元  まりも  2019年3月3日(日) 20:47
CFはSandisk製のデジカメ用しか持っていませんが、PC-98で調べてみました。古い128MBのはファームウェアが返すヘッド数、セクタ数が、8:32となっています。もちろんBIOSが8:17にしているので使えますが、4.3GB以上でこのような仕様のCFがあるとすると、4.3GB以上対応機で問題が起こりますね。まず8191MBまでしか使えないことになりますし、フォーマット互換性が悪くなります。

<22時追記> やっぱり存在していましたか、Initialize drive parametersコマンドが通らないCFが。今まで勝手に考えていた仮説ですが、証明されたようです。これが通らないと98ではBIOSで扱えずブートもできないのは当然です。
しかも16:32だったりとか2のn乗を取るものが案外あるようですね。CFの性能低下を避けるにはこのほうがよいのでしょうけど。

 Bf(の頃の機種?)では少々様子が違うようでした。  KAZZEZ  2019年3月5日(火) 22:55
リウ様pciplのご紹介ありがとうございます。m(_ _)m
とりあえずIDE-SLのソースを参考にBfで試してみましたが・・・。
やはり仕様が違うのか今のところうまくいきません。

Bfは540MBの壁ありの機種なので事情が異なる可能性があるのですが、
気付いたこととしては、
・I/O 0430 はスレーブ接続していても00を返す(ので、その分岐は削っています)。
・I/O 1E8Eに81をOUTしないとD800:2000〜が現れない。
・プライマリマスターHDDのシリンダ数はD800:2082からの2バイトに現れる。
と、だいぶ仕様が異なるようでした。

本来の仕様であるセカンダリマスターに2台目HDDを接続した時は
2台目HDDのシリンダ数がD800:2092からの2バイトに現れることから、
とりあえずそこを2台目と見なしてプライマリスレーブ接続のシリンダ数を書き込んで
INT 1B - 0381を追加してみましたところ、
HDDの存在と書き込んだパラメータはBIOSから認識しましたが、
起動に数分待たされるうえDOS上のドライブは現れませんので、
スレーブHDDに正しくアクセスできていないものと思われます。
恐らく上記以外にも仕様の違うところがあるのかと思います。

個人的にCanbeは持っていませんので、
やはりまずはPCI系のノート機で試すほうが無難そうですね。

 PCI Canbe買うしか  まりも  2019年3月6日(水) 15:43
IDE BIOSを構造や歴史的展開で単純に分類してみると、
世 代 :潜在的対応ドライブ数 パラメータワークエリアD800:
第1世代:ドライブ1台対応 [2300h]使用
第2世代:ドライブ2台対応 [2300h]使用
第3世代:ドライブ4台対応 [2100h+20h×n]使用
第3'世代:ドライブ4台対応 [2100h+20h×n]使用、4.3GB壁以上16:63

というような感じではないでしょうかね。IPLwareの段階でBIOSで認識させブートもできるスレーブ技は、第3世代に限られます。第3世代機なのに意図的に2台しか対応しない機種というと、必然的にPCIノート機全般、デスクトップ機ではPCI Canbe、Xe10/BX4くらいに絞られます。

Bfは、486-Xmate、BX3とは容量壁は異なりますが第2世代です。第2世代だとデバイスユニット番号80h,81hからしかブートできず、しかも81hは物理的にセカンダリと対応するので、スレーブからブートできる余地はないようです。BIOSの構造を改めるような大がかりなパッチあてとセットでないと、BIOSでの認識も難しいでしょう。

ちなみに初代Xa,Xf,Xtは一応PCIがありますが第2世代じゃないでしょうかね(推測)。
Xe10/BX4はPCIなしでも第3世代なので何とかしたいところですが、あまりにもIDE BIOSはXa7/Cと同じで、どこでスレーブ制限かけているのか見つかっていません。どうもITFの段階ではないかという気がしてきましたが、実機なしでは限界です。

<3/7追記> 第1世代機相当のAnではプライマリ・マスタと同一容量以上(4.3GB以下)のHDDをスレーブに載せる場合に限りうまく行きます(2100+20h×nのエリアは設定無意味)。この点で第2世代機より容易です。

 ノート+CF+Windows 2000は不可?  KAZZEZ  2019年3月8日(金) 4:30
> Win2000 CompactFlashはOSの制限にひっかかるようです

これもなんか不思議なんですよね・・・。
マスターであってもノート機ではCFで2kは動かないってことでしょうか?
デスクトップでは普通に動いているのですが。

あらかじめG8VER(V13)で実際にWindows2000SP4をインストールして起動可能な状態のCF(2GB)を
Nr15に移してみたのですが、INACCESSIBLE BOOT DEVICEだか何かでブルースクリーンでした。
(スペル訂正)
恐らく2kネイティブドライバが起動ディスクを認識できていないようです。
ノートのIDEはデスクトップのIDEと何がそんなに違うんでしょうかね?
少なくともIDEドライバくらいは同じだと思うのですが。

 Windows2000にIDE接続のCompactFlash  リウ  2019年3月8日(金) 13:01
V13でインストールできると聞いて驚いています。
とりあえずここを参考にしていました。
http://vega.pgw.jp/~kabe/win/atapirv/W2kRmvInst.html

Xb10で試してみます。

CompactFlashにXPをインストールしたこともあるのですがその時はなにかやたらめんどくさいことをしたことも印象に残っているのでそのせいで勘違いしていることもあるかもしれません。
なお、その時はRAM-DRIVE併用でないとまともな操作にならなかったことも付け加えておきます

画像は少し前にNa12/Hでトライしたときのものです。

また、emulatorではWindows2000が640x480の画面に切り替えた頃に一度ヘッドとセクタを16/63に強制指定してしまうことを確認してもいます。

それとBfでのWindows2000スレーブは430の返事のせいでダメなんだと思います。Windows2000はIO430hの返事でスレーブの有り無しを判断しているみたいです。これはドライバ改造でいけるかもしれません。

 INACCESSABLE BOOT DEVICE  まりも  2019年3月8日(金) 13:59
Windows 2000のINACCESSABLE BOOT DEVICEに関しては機種を変更すると発生するのが「普通」です。近縁機種でも、PnPモデルが違うと(DOSモデルからWinモデルなど)発生します。デバイスマネージャで未使用デバイスドライバを表示させると標準IDEのドライバが複数出てくるかもしれませんが、それが異なるものは違うハードウェアという扱いなんだろうと思います。

G8VERでは(に限り?)Windows2000がCFにインストールできるというのは驚きですが、そもそもCFがリムーバブルかfixedかという属性はどこで判断しているんでしょうか。

 補足。m(_ _;)m  KAZZEZ  2019年3月8日(金) 17:57
あ、すみません。V13の2000に関しては直接インストールしたのではなく、
いったんHDDにインストールしたものをDRVCPYか何かでCFに移したものです。
語弊を招く表現で失礼しました。

ただ、先日行ったように、Xc16/Sに8GBのCF(トランセンドx133)を使ったときは、
(遅いという以外に)特に不具合も無く普通にWindows2000をインストールできたはずです。

ちなみにどちらのCFもIDEINFで見る限り本来のパラメータが16ヘッド63セクタでしたので、
8GBのほうはPC-98上でもパラメータに変更が無く全領域を確保できています。

CFをIDE変換した際にリムーバブルに見えるか否かはCFによっても違った気がします。
もしかしたら過去ログで何か話があったかもしれません。(違っていたらすみません)

 第3世代機で3台目がプライマリ・スレーブは・・・  まりも  2019年3月9日(土) 0:31
80h プライマリ・マスタ
81h セカンダリ・マスタ
これで認識している後にIPLwareでプライマリ・スレーブを認識させると
82h プライマリ・スレーブ
となってしまいます。これはよろしくないような気がしますがどうなんでしょうね。

80h プライマリ・マスタ
81h セカンダリ・マスタ
82h セカンダリ・スレーブ
の場合はIDE物理ポート昇順なので問題ないということかもしれません。

 これはやばい!  リウ  2019年3月9日(土) 2:48
基本的にノートで考えていたのでセカンダリマスタにHDDがいることを考慮していませんでした。
ご指摘ありがとうございます。DA/UAが想定外な入れ替わりをするとどうなるかは必ず実機で実験致します。

で、2000インストールなんですが2GBのCFでやるとやっぱり失敗しました。
DRVCPYもしようと思ったのですが、2GBのHDDがご機嫌悪くてCFとの同時使用をさせてくれなくなりました。単品だと動いてくれるのですが
そこで16/63アクセスできる状態を作り出して16GBのCFで現在始めた所です。

待ち時間があるのでemulatorでインストール済みディスクのIDEパラメータをMicrodriveっぽくやると起動できなくなることを確認しました。
少なくともword0のnotremovableかremovableフラグは見てるような気がします。
https://qiita.com/dornie/items/24f26d564b72a0720aae

そして16/63でアクセスできる状態にしても16GBのCFにはインストールさせてくれませんでした。

 Transendとかもありそうな  まりも  2019年3月9日(土) 3:29
なるほどidentify で得られるそことレジストリですか。
それにしてもSunDiskっていう正直なCFがあるんですね。

 ブルースクリーンの原因はIDEのPnPだけでは無さそう  KAZZEZ  2019年3月9日(土) 4:39
Nr15でHDDにインストール済みの2000をDRVCPY/b+XCOPY/r/i/s/k/y/c/h/e/vで
4GBのCFに移してみましたが、そのCFで起動するとやはりINACCESSIBLE BOOT DEVICEでしたので
システムレジストリのIDEのPnP情報の機種間差異だけでは無さそうでした。
やはりノートだとCFで2000は無理なんでしょうかねえ・・・?

 Cx13で3台載せ  リウ  2019年3月10日(日) 1:34
結論から書きますとBIOSアクセスは問題なさそうでした。
2台目と認識されるセカンダリマスタからも
3台目と認識されるプライマリスレーブからもMS-DOS6.20がブートできました。

一応心配だったのでdrvlstで対応を見ておきました。
いつも有用なプログラムをありがとうございます。

もちろんプライマリスレーブが81hでないと困るような特定プログラムでは問題が出るはずです。


さて、CFのremovableflagですがトランセンド製品ならIDEに繋ぐと自動で落ちるという噂がありました。
http://www.thinkwiki.org/wiki/CompactFlash_boot_drive
私の持ってるものは残念ながら落ちてくれないのでどこかのタイミングで製品入れ替えがあったのかもしれません。 と勝手に想像しています。

ノート機自体の方に問題があるとするとNECCDMでも問題になっていたf8e8のフラグあたりでしょうか?

 スレーブネタの小結(not相撲)として  まりも  2019年3月11日(月) 22:31
DA/UAが物理ポート昇順でないと困るのは自作ソフトだったりします(汗
ソフト運用記事紹介を書いておきましたが、こんなのでよろしいでしょうか。
http://hp.vector.co.jp/authors/VA012947/knowhow/ide_slave.html

>CF
結局のところ98ではしっかりRemovable 属性bitを見抜かれてしまうということで決着しそうですか。TranscendはIDE接続だとfixedになるってのも気になりますが、CFのファームウェアがそのように振る舞うということはホストを見ているということですよね。何を見るのでしょう。UDMAでアクセスされたかぐらいしか思いつきませんが、今ではデジカメでもUDMAあたりまえですから、最近の製品では通用しなくなっているのも道理ですね。

ところでWindows2000のレジストリに記述された"SunDisk"がとても気になっています。"SanDisk"のパッチもんとして大量に実在しているのでしょうか。そうではなくレジストリの記述から外す実験のために一時的に書き換えたものでしょうか?

 読みやすかったです  リウ  2019年3月11日(月) 22:54
ご紹介knowhow読みました。現状分かってる人に向けて私が書いてあったものがシステム部分をうまく避けて書かれており感服致しました。ありがとうございます。

>Sundisk
私のtypoではないです。Windows2000の標準レジストリには実際にこの名前で登録されています。
指摘されるまで気づきませんでした。Sandiskでつぶやいているのに…

予想されたUDMA接続で切り替え判別しているなら98内蔵だとどうせ使えませんね…
中古買い漁りもやってはみますがあまり期待しないでおきます。
どうやら産業用として売られている超!高級品だとfixeddisk扱いのものが多いようです。

Ltでも始めました。I/O 1e8eも効きません。面白いです。

 LtはもはやPC/AT互換機  まりも  2019年3月11日(月) 23:29
ホストがIdentifyコマンドを打つときはUDMAアクセスではなく普通にiostringでしょうから、違うような気がしてきました(汗

Ltですが、KAZZEZさんによるとgetitf98も使用できないくらい98アーキテクチャではないそうです。Undoc2を読む限りでもPCIバス機に相当近いようです。BIOSレベルと9821グラフィックレベルでなんとか98互換性保っているだけかもしれません。そのぐらいで98と呼べるのであれば、現存するPC/ATに「抜いちゃだめボード」を載せて98として動作するITF/BIOSだけ作れば、「98の新機種」ができそうです。その苦労は98エミュレータを1から製作するのと、とどっこいどっこいかもしれませんが。

 ノートだからといって動かないわけではありませんでした。  KAZZEZ  2019年3月12日(火) 4:59
お騒がせしました。色々試してみましたところ
結局、用いたCFがIDEに繋いだ時に素でHDDとして認識されるかどうかの違いでした。

用いたCFは
・pqiの2GB x100倍速 - HDDとして認識。
・トランセンドの4GB x133倍速 - 2k上では強制的にリムーバブルとして認識。
というものでした。

V13で使っていたHDDをNr15に移しても同じようにINACCESIBLEでしたので、
2GBの(HDD互換の)CFで動かなかったのはまりもさんのおっしゃるように環境の違いだったようです。
そして強制リムーバブルとなるCFでは通常の手続ではやはりINNACCESIBLEとなります。
HDDとして認識されるCFであれば、
フォーマットからやりなおしたら2kが普通にインストールできました。

で、肝心の2k上のスレーブ認識ですが、上記の4GBのCFをスレーブに使う限り、
IDE-SL.COMはあっても無くても2k上から認識できました。

どる仲避難所のスレ
ttp://jbbs.(したらば).net/bbs/read.cgi/computer/44621/1513863253/
(スパム防止のための避難所ですので、必ず(したらば)=shitarabaを手動で置き換えてください)
で、ノート機では2kで(4.3GB超も)スレーブ認識できるという話がありますが、
その通りであるようです(とりあえずIDE-SLなしで8GBのCFの存在は認識した様子…まだフォーマットはしていませんが)。
64GBともなると、フォーマット(パラメータ)の互換性は気になるところですが・・・。

 Nr15でのIDE-SL使用感  KAZZEZ  2019年3月12日(火) 5:00
ところでIDE-SLについて、Nr15で試してみて気付いた点はこのような感じです。
・Nr15ではスレーブが無くともI/O 430h=40hらしく、スレーブの無い時に不具合。
・Win98のFDISKではドライブ容量が常に4351MBを示す(2120の値は関係無い?)。
・FORMATXやHDB98がスレーブを見つけてくれない。
というわけで、フォーマットには向いていないようです。
あらかじめマスター接続でフォーマットしておく必要がありそうです。

4.3GB超えについては面倒が多そうなので試していませんが
実現できればWindows2000用途には便利だと思います。
PC-98であるからにはWin98やDOS用のパーティションも欲しいのですが
2kを実用するとそれだけで4.3GBのHDDがほぼ埋まってしまいますから…。

 BIOSが認識しなかった後の扱い  まりも  2019年3月12日(火) 16:24
>(後認識スレーブドライブを)FORMATXやHDB98がスレーブを見つけてくれない
IDE BIOSのコールで DA/UAが現れるようになっても、INT 1Bh (AH=84h) の中では「無いことになっている」状態かもしれませんね。これこそAX=0380h,INT 1Bh でイニシャライズをすると解決するかもしれませんが、せっかく設定したCHSパラメータが飛んで16:63に戻るというような別の問題が発生するかもしれません。

>ノート機では2kで(4.3GB超も)スレーブ認識できる
>64GBともなると、フォーマット(パラメータ)の互換性は気になる
BIOSでは認識しなくてWindowsのドライバの段階で認識したディスクドライブについては、Windows2000では63セクタ255ヘッド(いまどきのPC/ATの常識的な値)で扱っているようなフシがあります。Windows2000ではCHSの概念はどうでもいいわけですが、Windows2000のディスク管理からFAT32でフォーマットしたとき、FAT32のBPBにあるBIOSヘッド数セクタ数の箇所がそのように設定されていたので、Windows2000としては「そういうつもり」で扱っているようです。シリンダ数があふれない範囲としては502GiBまでとなりますかね。しかしそれでフォーマットしたメディアは、BIOSで認識できるインターフェイスではブート・認識が不可能になってしまうと思います。

 2kで試すときはフォーマットに注意かも。  KAZZEZ  2019年3月12日(火) 17:32
> せっかく設定したCHSパラメータが飛んで16:63に戻るというような別の問題が発生するかもしれません。
とりあえずAX=0380h,INT 1Bhだけを行うIPLwareを後に追加してみましたが、
少なくともCONFIG.SYSやAUTOEXEC.BATのテキスト内容が化け化けになりましたので、
おっしゃるようにフォーマットがおかしくなるようです。

スレーブが見付からない点については変わらなかったような気がします。
いちおうIDE-SLのソース見る限り0000:055Dは設定してあるようですので、
他にも設定する部分があるのかもしれませんね。

> Windows2000のディスク管理からFAT32でフォーマットしたとき、FAT32のBPBにあるBIOSヘッド数セクタ数の箇所がそのように設定されていたので
そのへんのCHS仕様は気になるところです。
以前から公開されておられるBIOSの無いSCSIから2kを起動する記事で、
IDEではうまくいかなかったというのも、SCSIとはCHSが異なる点が怪しそうですね。

> シリンダ数があふれない範囲としては502GiBまでとなりますかね。
そこまで行くとなりますと、むしろオンボードIDEのハード/ドライバ的に137GBの壁があるのかどうか気になるところです…。(汗

> しかしそれでフォーマットしたメディアは、BIOSで認識できるインターフェイスではブート・認識が不可能になってしまうと思います。
そういえば今回、いろいろ試していると何度かCFの記録内容が失われ、
未フォーマット状態になることがありました。
CONV98ATをかけるのを忘れたか、それともそれだけでは対応できなかったのか・・・?
いずれにせよWindows2000で認識させるとフォーマットが合わなくても勝手に書き込みをされるような印象です。

まあ内容はOSだけとか、あるいはDRVCPYした元のHDDが残っているので実害はほぼ無いのですが。
MKPTNTBL(ver失念)を走らせるとパーティションの痕跡は見つけてくれるのですが、
なぜか復旧したメッセージは出るのにパーティションは全く復活していないようでした。
# 終了メッセージ後にメモリアロケーションエラーでDOSに戻らないこともありましたので
# 単に終了したように見えて実は落ちていただけかもしれませんが。
もともとメモリカードを想定していない(予約セクタ数が想定外?)
というお話でしたので、仕方の無いところかと思います。

> LtはもはやPC/AT互換機
小型機だとAT互換機の汎用設計を流用せざるを得ないのでしょうかね。
モバイルギアやmobioもなぜか98互換がありませんでしたから・・・。

 4GB壁オーバーもテストしたいけど…  リウ  2019年3月15日(金) 12:06
>・Nr15ではスレーブが無くともI/O 430h=40hらしく、スレーブの無い時に不具合。
>・Win98のFDISKではドライブ容量が常に4351MBを示す(2120の値は関係無い?)。

報告ありがとうございます。
実はNa12以外の手持ちノートでもシリンダ数が設定されていないことに気づいております。
IO430hbit6に関してはどうやらWindows2000しか使っていませんが接続していなくてもbit6が立つみたいですね… これも実はすぐにそうじゃないかなあとか思っていたのでドキュメントで判定が甘いとか書いていました。
こちらも一方通行でつぶやいておりまして申し訳ありません。

>とりあえずAX=0380h,INT 1Bhだけを行うIPLwareを後に追加してみましたが
ideinfで確かめるとすぐに判明しますが16/63に戻されるのでIDE-BIOSにパッチが必要だと実感しています。もしくはWindows9x用に8/17に設定しなおすものを作ろうとコンパイラを集めてきたところです。
実は16/63を標準で使えるIDE-BIOSだとd800:2120以降のヘッダセクタ部分を丁寧に設定してやれば使えないかな…とも思っていますがどうでしょうね。シリンダ無視されているからやはり無理かもしれません。

>・pqiの2GB x100倍速 - HDDとして認識。
これは羨ましい!!

f8e8関連としては手持ちではXt13だけはどうやらここをIDE-BIOSが判断材料にしているっぽいです。
実機では立たないスレーブフラグを立ててやるとemulatorでは勝手にスレーブも見つけてくれるようになっていました。(BIOSを読んだわけではないです)

 その後  リウ  2019年3月19日(火) 12:09
Win9xのプロテクトモードドライバがダメだったので後追いしていました。
Na12/Hで成功したので報告します。

IPLwareで必要なもの
0000:055d 今までどおり
0000:0457 必要!
0000:05ba 多分必要
d800:2120 もちろん必要?
I/Oでスレーブの諸元変更
ここまでのものでデスクトップ機はInt1Bの0x380を送ってもスレーブの諸元を元に戻されなくなります。
そしてWin9xのプロテクトモードやNT(未検証)でもスレーブが使えるようになります。

ですが、ノートにはさらに追加で
F8E8:0002以降のノート機であるスイッチを消さなければなりません。
ここまでやると
Win9xのプロテクトモードドライバが使えるようになりました。
NT4.0でもスレーブが使えます。NT3.51は起動不可になりましたがもうそこは諦めるということで


Na12以外のシリンダ数を無視する機種で未だ試していませんので、検証はまだ必要なので夜に行いますが、とりあえず成功のご報告まで

以下追記
Na15でも成功しました。
ただし、やはりWin9xのfdisk /statusでは4351MBと報告されてしまいますのでフォーマットはやめておいた方がよさそうです。
DOS6のフォーマッタではなんとなく大丈夫のような気配もありますがまだ実行はしていません。
NT4のディスクアドミニストレータやそれにWarpのFDISKでも大丈夫のようでしたがこれを持っている人はそもそも少ないでしょうし…

ということで次は4G壁越えに挑戦いたします。

その前に一度まとめ直してIPLwareとして公開しなおすことにします。
https://drive.google.com/drive/folders/1BZ7b4an5o_EI9lKoyU6RzOlsZ4AADlFJ
PCIチップセット操作を自前で準備するのはやめました。
引き続きPCIPLを使わせてください。よろしくお願い致します。

 今のところ初代Xa/Xt/Xfは恐らく対象外ですよね。  KAZZEZ  2019年3月20日(水) 22:50
おお、9xやNT4でも成功されたのですか。これは楽しみです。

> 引き続きPCIPLを使わせてください。よろしくお願い致します。
はい、もちろんそれは構いません。
PCIチップセットのアクセス方法はUNDOCUMENTED 9801/9821 Vol.2のio_pci.txtにも書いてあり、
分かればそれほど難しいものではないとは思いますが、
それまで開発の負担軽減に役立つのであれば幸いです。

なお現状としてPCIPLはPCIコンフィギュレーションメカニズム#1しか想定していませんので、
Mercury/Neptuneチップセット(Xf/Cfおよび初代Xa/Xtあたりでしたか)には対応していません。
まりも様の見立てでは
> 初代Xa,Xf,Xtは一応PCIがありますが第2世代じゃないでしょうかね(推測)。
とのことですので、現状では関係無さそうではありますが、
もし将来これらの機種にも対応することになれば
> PCIチップセット操作を自前で準備する
か、もしくはPCIPLのほうを#2に対応させる必要がありますので、予めご了承ください。m(_ _)m

 壁越えできました  リウ  2019年3月21日(木) 18:56
もちろんサスペンドからの復帰などおそろしいことも残っていますがそれはちょっと置いておいて

まずEXIDECBのコードをemulator上で走らせNa12/HのIDE-BIOSにパッチをあててもらいました。
D800:000Bの値がノートでは3Ahになっているようでしたのでここだけは先に手でパッチをあてておきました。
出力されたIDE-BIOSを保存してオリジナルと比較し全て手作業で(ここをスマートに作れるようになりたいものです。)IDE-BIOSにパッチをあてるIPLwareを作成しました。

IDE-SLのコードの中で一台目のヘッドセクタ数を8,17としてきちんと設定するように変更しました。
スレーブに4GオーバーをつなぎIDE-SLの中でCHSパラメータを全部書き込みます。(16,63設定のEXIDECBを使ったのでその値に)
さきほど作ったパッチをIPLwareであてます。
int1b 0x380も送ります。

きちんと全量認識できスレーブからも起動できました。
Win95しかまだ見ていませんが他のOSでも多分大丈夫だと思われます。

手作業でできる方は同じことが出きると思います。
人様に渡すレベルのものはなかなか作れませんがまずはご報告まで

 EXIDE**との併用  まりも  2019年3月22日(金) 0:23
EXIDECBを適用すると、CHS計算ルーチンで使うC,H,S、H*Sを2100+20*n の空いているところに記録するように引っ越します。EXIDECBのソースにあるように
es=D800,bx=ドライブ番号で0,1,2,3→変換後 21x0(x=20,40,60,80)

es:[BX] シリンダ数 (EXIDECB適用前からある) word
es:[BX+0A] ヘッド数byte
es:[BX+07] セクタ数byte
es:[BX+08] セクタ×ヘッド数の積 word
に格納されます。いっぽうもとのBIOSルーチンだと8ヘッド17セクタの決め打ちで、容量帯やドライブ毎に別個に格納されないので、シリンダ数以外直しようがありません。

>出力されたIDE-BIOSを保存してオリジナルと比較し全て手作業でIDE-BIOSにパッチをあてる

それで作ったIDE BIOSのコードには、実は一点重大な問題があります。それは、ルーチンの一部(ソースEXTDCODE.INCにある部分)がD800:0〜1FFFに存在していないというものです。EXIDECBのソース先頭のほうの定義にあるようにメインメモリのセグメント(5000〜5C00あたりで試行錯誤したのでバージョンで違う)に置かれています。ROMアプリとして動的にパッチをあてることを想定していて、IDE BIOSとして完結したものを作れるようになっていません、というか空きがないため作れなかったのです。えらいトリッキーなことをやってしまっているわけです。したがってパッチ当て後のD800:0〜1FFFのイメージをROMに焼いた(エミュレータだと置いた)としても動作しないはずです。

D800からはみ出たルーチンは、初期化時に一回だけ(ドライブ台数のぶんは繰り返し)実行されるCHS決定ルーチンなので、ROMボードで実行する場合はそこを通過後消えてしまっても問題ありません。いっぽう後から認識させるスレーブの場合、BIOS内での初期化ルーチンを脱してブート後にこれに関係するところを通そうということになるわけですが、そのときメインメモリ上にはみでたコードが存在している保証がありません。

Na12は実機ではなくエミュレータで、EXIDECBの実行も行われてたあとにスレーブパッチを行っているということでしょうか。それならメインメモリに形成されているルーチンがあるので、うまく動きます。IPLwareの段階までそのルーチンはシステムに消されず残っているようです。
いっぽう改変済みBIOSを単にD800:0に置いただけ、だとすると動くはずはないということになります。どっちでしょうか?

 Na12/H実機での話になります  リウ  2019年3月22日(金) 2:35
IDE-BIOSを検索してパッチをあてる力がまだ私にはないのでD800:000Bをいじった上でemulatorの中でEXIDECBのパッチをあててもらいました。そこだけがemulatorの話になります。

>パッチ当て後のD800:0〜1FFFのイメージをROMに焼いた(エミュレータだと置いた)としても動作しないはずです。

はい、その通りでした。実機でも同様でした。パッチをフロッピーからあてることで確認するとHDDにアクセスすると0除算エラーが出ました。

>D800からはみ出たルーチンは、初期化時に一回だけ(ドライブ台数のぶんは繰り返し)実行されるCHS決定ルーチン

ここが実機では実行されないのでIPLwareでパッチをあてる前に準備を行いました。
1台目のものはシリンダ数は入っていますが残りを8,17に決め打ちし、スレーブのものはC,16,63に対応する値を必要な場所に入れておきました。
>es:[BX+07] セクタ数byte
>es:[BX+0A] ヘッド数byte
>es:[BX+08] セクタ×ヘッド数の積 word
ここです。
その状態でスレーブ強制認識に必要なことを行い(HSは16,63なので触っていません。)
さらにemulatorで生成されたものと同じになるようにIDE-BIOSにパッチをあてました。

今のところ動いています。動くはずがないと言われて焦っています。
ぜひ検証したいので何が必要でしょうか

 はみ出しルーチンを呼ばない  まりも  2019年3月22日(金) 8:31
>残りを8,17に決め打ちし、スレーブのものはC,16,63に対応する値を必要な場所に入れておきました。
それをやっておけば、メインメモリにはみ出たルーチンは実行したのと等価ですから大丈夫ですが、

>動くはずがない
というのは、call far でメインメモリ上のルーチンを呼び出しているところがそのままだと、行って帰って来られずハングアップするだろうということです。call 5C00:???? のような即値絶対番地コールしているところがありますので、ここで自分で好きなところに上記ルーチンを作って置いてretfで戻るようにすれば大丈夫です。NOPで潰してもよいですが一台目のHDDが困ることになるような?

 一台目は壁を越えていません  リウ  2019年3月22日(金) 10:54
元々のコードが右で、EXIDECBによってパッチされる部分
左がパッチされた後

ご指摘されたのはこの部分だと思います

パッチされる前に
普通の起動ルーチンで4.3GB以下の1台目の諸元は右のコードで初期化され、パッチされた後にはここを呼び出すことがなかったので動いている気配がするということでしょうか。
ご指摘どおり、もう一度呼び出されることがあれば行き先で迷って帰れなくなるということになります。

>初期化時に一回だけ(ドライブ台数のぶんは繰り返し)実行されるCHS決定ルーチン
こうであるならば呼ばれることもなく安心できるのですが


追加
オリジナルIDE-BIOSが一台目だけを処理(4351MB以上ならばフリーズ)

IPLwareでワークエリアをごまかす(初期化作業を肩代わり)

IDE-BIOSにパッチをあてる(far callが含まれているが呼ばれない)

IDE-BIOSが2台目の初期化作業をできなかったのに
2台目がいると勘違いしたままOSの処理に移っていく

という流れだと頭のなかで想像しました。

さらに追記
ご確認ありがとうございます。
使いやすいUIをそなえた壁越えスレーブを有効にするものの公開に向けて努力します。

 int 1B,ax=0380 の必要性が今ひとつわからず  まりも  2019年3月22日(金) 17:34
なるほど、1台目のCHS決定のときは元のBIOSで、スレーブのときは書き換えたBIOSとなっており、しかも1台目のパラメータも新しい格納場所にセットされているので、問題ないということですね。IPLwareで書き換えるのは考えてもいませんでしたが確かにそうですよね。

しかしIPLwareで書き換えてから int 1B,ax=0380 を呼んでも大丈夫なのかという疑問はあります。このルーチンを通過するのだとすると1台目のぶんでも呼び出されてしまいます。そこがどうなっているのか調べてみたいと思います。
追記:呼ばれることはないようです。

 EXIDECBのソース  まりも  2019年3月26日(火) 10:23
一般的ではない難解な部分があるので、もっと詳しいソース解説が必要かという気がしてきました(汗
まずEXIDEpci.sでは普通のcomプログラムとしてもパッチ動作可能なように作っているので、先頭のorg 100hは変更すると別途ローダが必要になってしまいます。前提としている開始時セグメントはcs=ds=esですがこれはDOSやIPLware がやるので自前ではやっていません。ROMのときは100hローダが付加されて、それがやってくれます。
実行中に必要な変数は表示文字列とモード値を除き、グローバルなスタック変数としています。定義が先頭の方にあります。この方がdsやesを頻繁に変更した時の混乱がないからです。ちなみに純粋なROMコードの実行では変数はスタック上にしか置けませんので、なるべくそれに近いようにという意味もあります。

はみ出しルーチンextdcode.incの部分はorg 2000hで始まる変則的なものとなっています。普通にアセンブル、リンクをするとメイン部とそれが2000hバイト離れて格納されたcomファイルができますが、ROMルーチンとするためにバイナリエディタで間の00空白を取り除いています。EEEEhというデータがあるのはメインの終わりを識別するためのマーカーです。
モードの変数はこの分離している両方のルーチンから参照されますが、メインルーチンからのアクセスでは途中の空白を除いたアドレスとなるよう変換しています。というようにかなりトリッキーなことをやっているので、ソースファイルの構造を崩して利用する際は気をつけないといけない点がいろいろあります。

IPLware 前提ならまずextdcodeの容量対パラメータの関係は一つ決め打ちとします。org 2000hも取り去ります。メインルーチンのモード変数もモードごとのテーブルも不要となります。そしてD800セグメントの空きに収まるよう全力で簡素化します。その方がすっきりしますし実行プログラムを分割やマージする必要もなくなります。もちろんextdcodeを呼ぶところは普通のfar 絶対番地コールD800:XXXXに直します。

 今のところここまで  リウ  2019年3月29日(金) 1:57
研究発表として現状のものを公開しました。
(修正)
ヤバイものが見つかったので削除しました。削除したはずですがリンクを踏むとアクセスできてしまっていましたのでリンクを削除しました。

EXIDE**のパッチをそのまま流用しています。
提供ありがとうございます。
DSがぐちゃぐちゃになったことは結局解決できていません。もっと勉強します。

追記
今度こそおそらく完成しました。なぜか不安定なCFが微妙に安定するようにもなりました。壁なしノートでの動作に全く自身がありません。適当にでっちあげておきました。
https://drive.google.com/file/d/1JxTIPPSqzM0gn-4IRQAP_looCbMyzjoF/view

自前でHS変更コマンドを送っても無視されたりマスタ側がCFリセットされたりしたのですが
結局最後にInt1B 0x380に諸元を取り直してもらうことが一番安定するようでした。

続けていたLtのIDEワークエリアへのアクセス方法だけは判明しました。
I/O900hのレジスタに20fh 906hのe133hをe333hへ変更
I/O900hのレジスタに210h 906hの値を0050hに設定
これでセグメントDA00にIDEワークエリアが現れ、書き込み可能になります。
ただしD800セグメントの書き換えもまだダメですし、どうやら2台目のシリンダ数は1台目と共用されているっぽいです。
I/Owordアクセスにddebというデバッガだと反映されません。exdebだとうまく行きました。

 超亀ですが  MILLENNIUM  2019年9月7日(土) 23:01
いつも迷惑かけております、ミレです。ゴミレスですが以下を。
隠しスレーブの件はLs12での確認で、CF2枚-ATAボードを使用した実験です。
DOSからは一切認識されていないこと、Windows2000上ではフォーマットなどを行っていないこと、少なくとも数ギガバイト範囲において読み書きが常用でき(仮想メモリに割り当てなど)、今のところ全く実用上の問題が起こっていないようです。
フォーマットはASAHIの*istDでやったものなのですが、すんなり使えてしまいました。

#そのLs12はホワイトスポットが広がってしまい今は使える状況になくなってしまいました。

 続REDWOOD  リウ  2019年11月8日(金) 10:39
5chのあるページでshadowramの解析結果が書き込まれました。
その通りに行うとF0の書込みができました。これらの機種でのWin9xでのプライマリスレーブの使用見込みが立ちました。
転載します。
** Shadow RAM Write Enable Control Register (SRAMWRENCR) - Index 0x201
**
** Loc Size Name Function
** ----- ---- ---- ---------------------------------
** <0> 1 LMEMWREN0 Local Memory C0000H-C3FFFH Write Enable
** <1> 1 LMEMWREN1 Local Memory C4000H-C7FFFH Write Enable
** <2> 1 LMEMWREN2 Local Memory C8000H-CBFFFH Write Enable
** <3> 1 LMEMWREN3 Local Memory CC000H-CFFFFH Write Enable
** <4> 1 LMEMWREN4 Local Memory D0000H-D3FFFH Write Enable
** <5> 1 LMEMWREN5 Local Memory D4000H-D7FFFH Write Enable
** <6> 1 LMEMWREN6 Local Memory D8000H-DBFFFH Write Enable
** <7> 1 LMEMWREN7 Local Memory DC000H-DFFFFH Write Enable
** <8> 1 LMEMWREN8 Local Memory E0000H-E3FFFH Write Enable
** <9> 1 LMEMWREN9 Local Memory E4000H-E7FFFH Write Enable
** <10> 1 LMEMWREN10 Local Memory E8000H-EBFFFH Write Enable
** <11> 1 LMEMWREN11 Local Memory EC000H-EFFFFH Write Enable
** <12> 1 LMEMWREN12 Local Memory F0000H-FFFFFH Write Enable

とりあえずシステム領域への書込みは行えました。
D800からは16kbまるごとなのでRAMにした後にDA00からの8kbのBANK-RAM部分が正常に動くかはまだ心配です。

またWinNT3.5でのDA/UAについての調査もされていました。
どうやらセカンダリマスタに何かがいると
プライマリスレーブが81hにはならない、という結果のようです。
後でCDドライブを外して調べてみようと思います。

追記
調べました。セカンダリマスタ側のCDドライブを外してやるとプライマリスレーブにアクセスできました。
ということでノート機ではBIOSで使えないセカンダリスレーブにCDドライブを押し付けるべきと考えます。