物置放置のロンサムマザーボード まりも 2024年10月1日(火) 12:01 |
修正 |
20年以上も屋外物置などに保管していたマザーボード(G8YEW)を調べていたところ、赤字ROM SUM ERRORが出て起動しないやつが見つかりました。ここで拙作FDloaderアプリのROMSUM V2 の出番です。異常サム値の表示だけでなく、MMDUMP横取り機能で全ROMデータの回収ができます。昔にデータの吸い出しはしてあったのでそれと比較すると、誤り箇所は1ビットずつ2箇所にありました。
BANK5のサムが偶数アドレス側FF、奇数アドレスFDということからも推察できます。少なくともどこかの1ビットずつが1-->0に化けたとわかります。この程度ならROMに高めの電源電圧をかければ正常に読めた可能性もあります。
それも面倒なので、FD loaderアプリのROMREFRSをカスタマイズして、該当箇所のデータを修正しつつリフレッシュしたところ、正常に起動できるようになりました。実行コード部が化けていたので、そのまま適用してサムだけを誤魔化してもダメな案件でした。なおこの機会にROMREFRSほかFDloader関連アプリを更新しています。通常起動時のブートローダー部の変更が主で、入れっぱなし対策です。というかむしろ入れっぱなしにすると便利な機能です。 ttps://www7b.biglobe.ne.jp/~marimo9821/fdldrapp/romrefresh.html
|
CX486IPLを用いた286用アクセラレータの性能比較 KAZZEZ 2024年10月3日(木) 20:38 |
修正 |
研究発表会向けの内容かもしれませんが… 先月にも軽く触れましたようにPC-9801EXが復活しましたので、今更ですがイネーブラ条件をCX486IPLに統一して、いくつかの286用CPUアクセラレータを比較してみました。当時はVM21+VX21のCPUボードというイレギュラーな環境だったせいかアイオーのPK-X486SLとX486S50-L以外は不安定な様子でしたが、EXでは(常用したわけではありませんが)多くのアクセラレータが普通に動作する感じです。
CPUキャッシュ有効時のベンチマーク比較は1番目の図に示した通りです(比較のためのIBM486SLC2にはリウさんのslc2.comを使用)。なお一般的にCx486SLC/DLCを用いた(初期の)CPUアクセラレータの多くはPC本体を12MHzモードにすると(特にRXでは)不安定だったり動作しないのが普通かと思いますので、12MHzモードでの値(灰色のセル)は参考です。
同じCPU・倍率でも製品が違えばベンチマーク性能にばらつきが目立ちます。製品によって安定動作のためのウェイトが異なっている可能性がありそうです。実際、ウェイトの少ないと思われるパフォーマンスの良い製品はVX相当の環境では不安定な傾向でした。ウェイトの程度は、CPUキャッシュを組み込まない状態で元の286よりどれだけ遅くなるかを見れば参考になると考え、その比較が2番目の図です。
…しかしなぜか、一部の製品はCPUキャッシュ無効でも元の286より速いのですね(汗)。恐らくは測定プログラムにレジスタ内演算があってCPUキャッシュ無しでもアクセラレータボード上の倍速機構が多少なりとも機能したのではないかと思います。実際、倍率可変のPK-X486S50-Lではキャッシュ無効時でも(図表にはありませんが)2倍速と4倍速でベンチマークに多少の差がありました。 それとCPUBENCHはキャッシュの影響を受けやすいとは聞きましたが、キャッシュOFFでもCPUBENCHとCPUCHKで傾向が異なるようです。CPUCHKのほうがクロックの影響が大きいようですので、そういう処理内容になっているんでしょうか。
以下、気付いたこと。 ・ABM 386SXGTは【12MHz時よりも10MHz時のほうが高速】で【12MHzにするとFPUを認識しない】。CPU自体は16MHz版だが、仕様通り10MHzで使用しなくてはならないらしい。 ・ABM 486GT-RとメルコHRX-12Wは、同じCPU・倍率の製品の中では比較的パフォーマンスが良く【キャッシュ無効でも元の286よりは速い】。 ・そのHRX-12WはFPUに32bit版(i387DX互換)を使うのに、なぜかFPU性能が低い。 ・I-O DATA PK-X486/87SLシリーズは【Cx486SLC版とCx486DLC版でパフォーマンスが全く同一】。またDIP-SWをPC-9801DX用の設定にすると10MHz時のパフォーマンスは変わらないが12MHz時に少々遅くなる。ただしFPU速度に関してはCPUキャッシュを組み込めば本来のパフォーマンスになる。 ・メルコHSPシリーズ(独立クロック)は非同期になるせいかクロックの割にCPUBENCHのパフォーマンスは平凡。とはいえ10MHzに落とした2倍速のものよりは速いので、恐らくは12MHzモードだと不安定になることで知られるCx486系アクセラレータを12MHzモードで動作させることを目的に開発された製品ではないかと予想。 ・FPU性能はPK-X487SLが高く、クロック性能はHSP-4SD33が、ウェイトの少なさ(?)はHRX-12Wがそれぞれ突出しており、製品によって得意分野がはっきり異なる。 ・しかし、いずれにしてもIBM486SLC2/50MHz搭載(12MHzやVX怪でも安定動作)のPK-X486S50には遠く及ばず、ドングリの背比べ。
|
|
286でも使えていましたか。 まりも 2024年10月4日(金) 0:25 |
修正 |
キャッシュ有効のデータにあるCX486IPLとはわたしが最近作ったやつですよね?286用のアクセラレータでもちゃんと動作しているのですね。DISK BIOS監視で「HOLDステートでフラッシュしない」つまり速度が出せる設定だとは思いますが、設定の可否はDIPスイッチの空き、2-7を使っています。9801EXだと無駄に全てのスイッチがメカニカルで残っているので使えるものの、9801DXだと廃止されてしまっているのが困ったところです。IPLwareアプリにはコマンドラインスイッチのような実行オプションが付けられませんので苦慮しています。アプリケーションの内部に書き込んで保持する手はあるわけですが、IPLwareでは良くてもOSFDIPLwareではそうもいかないからです。
|
メモリSWとか かかっくん 2024年10月4日(金) 2:37 |
修正 |
余り遣われなさそーで何方の設定デモ動作に支障無いメモリSWを遣うとか如何でせう? ハードコピYをモノクロで撮るかカラーにするかとか あとわMONとか。両方共BASICで有効デス。他にプリンタ(16/24)とか DIP SW2-5 OFF(上)で初期化した際に安定側に成るやうにすると良さそーな? RS-232CもメモリSWの設定値で遣う事わ殆ど有馬せんから遣えそーな?
メモリSWなら遣われなく成った機種デモ遺されて居そーな?
|
システム予約部を開放するという手 まりも 2024年10月4日(金) 9:18 |
修正 |
メモリスイッチの美味しい(確実に未使用な)ところはEXIDE**ですでに使っているのと、容易に初期化されてしまうことから、違う場所にしたいところです。せいぜい2~3ビットの情報の格納であれば、IPLwareのローダー内に置くのがいいかもしれませんね。8個あるディレクトリの中の制御情報バイトは、今のところbit7-4しか機能割当てをしたことがありません。bit3-0をアプリケーションに開放してしまう手があります。
と思ったのですが、アプリケーションから見てIPLwareで呼ばれているのか、FDIPLware,OSFDIPLwareで呼ばれているのかわからないという問題があるのですよね。これを仕様化しておかなかったのはミスだったか、、、【17時追記訂正】アプリ側では初期のALレジスタにDA/UAが入っているので、どのIPLから呼ばれたかはこれで判断できます。大丈夫ですね。初期のAHには制御バイトが入っているので、ここのbit3-0をユーザが(アプリが)自由に使ってよいことにしようと思います。IPLware類の次の更新のときにドキュメントに明記します。これで、高々4bitまでの情報なら、アプリケーションの記憶域に書き込むという面倒な方法をとらなくても済むようになります。しかしIPLwareのディレクトリに直に書き込むという(かなりの)手間や、アプリ側バグによる危険性については変わりません。
結局メモリスイッチの空きを使う方が遥かに手軽で安全です。バックアップバッテリに左右されて不確実なだけです。全ビットが0ならメモリスイッチは初期化されているという判定を入れれば、記憶データの信頼性を確保できるのではないかと思います。ちなみに2ビットを使って、00bなら初期化のため無効、01b、10b、11bの3値の記憶域に使うということは既にEXIDE**でやっていたりします。ソフトウェアDIPスイッチだと11bが初期化無効値になるので、メモリスイッチと兼用すると、実質的には1bitの記憶場所として2bitを使う勘定となります。
|
HDDを切り離しても速度が出る KAZZEZ 2024年10月4日(金) 16:19 |
修正 |
> つまり速度が出せる設定だとは思いますが、設定の可否はDIPスイッチの空き、2-7を使っています 2-7はOFFのまま計測しましたが、2-6をONつまり内蔵SASI-HDD(EX2にサードパーティ製HDDを装着済です)を切り離す設定にしてFD起動で測定していました。内蔵HDDを有効にすると、おっしゃる通り遅くなりました。この場合は2-7をONにすれば従来の速度が出ます。内蔵HDDを切り離していると、2-7に関係なく速度が出るようです。 ところで、内蔵SASI-HDD(SASI-BIOS)があっても「Built-in 周辺装置の拡張BIOSはひとつもありませんでした.」と出るのは仕様でしょうか?
それとちょっと思ったのですが、DISK-BIOS INT 1BをフックしてHOLDステートでフラッシュするのでしたら、ついでにキャッシュの有効化もしてCPUリセット対策にはできないのでしょうか? Cx486SLC/DLCとは事情が違うかもしれませんが、アイオーのIBM486SLC2イネーブラPK-486SQ.COMの場合ですと、初回常駐時に/G(DISK BIOSコール時にキャッシュを再設定する)オプションを設定したときは、CPUリセット後もCPUキャッシュは有効でした。Cx486SLC/DLC用のPK-486S.COMは時代が古いせいか、このオプションはありませんでした。386機用のPK-486D.COMは既出の通り、BIOS RAMを書き換えることで対応していたようですが。
|
不純な何か まりも 2024年10月4日(金) 22:26 |
修正 |
>Built-in 周辺装置の拡張BIOSはひとつもありません NEC純正のDA/RA-34、35、37が接続されている場合には、Built-in周辺装置があるという判断になると思います。I/O F0hのbit6-5を見ているだけです。うちにはこれらがないためテストできていません。サードパーティ製HDDユニットだと出ない可能性はあります。ここは本体内蔵のSASI BIOSを出すかどうかの判断に使われる所です。Built-inの純正品は無いことにしたいために存在ピンをマスクしている可能性があります。そうしないとユニットにあるBIOSを使えないからです。ピン配置はシェル氏が調べていたような、、、【22時45分追記】見つけました。 ttp://projectmps.net/pmdoce98tech.htm これは本体Cバス側から調べたものと思いますが、NC扱いのどれかは、存在確定ピンだと思います。ユニット側でグラウンドに落ちていないでしょうかね。
それからDIP SW2-6によって速度が変わるのは解せません。なにが作用しているのでしょうねぇ。やはり80286機だとBIOSフックのペナルティが大きいのでしょうか。
>をフックしてHOLDステートでフラッシュするのでしたら、ついでにキャッシュの有効化も いや、フックしてやっていることというのは、DISK BIOSのルーチンに入ったら、一旦キャッシュを無効にし、ディスクが動作し、BIOSを抜けるときに有効にしているのであって、有効化はちゃんと行なっています。抗リセットはITFのリセットルーチンに介入しないといけない問題で、DISK BIOSフックと無関係です。80286機というかシャドウRAMがない機種では無理なのです。ROMを書き換えることでしか対処できません。FFFF:0000(F000:FFFFh)番地にそう書かれていないとダメなのです。 9801DX用のcyrix 486アクセラレータが手に入ったらこれを試そうと思っているのですが、なにぶんお値段が高くてデスねぇ。
|
SASIスロットは8bitバス かかっくん 2024年10月5日(土) 9:12 |
修正 |
> ところで、内蔵SASI-HDD(SASI-BIOS)があっても「Built-in 周辺装置の拡張BIOSはひとつもありませんでした.」と出るのは仕様でしょうか?
此のSASI籠わ2エッジ(SASI/SCSI)dsk?
> サードパーティ製HDDユニットだと出ない可能性はあります。ここは本体内蔵のSASI BIOSを出すかどうかの判断に使われる所です。Built-inの純正品は無いことにしたいために存在ピンをマスクしている可能性があります。そうしないとユニットにあるBIOSを使えないからです。ピン配置はシェル氏が調べていたような、、、【22時45分追記】見つけました。
SASIスロットわ下位8bit・アドレスも下位だけでメモリR/W線もバスサイジングも有馬せんから SASIスロットだけでBIOSを載せるのわフカ能デス(SCSIスロットに上位8bit・アドレス上位・ メモリR/W線他) 詰まりSASI籠有りとして本体のSASI BIOS(みいそチェック有り)を遣うか、別途CバスにBIOSを 載せるかに成増
ところで↑に依るとSCSIスロットにAB191が2本有馬すが、スイッチバーONのとOFFのが別々に 出て居るのでわ?
因みにえぷのHDDスロットわSASI専用も16bit有り、BIOSも籠の基板に載せる事に成って居枡
|
HOLDステートでフラッシュしても速度は低下しない? KAZZEZ 2024年10月5日(土) 16:53 |
修正 |
> I/O F0hのbit6-5を見ている なるほどそうでしたか。Undoc2のio_cpu.txtを確認したところ、対象機種がRA21以降の機種ばかりになっていて、RA前期やRX、VX、UXが含まれていませんでした。実際、RX51ではHDD有効であってもF9を返してきました。EXは対象に含まれているようなのですが、今回のサードパーティ製HDDではF9を返してきました。
> ttp://projectmps.net/pmdoce98tech.htm > 此のSASI籠わ2エッジ(SASI/SCSI)dsk? ES/EXのSASIコネクタはRx/Dxのものと違ってカードエッジではなくピンタイプで、SCSIケーブルと同じ50ピンフラットケーブル(1本)で接続します。なのでRx/Dxのカードエッジのどのピンに対応するか確証はありません。ただ、SASI側のカードエッジとピン番号が同じだと仮定すれば、GND/Vccの導通には類似性がそれなりにあるようです。その仮定の場合、4個所あるNCのうち、HDDユニット側で47ピンがGNDに繋がっていました。 この47ピンはHDDユニット内のSASI-I/F基板上の一部のDIP-SWに繋がっているようでしたが、これをOFFにするとHDDを認識せず、SASI BIOSも出現しません(通常であれば、DIP-SW 2-6に関係なくHDDユニットを装着しているときはSASI-BIOSが出現するようです)。そしてI/O F0はF9を返すことも同じでした。状況的にはむしろこのピンがGNDに落ちていることによってSASI-BIOSが出現しているようなのですが、ES/EX用の純正HDDは持っていませんので、EXは本当にI/O F0で内蔵HDDの有無を判断できる機種なのか、よく分かりません。
> DIP SW2-6によって速度が変わるのは解せません すみません。これは今日になって再現できませんでした。HDDを認識しないときは速度が低下しないのかと思ったのですが、昨日はなぜHDD認識時だけ速度低下が起きたのでしょうね?? 今日はそもそも、HDD認識の有無に関係なく、DIP-SW 2-7のON/OFFでCPUBENCH/CPUCHKの値がほとんど変わりません。もちろんCX486IPLはDIP-SW 2-7のON/OFFをちゃんと認識して1Bのベクタの書き換え有無を行っているようなのですが。
|
PC-586RVもPCI機 リウ 2024年10月5日(土) 21:40 |
修正 |
ご厚意に甘えて当該機種を提供してもらえましたので解析しています。 PCI機でした。 8086:04A3のVendorIDを持つPCIチップセットの上でRAMは動いています。 admin.pci-ids.ucw.cz/read/PC/8086/04a3 PCIメカニズム#2でPAMはIntel430LXと同じ設定がしっかりできてしまいました。 IDEBIOSはD8を使っていることになっていますが実体はF57Aに存在し、D800の4kbはほぼワークエリアでした。 簡単ではありますがまずはご報告
この機種のIDEBIOSはそれほど手間がかからずにパッチはあてられそうです。 また壁こえSCSIは9821判別をしてから430LX判別をしているためまだ非対応機種になりますが、そこをすり抜けてメカニズム#2でアクセスすればあっさり対応できそうです。
日曜23:32写真投稿 壁ごえSCSIはあっさり動作しました。
7日15:30追記 >EPSON機のPCIレジスタ 486HもIDEが搭載可能という諸元表を見ました。 IDEを使うにはidentifyに数百バイトなどのワークメモリが必要ですからInt1Bをトレースすると最初に必ずRAM化IOを叩いていると思われます。 調べるのに手間はかかりますが必ず叩いていると思います。
|
|
EPSON機のPCIレジスタ KAZZEZ 2024年10月6日(日) 9:50 |
修正 |
EPSON機でPCIレジスタにアクセスできたのですか。まずはおめでとうございます。INTELSAT等の普通のPCIツールでも普通にアクセスできたと言うことでしょうか? 逆に、どうにも分からないのがHシリーズのPCIなんですよね。 以前報告したのですが、EPSON機では基本的にI/Oアドレス100h以降はほとんど00〜FFhの繰り返しが多いようですので、当然C000h以降もそうなっていて、PCIコンフィギュレーションメカニズム#2でまともにアクセスできないみたいなのです。無理矢理PCIレジスタと見なしたところでベンダIDが0000ということになってしまいますから、やはり意味のあるデータは読み出せていないようです。PCI1.0(以前?)ですから、当然PCIコンフィギュレーションメカニズム#1でもアクセスできません。
PCIバージョンについて検索してみると、どうもPCI1.0と呼ばれるものはMercury等のPCIコンフィギュレーションメカニズム#2でしかアクセスできない時代のものを指すようですので、PC-586RVもPCI1.0ということになるんじゃないかと思います。 そうなるとPC-486HG/HX/HAのPCIバージョンっていくつなんでしょう? 仮に1.0だとすれば#2でアクセスできるはずですから、何らかの処理でI/O C000〜に投影されるのではないかと思うのですが、その方法についてはまったく見当が付きません。
|
やっぱり山猫マザーは・・・PCIバス使えない まりも 2024年10月6日(日) 15:45 |
修正 |
>SASIスロットわ下位8bit・アドレス わゎそれを忘れてました。そういえばサードパーティ製のSASIユニットでSCSIのそれと同じく2スロット使う製品はなかったでしたっけね。それ以外はCバスにSASI BIOSのROMボードを載せない限り、独自のBIOSで動作させることができないはずです。N.C扱いの47番が怪しいですか。HDDは動きませんがRA-35のガワはあるのでわたしも調べてみます。
>PC-586RV これはおめでとうございます。オークションを監視していてもピポる物かもわからないし、EPSON機はお値段も凄いのです。【ここだけ追記】available 2port とIDEDEVで表示される件、I/O 430h のbit6の返り値を見ています。初代B-FELLOWや初代A-mateと同じFFh返せばプライマリしかないとしていますが、RV586ではここがFFなのにIDEセカンダリポートがあるのですか。 ー さて別スレの山猫・V二桁機のP55C問題が気になったのでいろいろ調べてみました。G8WVDマザーボードでROMのシールがXJN06というのを比較的最近入手しております。初代山猫よりはだいぶ後で96年7月製、BIOS開発日も5月です。EDOには対応のようです。ズバりG8XJNというマザーボードもあようですから、ITF/BIOSに完全な互換性があると思います。
このマザーボードにはP55CSUP.SYSが適用できることがわかりました(画像1、パッチ箇所がわかるようにFDloader版で)。つまり何もしなくてMMX-P55Cが動作するということは無いというわけで、山猫の元祖Xa7となんら変わりません。
そしてテストはSil3114のSATAボードにSATAのHDDを繋いで行っていたのですが、ときどきハングアップします。パリティチェックが無効になっているようなので有効にしてやると、PCI-HOSTにエラー点灯のあげく赤字PARITY ERRORで止まってしまいました(画像2)。これもXa7からなにも変わっていません。山猫機はどこまで行ってもゴミということに異論を挟む余地はありません。この点ではじゃじゃ馬9821Stよりダメじゃないですか。
さて次はG8VLJ(430FX機)ですか・・・
|
Cx486SLC/DLCでBバンク以下を起点に256KB以上のNCRを設定すると速度が低下する? KAZZEZ 2024年10月6日(日) 16:59 |
修正 |
286用アクセラレータの続きです。一部の製品はメモリアクセスのウェイトが少ないのではないかという感触が得られましたので、PFM486でも測定してみました。例によって同じシリーズのアクセラレータはほとんど同じ値しか返さないようでしたので、セルをまとめてあります。 ABM 386SXGTは10MHzだとウェイトがかなり少ないのですね。どおりで12MHzよりも高速なわけです。上記でやたら高速だったメルコHRX-12Wも予想通りウェイトが少ないですが、それよりも更にメモリウェイトが少なかったようです。PFM486が286非対応(なぜか名前に反して386は対応)でしたので、元の286と比べられないのが残念です。 # 書き忘れましたが「元の286」と言っても厳密にはVX21由来のものなので、12MHzではオーバークロック動作でした。(ぉぃ # PGA版をQFP変換アダプタを介して差せば、引き抜き工具なしで脱着できて便利なんですよ…。
また、CPUキャッシュの有効無効でREADはほとんど変わりませんでしたが、イネーブラの条件によってはWRITEは速くなることがあるようでした(といっても図表に示した程度ですが)。Cx486SLC/DLCって、ライトバックキャッシュでしたっけ。
その条件なのですが、いろいろ試したところ、どうもB0000バンク(BF000)以下を起点に、256KB以上の連続したNCR(非キャッシュ)領域を取ると、キャッシュ有効時にPFM486のWRITEが高速化しない(キャッシュOFF時とほとんど変わらない)ようなのです。A0000から128KB+C0000から128KBというように分けて設定すれば、なぜか高速化します。C0000から256KBまとめて確保しても高速化します。ただしC0000以上(100000未満)からであっても512KB以上に設定すると高速化しないようです。1MB以上の領域からであれば512KB以上のNCR領域を取っても大丈夫でした。
CX486IPLの場合はA0000からNCR領域を256KBまとめて取っていますので、キャッシュを有効化してもWRITEの値は高速化しませんでした。図表のキャッシュON時のデータはアイオーのPK-486Sを(IOバンクキャッシュ有効設定で)使って測定したものです。 PK486Sでもデフォルト設定では80000から256KB確保しているので高速化しませんでしたが、IOバンク領域のキャッシュを有効に設定(/I)した時には器用にもA0000/C0000/E0000それぞれ128KBずつ取っていますので、PFM486のWRITEが高速化します。メルコのMELCSET.EXEもデフォルト設定ではA0000から128KB+C0000から256KBと、器用に閾値を避けてNCRを確保していますので、PFM486が高速化します。
Cx486SLC/DLCのことはよく知りませんが、1MB未満のアドレスに大きなNCRを設定すると遅くなるという仕様でもあるのでしょうか??
|
|
割り付けサイズとベースは連動 まりも 2024年10月6日(日) 17:22 |
修正 |
ベンチマークがいい成績になる具体的設定がよくわからないのですが、 >B0000バンク(BF000)以下を起点に、256KB NCRを例えばA0000h起点に256KB取るということはできないのです。256KB刻みであれば40000h、80000h、C0000h起点しか取りようがありません。同様に128KB取るなら、80000h以上であればA0000h、C0000h、E0000hのみ可能です。境界をまたぎたい場合は分けてNCRを2個消費するしかありません。というわけで、隙間がないのに分割/非分割でベンチマーク結果が異なるということはありえないはずです。
80000h以上が非キャッシュ域だとCOMMAND.COMトランジェント部が遅くなることから、体感的にも遅くなります。ベンチマークはどこを計っているかわかりませんが、普通はDOSシステムが割り当てた不定の箇所なのではないでしょうか。
ちなみにCX486IPLでは、IPLwareの段階ではシステムが80000hのメモリウィンドウを操作する可能性から80000h以上を非キャッシュにし、DOSコマンド段階では(バンクメモリなど使うことはないとして)A0000h以上にします。F0000h以上は極力キャッシュ可としていますが、RLでは快適でも80286機ではFDのDISK BIOS動作に支障をきたしやすいはずです。元マシンが80286機と判定された場合は全部非キャッシュにするのがよいと思っていますが、実験しようにもアクセラレータがお高くて、、、(何度目)。つい一昨日にMarchのうさぎ系のとこから出てましたが9000円超えの大人気商品。
|
なるほどです。 KAZZEZ 2024年10月6日(日) 19:22 |
修正 |
> ベンチマークがいい成績になる具体的設定がよくわからないのですが、 割り付けサイズとベースが連動するというのは存じませんでした。だとすれば実際に有効なアドレスなのかどうかは存じないのですが、アイオーのイネーブラもメルコのイネーブラも、NCRのベースは1000h単位で、000BF000とかに設定できてしまうのです。なので、あくまで設定した数値だけを見た話になるのですが、 ・ベースが000C0000未満の場合、サイズが128KB以下だと多少高速。 ・ベースが000C0000以上00100000未満の場合、サイズが256KB以下だと多少高速。 という感じだったのです。 アイオーPK486S.COMのデフォルト設定でNCR1は00080000・256KBですから前者に抵触し、これが「/I」指定時には000A0000・128KBになりますから抵触しなくなります。 CX486IPL.COM(1.10)はIPL時・DOS時ともNCR2が000A0000・256KBになっていましたから、前者に抵触するようです。 要するに000A0000・256KBと設定すれば00080000・256KBと認識されるということですよね? だとすれば640KB範囲内にキャッシュ禁止領域があるので遅くなる(高速化しない)ということで、上記いずれも説明が付きそうです。
> IPLwareの段階では(略)80000h以上を非キャッシュにし、 > DOSコマンド段階では(略)A0000h以上にします。 DOS上でCX486IPL(1.10)を実行した場合、CX486D(1.90)の情報では > Non cache regionの設定 > NCR1 : 000F8000 , size 32K > NCR2 : 000A0000 , size 256K > NCR3 : 000E0000 , size 32K > NCR4 : 00E00000 , size 2MB …という設定になっており、IPLware上で実行した後ですと、 > NCR4 : 00080000 , size 128KB になっておりますので、「80000以上の設定をA0000以上に変えている」というよりも(PK486Sのほうはそうなっています)CX486IPLではA0000以上の設定はそのままに、80000以上(IOバンク領域)の設定を00E00000以上(16MBシステム空間)の設定に変えているのだと思います。
もちろん安定性を考えれば必ずしも速ければよいというものではないというのは、その通りですよね…。
----10/08 22:30追記---- 更新版を試しました。PFM486の結果はFD-IPLware経由でやや遅く、DOS上では遅くならないという、仕様通りの挙動が確認できました。もしかしたらHDDがを認識すると遅くなったのもそれが原因で、たまたま環境次第で計測アドレスが512KBを超えてしまったのかもしれませんね。
DIP-SW 2-7をオンにするとSASI-HDDがDOS起動の途中で止まってしまいましたが、SASIはDMAを使いますから、これも仕様通りでしょうね。2-7をオフにすると普通に起動しました。 ところでOSFDIPLWでIDE-HDD(#1か#2)からの起動を選んだ場合(実際はSASIだったのですが)、#1か#2かの指定に関係なくHDD起動メニューになるようでした。自動起動が設定されていればそちらから起動します。少なくともSASIでは#1か#2かの指定は無視されるのかもしれません。
> 1.10ですよね? そうなのですが、CX486Dのほうはうっかり旧版(COM)を入れっぱなしにしていましたので、最新版(EXE)を実行したつもりが、COMのほうが優先的に実行されてしまったようです。疑問を持たれるのも当然でした。すみません。
> 最初に必ずRAM化IOを叩いていると思われます。 そちらのトレースはしていませんが、過去の経験ではCPUリセットの際にDXレジスタにはCPUIDではなく043Fが入っていましたので、恐らくI/O 043Fにアクセスした名残というご指摘がありました。再起動の際にPCI設定をいじっているのだとすれば、このI/Oも、漠然とですが怪しいかもとか思っています。
----(10/10 3:30追記)---- > Xa7となんら変わりません まあRDFばかりいじってきた価値観からすれば、Xa7も充分高性能なんですけどね。ここにも記事があったと思いますが、タダ同然の8MB SIMMを4枚装着すれば95が快適に動きますし、PCM音源がオンボードですし、HDDや光学ドライブには安価なIDE/ATAPIが使えた点は、RDFから見てうらやましいところでした。2000年過ぎくらいになって山猫XaやV2桁のドンガラが¥3kくらいで処分されるようになったときは、良い時代になったものだと思いましたねぇ…。(遠い目
|
1.10ですよね?→1.20 まりも 2024年10月6日(日) 20:38 |
修正 |
>NCR2 : 000A0000 , size 256K これは言っているそばから完全に誤った設定ですね(汗 たぶんハードウェアとしては80000hからの256KBと解釈しそうです。だとすると遅くなりえます。 【22:15追記】というわけで、ノーマルモードの設定にひどいバグがあったので修正しました。説明も完全に間違っていて、上で書いたことに反していました(汗; KAZZEZさんが疑問に思ったのも当然です。バグに気づかせていただきありがとうございました。なおこのところソフトウェアを多数更新していますので、この機にお知らせしておきます(画像3)。
|
|
リセット復帰ITF まりも 2024年10月9日(水) 21:12 |
修正 |
>(F0h叩きによるソフトウェア)CPUリセットの際にDXレジスタにはCPUIDではなく043Fが入っている という件、これは以前報告(2022年2月)したと思いますが、98ではキャッシュフラッシュのために、これをやっているのですよね。ですがDXの値がCPUIDでないとまずいことから、この前後でpush DX/pop DXをやっています。エプソン機486HAなどはそれをやっていないみたいであるという話でした。CPUIDが436というi486はあったので、43FというIDのEP機専用CPUが載っているのでは?という勘ぐりをしたことを思い出しました。
そういえばEPSON各機種での、9821のI/O 534hのような、外部回路完全リセットの機構は見つかっているのでしょうか?
KAZZEZさん >SASIでは#1か#2かの指定は無視されるのか どうも#2の方は結局#1から起動するかハングアップするかのどちらかのようで、まともに機能しないようです。
|
起動メニューを変えておけば かかっくん 2024年10月10日(木) 1:58 |
修正 |
> ところでOSFDIPLWでIDE-HDD(#1か#2)からの起動を選んだ場合(実際はSASIだったのですが)、#1か#2かの指定に関係なくHDD起動メニューになるようでした。自動起動が設定されていればそちらから起動します。少なくともSASIでは#1か#2かの指定は無視されるのかもしれません。
HDD 1とHDD 2の起動メニューを変えておけば何方から起動したか解りそーな気がし枡 みいそメニューとBSDメニューとか、片方をICMとか緑とかのHDDベンダのメニューにするとか
|
IO 043Fh リウ 2024年10月10日(木) 10:46 |
修正 |
EPSON機のこのIOはEPSON機特有IO 0C0*hの機能トグルに関わっているようには見えます。CPU RESETに伴って触りそうではあります。586RVではSHUTDOWN後には触った後にDXはリセット直後値にきちんと戻していました。
過去ログ読んできました。C07hがRAM関連のIOでしてITF,BIOS,ROM,RAM切り替えに関わっています(完全には把握できていません。) ついでに非PCI機ではIO 043dhの10hでシステム空間の書き込み可、12hで書き込み不可、だとは思うのですが後期の?機種依存ぽいです。(NEC機ではこの操作はITF切り替えなので非互換)
山猫CanBe持ってますがPCIバスはなければむしろ諦めがつくという意味ではイイモノ?なんで430FX(430NXは高いから430LX)にしなかったのですかね、それにしても山猫Xt13でUSBのドライバを書くのは危ないのかも…
RV586のIDEBIOSへのパッチは牛歩ながら進んでいます。256B/Sへの対応を最後まで諦めなかったんですね、EPSONは。気になったのはD800セグメントのワークメモリはすかすかでスタックをワークに使ってるところです。int1Bを呼ぶ時にローカルスタックをわざと小さく確保しているものがあると暴走するでしょうね
13:45追加 PC-486H系の妄想 PCIのIO0cf8hがEPSONIOの0C0*hの近くにあることから IO43fhの42h(開放)をするまで40hの閉鎖中で封印されている?という可能性はどうでしょうか
11日22:07修正 ここまでの報告で述べていたPC-586RVはPC-586MVの間違えでした。すみません、読み替えてください
12日0:17追記 PC-486H系のIO調査ありがとうございます。 妄想は外れですね。 ちなみにこちらではEMM386に関わるリセットボタンすら効かなくなる、と同じ現象がEMM386とは無関係に発生していますが、まだどのIOを触ったせいなのかがわかりません。起きたり起きなかったりして再現性が見いだせていません。そのためまだIDEBIOSのパッチが提出できません。パッチ内容は大丈夫と思ってはいるのですが
|
043Fhに出鱈目OUTも、C000に変化なし KAZZEZ 2024年10月11日(金) 22:49 |
修正 |
私がちゃんと意図を汲めているか分かりませんが、とりあえず、486HAで043FhにOUTを試してみましたところ、I/O C000hから読める値は00で変化はありませんでした。42や40はもちろん、00からFFまでの値を昇順・降順でOUTしていっても、その途中でI/O C000に変化は見られませんでした(もしも即興の調査プログラムにバグがあったらその限りではありませんが)。 ちなみに昇順でOUTしていくと終了時にCOMMAND.COMが見付からないとかでリセットするしかなくなりますので、何らかのメモリ変化は起きているのでしょうね。降順でOUTした場合は終了時にDOSのコマンドプロンプトに戻ります。もちろんHDDアクセスでハングするなど、無事ではなさそうでしたけど。 なおC000〜は基本的に1バイトアクセスのようで、C000から2バイトアクセスや4バイトアクセスするとC001やC003に相当する場所にはFFが入っていますが、1バイトアクセスであればこれらも00が返りました。
|
P55CSUP2の430FX機版みたいなもの まりも 2024年10月12日(土) 8:37 |
修正 |
OSFDIPLwareをもっと使おうキャンペーンの一環?です。
別スレッドで話題になった、P55C(MMX Pentium)に載せ替えると動作しなくなる問題のうち、intel 430FX機についてはIDEのディスクドライブから起動することもできないので絶望視されていましたが、フロッピーからはなんとか起動はできます。つまりOSFDIPLwareならいいのでは?ということで、実際やってみました。ソフト名はmmx430fx です。実質的にOSFDIPLware専用という珍しいものになっています。SCSIのドライブならIPLwareでも行けますが、メモリスイッチにおけるブート装置をSCSIに設定しておかないとダメという点で難ありです。 次のように問題が解消することは確かめました。 ・mmx430fx実行後の起動デバイス選択からIDE(#1)が起動できる ・MS-DOSでEMM386がハングアップせずに動作する ・PCISETUPユーティリティが実行できる 対応マザーボード(BIOSのシール表記)はG8VER,G8VLJです。後継のWPYもたぶんいけるのではと思っています。 ttps://www7b.biglobe.ne.jp/~marimo9821/iplware/mmx430fx.html
ついでに判明したこととしては、従来のリブートプログラム(SHUT DOWNポートをセットしてout F0h)では、当該機種のSYSTEM BIOSは、CPUリセット直後に--RAMが選択されており--、ROMでないことがわかりました。リセットボタンを押すか、I/O 534hを叩く方式のリブートプログラムを使って、きっちり周辺もリセットしないといけません。HSBだとどうですかね。
【13:00追記修正】正しくは、「RAMが選択されている」ではなくて、「ROMからのコピーで初期化されるべきRAMが初期化されていない」 です。メモリチェックが相当に省略されることを示しています。リセットボタンあり機種だと、F0ソフトリブート、リセットボタン押し(534リセットはこれ)、電源新規投入 のそれぞれでメモリクリア、チェックのされ方が異なるようです。
|
EPSON機も同様問題を? リウ 2024年10月12日(土) 9:22 |
修正 |
weblabo.griffonworks.net/dorlog/2nddorcom/epson98/2378.html IDEBIOSはD800hには存在せずF75Aセグメントに実体があります(言い切ります)からD800バンク切り替えでの不具合はないにしてもF000セグメントのITF、BIOS切り替えがあるのなら同様問題はありえそうです。 リセットボタンすら効かないのでEPSON機のリセットボタンはソフト操作なんですかね そういえば思い出しましたがうちのXe10はIO F0でのリセットではROMに戻っている気配があります。
13:04追記 K6はLOOP命令の実効クロックが短い、Windows95のIDEドライバで問題になってたものがEPSONROM内部にいるかもしれませんね。ハードウェア的なものじゃなさそうだ、という回答は見ましたが
14日15:00ちょっと前 IDEBIOSのパッチと壁こえSCSIのEPSON(内部PCI)機の対応品をアップロードしました。EPSON機IDEにもATAPIルーチンがありました。スレーブは完全無視で、セカンダリマスタの二台目は手元の適当なモノをつないでも無視されてしまいました(判別方法が腑に落ちてません)。 パッチ後は4台使えるはずです。が長期テストしてない上にテスト機はマルチセクタ非対応品でやってましたからそこが心配 17日午前2時半頃 バグってましたのをようやく直せました。しかしEPSON機は謎が多いのでまだまだ報告が必要です。ノート機でも同じレジスタ操作でRAMが開くかもわかりませんし、PC-486H系はまったく想像もつきません。
17日23:30頃追記 EPSON386機でのC000セグメント64kBのRAM化方法がわかりました。 IO43fに42hで開放後、IOC07hにb7hを出すと64kBの塊でRAMになります。3bhを出すとCBUS側に戻ります。 またC07hに6ahを出した場合C000からの128kBがRAMになりますが、386Mの場合はCRTへの文字出力がなくなってしまいます。このとき改行以外のカーソルは動いています。またRAMからの戻し方がわかりません。
判明した側はC000セグメントということで、弄る場合は標準的なEMSページフレームの使い方はできなくなりますが広大です。一晩寝て落ち着きます。
19日21:55 diskbootのEPSONチェック外しありがとうございました。 しかし残念ながら586MV,386Mともに高速リブート失敗でした。(config.sysなしのDOSから試しました。) ということで外字領域をまた独自の仕様で使っている可能性が出てきました?気になるのは登録時にグラフィック画面?テキスト画面?に何かを書きこんでいるのが見えます。 NEC機では?そのようなものは見えずにsetvectcの文字列が見えています。
|
IPLwareではインターバルタイマBIOSは使わないほうが無難? KAZZEZ 2024年10月17日(木) 0:09 |
修正 |
最近Xc16/Sをいじっていて、しばしばDOSアプリが停止する妙な現象に気が付きました。条件がよく分からなかったのでここ数日いろいろ試していたのですが、ようやく条件が絞れてきたかもしれません(違っていたらすみません)。
NT/2kをセットアップしたドライブ(HDD・SSD・CF)のIPLでシステムを起動し、かつインターバルタイマ INT 1C/AH=2 を使用するIPLwareアプリを実行してから(OSFDIPLWの場合は実行した後に該当ドライブを指定して)HDD起動メニューもしくはNT/2kのOS選択メニューでDOSまたはDOSモードを立ち上げたあと、12分近く放置していたら、いつの間にかPCがフリーズして操作を受け付けなくなっているようなのです。この10分あまりという時間は、インターバルタイマBIOSの設定できる最大値655.36秒にほぼ一致しているのが怪しいところです。
INT 1C/AH=2を使うIPLwareは少なくとも拙作TIMEDATEおよびTIMODが該当します(ので、単に私のBIOSの使い方がまずかったのかもしれませんが、いずれもソースが付いていますので不具合があるようでしたらご指摘ください)。 カレンダ時計の不具合を検出するのに念のためインターバルタイマも使ったのは私くらいだと思いますが、もちろん分単位もの間隔などは入れていません。このTIMEDATEは曜日を修正しないという手抜きがありますから他のカレンダ修正ツールとの相性が悪いという欠点があり、さらにSETRTCやCHACHA/PCISETのほうがメジャーでしたから使っている人はほとんどいないとは思いますが、今まで気付かなかったのは申し訳ありません。m(_ _;)m
私はNT/2kのシステムには基本的にTIMEDATEを入れて使っていますが、2kを使うときはDOS/9xのドライブを(後から)プライマリマスタに繋いで2kをCドライブのままドライブレターを合わせて使ったり、もしくはセットアップ済みの2kを新しいHDDに移して使うなどしていたため、2k/NT純正のIPL(?)を実行する機会がほとんどありませんでした。ついでに言えば、FAT32で2kと9xを混載すると例によって9xが起動できなくなる不具合がありますから、わざわざ2kをセットアップしたドライブのBOOTSECT.DOSを使ってWin98のDOSモードを起動する機会も基本的にありませんでした。そもそもDOSがフリーズするのは珍しいことではありませんから、そういうことがあっても気に止めなかったのかもしれません。
NT系IPLだと何が問題になるのかは存じませんが、とりあえずDOS起動後にあらためてINT 1C/AH=2を使えば不具合は回避できそうでしたので、IPLwareでタイマーBIOSを使うのでしたらAUTOEXEC.BATにタイマーを使う適当なプログラムを登録しておくのも手だと思います。しかしIPLwareの段階で対策するにはどうしたら良いのでしょうね? タイマーBIOSはAH=2しか存在しないらしいですから、キーボードBIOSのように初期化ファンクションがあるわけではありません。いずれにしても対策が見付かるまで、NT/2kのIPLwareでインターバルタイマを使うアプリは使わないほうが無難かもしれません。
|
インターバルタイマが欲しければ かかっくん 2024年10月17日(木) 13:21 |
修正 |
ゐゃゐゃFreeDOS(98)なら兎も角他のDOSがフリーズするのは珍しくなくわないっショ(一般論)
IPLwareでインターバルタイマを遣いTai!場合わBIOSでわなく8253を直接遣う鹿ナイの鴨知れません DOS/IPLware兼用プログラムでなく別々(IPLware用は誤使用防止でタイプ1(RETF)がベター)に用意した方が 良い鴨 8253を直接遣っても異常なら此の時点でのインターバルタイマはフカと云う事で。 # 十数msで設定無しデモ良ければVsyncを遣うとか
|
無慈悲だらけの日常 まりも 2024年10月18日(金) 13:44 |
修正 |
無慈悲ですみませんが、再起動プログラムrebootは 98のしかも世代に依存するところを叩くので、EPSON判定を入れています。I/O 534hによるソフトなハードウェアリセットはEPSON機にあるのか、あるならどの機種か、というのが確定してからでないと使えないのです。 【14時追記】あ、そっちではなくdiskbootの方ですか。これは外字の最大登録数とSYSYEM BIOSのブートエントリポイントさえ98本家と同じなら、EPSON機を除外する理由がないですね(汗 後ほどなおしておきます。【21:48更新完了】 ttps://www7b.biglobe.ne.jp/~marimo9821/knowhow/diskboot.html
別スレに書いた3つのことが気になりますが、今からEPSON機を全て揃えるのは、、、PC-486M族なら安そうですが、いかんせん起動しない白画面ROM機は、複数台買って不一致部分を潰して復元という作業が無慈悲過ぎるのです。
ところでBIOSのインタバルタイマ機能ですが、Xa13/WのSYSYEM BIOSを見ていたら、int 1Ch、AH=03hに何か機能がある感じです。これはハイレゾだとタイマーのキャンセル機能ですが、ノーマルモードには無いことになっています。キャンセルがないのは無慈悲過ぎるので、ミイソはどこかの機種からか機能追加したのですかね?それとAH=80hと81hも何か機能がありそうですが、はて?【23:59追記】自動電源制御機のみにあるっぽい
なおint 1ChはDOSがフックすることはなく、どの機種でも入り口はFD80:0500hだと思います。後年の機種ほど実質的な部分に飛ぶまで散々たらい回しjmp命令が続きますけど。
|
割込みベクタ07 KAZZEZ 2024年10月19日(土) 22:14 |
修正 |
Xc16やRa40で試す限り、単にINT1C/AH=3としただけではインターバルタイマー割込みをキャンセルできないようですね。ハイレゾとは役割が違うのでしょうか…。
> (IPLware用は誤使用防止でタイプ1(RETF)がベター)に用意した方が TIMEDATEについてはもともとTYPE1です(おまけとしてTYPE2も付けてはいますが)。ただ、設定のためにTIMEDATE.BINを吐き出すDOS専用プログラムになっていますので、誤使用防止策としてCX486Dと同様にEXE形式にしています。
----20日0:50追記---- インターバルタイマの割込み先は基本的にINT 07hの割込みベクタが使われるそうで、実際にINT1C/AH=2を使うたびにそこが変わっていますから、インターバルタイマ割込みをキャンセルするのであれば、そこに飛び先として確実にCFh(IRET)の存在するアドレスを書き込んでおけば良さそうな気がします。 で、割込みベクタ07の起動時デフォルトはどうも多くの機種でFD80:0936になっているように思います。Xc16はもちろん、PC-486HAや、VX21からしてそうなっていました。そしてそこにはIRETがあるようです。 つまりIPLwareでインターバルタイマを使ったら、0000:001Cに0936、0000:001EにFD80を書き込んでおけばよいことになりそうです。万一、機種によってアドレスが違うことを想定するにしても、INT1C/AH=2を使う前に0000:001Cと0000:001Eをバックアップしておき、インターバルタイマ使用後に書き戻せば良いのではないかと思います。 しかし動作確認にいちいち11分かかるのは面倒ですね…。(1:20追記)ちょっと試した感じでは、これで行けそうに思います。
|
インターバルタイマを短く かかっくん 2024年10月20日(日) 12:02 |
修正 |
> しかし動作確認にいちいち11分かかるのは面倒ですね…。(1:20追記)ちょっと試した感じでは、これで行けそうに思います。
8253に直接outして、もっと短くしてわ?
|
割り込みベクタの初期値FD80:936、初代9801から不変? まりも 2024年10月20日(日) 12:28 |
修正 |
BIOSを使うのは「手軽だから」なので、、、しかしノーマルモードのはかなり不完全です。インタバルタイマBIOSルーチンは、int7を実行した後にはその割り込みベクタは退避場所から元に戻すくらいはやっておくべきですよね。というかなんでint 7を使う?引いてきたアドレスをシステム共通域にでも保存し、実行して戻るだけでよさそうなのに。
int 5-7は80286の頃からCPU例外発生時に使われますが、8086の時には空いていたので、ミイソが勝手に98の機能に割り当ててしまったのですよね。COPYキーに割り当てられてしまったint 5などは迷惑千万です。
IPLwareアプリでインタバルタイマBIOSを使った後に、int 7の飛び先を戻しておけば大丈夫ということは、起動メニューでインタバルタイマBIOSを呼んでいるか、何も考えずにint 7を呼んでいるということでになりますが、そんな感じはしません。HSBか何かで再起動しようとした時だけ起こりますかね?
【追記】>残念ながら586MV,386Mではともにdiskbootによる高速リブート失敗 外字ではなくてFD80:ECxxの方の非互換性かもしれませんが、それだとEPSON機で全滅で、OSFDIPLwareでの他デバイスからのブートもできないことになります。こっちは大丈夫なのですよね?
|
OSFDIPLWとEPSON-IDEBIOSとか リウ 2024年10月20日(日) 21:41 |
修正 |
手元で確認をしました。 PC-386Mは第1ドライブが壊れてまして第2ドライブに1.2Mフロッピー(NECDOS6)です。IPLWareプログラムが正常に読まれてSCSIから起動、を選択するときちんとSCSI側IDの若いもののIPL読み出されました。しかしフロッピーそのまま起動を選ぶとうまく起動できませんでした。(第2ドライブのせい?) PC-586MVでは不可解な動作をしています。フロッピーから立ち上げるとIDEBIOSが隠れます。(理解不可能です。)ただしこちらはフロッピーからそのままNECDOS6が立ち上がりましたしSCSI側選択は正常動作しました。
ということでFD80の方は多分アドレスが一致しているのだと思います。もし外字領域を独自パラメータにしてるとしても電源再投入後に正常に動作するのでそれも違う気がするのです。
EPSON-IDEBIOSの解析情報は現在のところLBA_IDEPのソース内に書いてありますが、重要そうなところだけはまたまとめておこうと思います。 今までの定説が謎すぎるので、少しは説明ができるかもしれません。 がんばってみます 14:20頃アップロードしました。圧縮ファイルの中なのでアクセスが面倒ですが、それなりに説明できている気はしています。自己満足ですけれども
もう遅いですがタイマで待つのがめんどうなら0000:058Aの値だけ小さくしてやれば…と思いましたが遅かったですかね、カウンタが回り続けるのがそもそもおかしい、という話にも思えますが
23日9:45追記 386M用FDDユニットのDXピン紹介ありがとうございます。入れ替えてみると無事一台目からOSFDIPLW付きのフロッピーからNECDOS6が起動しました。
|
KAZZEZ 2024年10月21日(月) 0:01 |
修正 |
> 8253に直接out > 0000:058Aの値だけ小さくしてやれば… > カウンタが回り続けるのがそもそもおかしい ですよね…。とりあえずNT/2kのIPLだからといってタイマーが勝手に起動してしまう仕組みがよく分からないですので、不具合の起きた環境をそのままで試したほうが良いかと思い、できるだけDOS起動後にタイマー関係はいじらないようにしました。
> HSBか何かで再起動しようとした時だけ起こりますかね? 条件を揃えるためになるべく電源ONからやっていました。2k/NTのIPLから起動したときに起こるという認識です。ただし最終的にFDから起動するとFD側のIPLがあらためて実行されるためか、不具合は起こらないようでした。逆に、FD版IPLwareの後に該当のHDD/SSD/CFからの起動を選ぶと不具合が起こるようでした。ただ、なんとなくですがHDDよりCFのほうが再現性が良いように思います。CFはCFリセットを起こさない古いタイプのCF(256MB/2GB)を使用しました。
> OSFDIPLW 当方の486HA(NOTE用IDE-HDD内蔵)ではFDD一台目・二台目とも、OSFDIPLW実行後の起動について特に不可解な点は無さそうでした。FDからもIDE#1からもROM BASICからも起動できるようです。
> 初代9801から不変? 個人的にはVM21やUV11より古い機種は持っていないですので、初代/E/F/M/U/VM前期/VFまではよく分かりません。とりあえずV30機であるPC-286LEでは同じようでした。
|
FDSK98における1870MB指定【8:17】 まりも 2024年10月21日(月) 9:37 |
修正 |
FDDの#1が壊れていると#2をブートしに行くのに時間がかかるか失敗するかもしれません。ともかくEPSON機でもディスクのブート関連は、古い9801から変わらない仕様のため、互換性ありと見て良さそうです。外字の仕様も9801VXくらいからは変わっていないはずです。
ところで えむしてさんの研究 ttps://key.kubiwa.moe/notes/9taueorlg9nvjtib 1870MBを指定すると、領域のファイルシステム部に続くデータ部のセクター先頭が2のベキ乗バイトでクラスタバイト境界と一致になるのですか。もちろん8:17の場合のみですけども。これはどうやって探したのでしょうね。
PC/AT版の拙作FDSKではSSDなどを考慮した割り付けを行うようにしていますが、98版FDSK 98ではそれをしませんでした。98ではCHSの制約が大きすぎ、また色々な値を取りうることが理由として挙げられます。それも予約セクタの数BPB_RsvdSecCntで一応調整できますが、これが大きくなり過ぎると、そもそも無駄にはなるし、古いディスクユーティリティが破綻したり、もしかするとOSさえも認識を誤る可能性があるためです。偶然一致した1870MBではそういう問題は起こりません。
なお予約セクタ数BPB_RsvdSecCnt=4である理由も一応あって、まず何かの拍子にブートセクタ付近が破壊されたとしても2KBくらい離しておけばFATは壊されにくいかなというのがあります。もう一つの理由としては、98にしかないセクタ長2KBのFAT16の存在です。65MB-128MBのときDOS 7以降と3.3との互換性がなくなる問題がありますが、3.3仕様-->7仕様に変換する「DBLTRANS」コマンドの逆を可能とするためでもあります。
|
8086の時点もint 5〜int 1Fhを予約 かかっくん 2024年10月21日(月) 11:45 |
修正 |
> int 5-7は80286の頃からCPU例外発生時に使われますが、8086の時には空いていたので、ミイソが勝手に98の機能に割り当ててしまったのですよね。COPYキーに割り当てられてしまったint 5などは迷惑千万です。
元々int 5〜int 1Fhも8086の時点でいんてるが予約して居ましたが、みいそもIBMも勝手に遣いました からねぇ # int 8〜int 17h(PC: int 8〜int 0Fh?)のハード割り込みわ8259への設定で変更可 COピY STOP等はソフト割り込みの筈デスからキー入力周辺のRAMイヒBIOSを書き換える必要が有馬すが 既存のソフトはint 5/6が前提デスし
> PC-386Mは第1ドライブが壊れてまして第2ドライブに1.2Mフロッピー(NECDOS6)です。IPLWareプログラムが正常に読まれてSCSIから起動、を選択するときちんとSCSI側IDの若いもののIPL読み出されました。しかしフロッピーそのまま起動を選ぶとうまく起動できませんでした。(第2ドライブのせい?)
386MのFDDは他機種より入れ替えが容易デスからFDD 1とFDD 2を入れ替えてわ? 単純に入れ替え出来るかジャンパ等FDDに再設定が要るか失念
> 1870MBを指定すると、領域のファイルシステム部に続くデータ部のセクター先頭が2のベキ乗バイトでクラスタバイト境界と一致になるのですか。もちろん8:17の場合のみですけども。これはどうやって探したのでしょうね。
計算で求めたやうデスな。自分も能くやり枡けど
表計算に各パラメータを入力して求める方法が有馬す セクタ長・S数・H数・C数を入れて計算するとサイズが出枡。HSを固定するとセクタ長とC数で求まり枡。 ファイルシステムも同様に FATfsのレイ: 論理セクタ長・クラスタ長・IPLセクタ数・FATセクタ数x2・¥セクタ数(FAT12/16)・データ領域 セクタ数と入れればサイズが出枡 2G以内でFDSK98での条件を満たすのが1870Mと云う事で。
因みにIPLサイズもFATサイズも¥サイズも任意の大きさに指定出来るらιぃので領域を任意のサイズで確保 出来枡が、HDDやSSDなら兎も角SD等でわ無駄が多く成るでせう 極端なレイでわIPLサイズをSDのブロックサイズ(アクセス単位でなく消去単位の方)にしたり、FATや¥も 其れに合わせる事も不可能でわ有馬せんが無駄が多く成増 参考 elm-chan.org/docs/fat.html # 此の頁にレイの大文字小文字の件も有り
|
P5/P54CとP55C かかっくん 2024年10月21日(月) 17:15 |
修正 |
P5/P54CとP55Cて、MMXの有無やVcore・キャッシュサイズ・分岐予測ばかりが違ィとして挙げられ枡が、 命令のペアリングやキャッシュの仕組み(P5/P54C:2ウェイ P55C:4ウェイ)とかも違ゥんデスねぇ ペアリングの違いが分岐予測にも影響して居るの鴨知れませんが
|
/人'A`;人\ 2024年10月22日(火) 17:30 |
修正 |
DXジャンパ設定の変更が要るかと。MD3522の項を参照。 ttps://98epjunk.shakunage.net/fdd/fdd_ds_setting.html
|
固定ディスク#2からのブートは? まりも 2024年10月22日(火) 21:13 |
修正 |
>FATセクタ数x2 これは容量やCHSを与えれば一意的に決まる、とは言えないパラメータです。いやフォーマッタは適当な総セクタ数から適当な仕様のもとに一意的に決めますが、ユーザはそれを知ることはできず、実験的にしかわからないと思います。無駄のないもっとらしい値を推測できないことはないので、そうしたのでしょうか。
ところでメモリスイッチのブート装置の設定項目には「固定ディスク#2」があるわけですが、どうも正しく動かないように見えます。PCIバス搭載機で1台目にオンボードIDE、2台目に大熊猫BIOSのSATAのドライブを繋いでみると、2台目からはIPL+固定ディスク起動メニューが起動できませんでした。【システムディスクをセットしてください】になります。これでは最近作ったツール類でもIDE#2からの起動ができないのは道理です。
|
FATサイズを求めるにはクラスタサイズを決める必要 かかっくん 2024年10月22日(火) 23:29 |
修正 |
>>FATセクタ数x2 > これは容量やCHSを与えれば一意的に決まる、とは言えないパラメータです。いやフォーマッタは適当な総セクタ数から適当な仕様のもとに一意的に決めますが、ユーザはそれを知ることはできず、実験的にしかわからないと思います。無駄のないもっとらしい値を推測できないことはないので、そうしたのでしょうか。
然う、此処に足りないパラメータとしてクラスタサイズ(クラスタ毎のセクタ数)が有馬す。此れわBPBに 指定し枡からフォーマット時に決まり枡(決まり事の範囲内で決める事も可)がサイズから概算出来枡。勿論 ルール(クラスタ長はセクタ長の2の冪乗である(6Kとか20Kとか半端な値に出来ない)、FAT16で約4096〜 約65520の範囲にする、DOSで認識させるには1クラスタ32KiB以内、他)を知って居なければ求まりません DOSで認識出来る1G超のFAT16なら32Kと判り枡が、此れも16Kで65536をオーバーする事、64KをDOSで 認識しない事を知った上での事デスね で、クラスタ数が求まればFATのサイズが決まり枡。FAT16ならFAT2ッで凡そクラスタ数を4倍して(バイト数) セクタ長で除した商と成増。余りが出たら2(1x2)セクタ増し枡
尤も32M〜1Gで32Kクラスタにする事もFAT32にする事も可能デス。普通しませんけど
さぁ此れでフォーマッタ無しでもBIOS利用のディスクエディタ(98用のDDTXとかPC用のDDEDITとか)と 然るべきIPL類が有れば手計算で初期化出来枡ね(謎)、普通しませんけど # 阿、自分わ必要と有らばし枡よ # 特にSDとかCFのやうなFlash類の場合フォーマッタが適切なサイズでフォーマットしない場合が有馬すから
|
インターバルタイマ問題の続き KAZZEZ 2024年10月22日(火) 23:58 |
修正 |
その後わかったこととしましては、IPLwareローダやIPLwareモジュール(の残骸)は恐らく関係なさそうということです。IPLwareローダが存在しない状態でも、症状の出る環境であれば、DOS起動後に割込みベクタ07にFFFF:0000を書き込んでおくだけで、予想通り11分後には「ぴぽっ」となります(ので、確認には便利です)。
また、先頭64KB弱(IPLWARE /Bで読み出せる部分)を00で埋めた未フォーマット状態のSSD(8GB)で試したところ、2k(GUI)でフォーマットしたものに2kをインストールしても症状は出ないようでした。どうも最初にDOS(モード)をインストールし、2kにアップグレードしてからDOS(モード)を起動すると症状が出る感じです。ただ、今回は「OSFDIPLW → 症状の出るIPL → 症状の出ないHDD上のDOSモード」という手順では症状が出ませんでした。症状の出るSSDからBOOTSECT.DOSで直接DOSモードを起動すると症状が出ます。
しかしWin98のDOSから2kへアップグレードするときのIPLの変化を見ても、アクティブと自動起動のフラグが付くことを除くと、DISK署名らしきものとそのセクタの最後に55AAが付くことくらいしか違いがありませんでした。 両者の違いは何でしょうね? 仮にIPLに原因があると仮定した場合、 ・DOS(モード)から領域を一括で確保している ・DISK署名がある(そのセクタの最後に55AAが付く) を両方満たすことくらいしか見当たりません。 (1:40追記)署名を消したIPLを書き込みなおしても、不具合(再起動)が起きたようでしたので、もしかしたらIPLは関係無いかもしれません。MBRあたりも調べたほうが良いでしょうかね。 (2:25追記)失礼しました。署名を消しても(少なくとも)2kのOS選択メニューが出た時点ではすでに新たな署名と55AAが書き込まれているのですね。IPLメニューから他のHDDを選んで起動すれば署名は消えたままですので、IPLには自動で署名をする機能は無いようです。
|
FDSK98の既知の問題 まりも 2024年10月23日(水) 0:04 |
修正 |
FATに要するセクタ数は、データ域のクラスタ数が収まらないと大変なことになります。だからといってFATセクタ数を求める計算式で変に余裕を持たせると、今度はFATのセクタを余らす、つまりFAT域の最後のセクタが使われない状態になります。ところがどうもそれでも動作上は問題ないようなのですね、BPBの記述に合ってさえいれば。この余らせ状態はさすがにユーザは想定できないと思います。もちろんそんな状態は不適切で、FATのセクタ数を余らすなら予約セクタの方に回すのが正しいです。
FDSK98では、もしかして極めて特定のクラスタ数のときに、これをしでかしているかも?(汗
で、FDSK98に関連してですが、大熊猫さんのNEWHD相当のこともFDSK98ではできます。 ボリウム管理→フォーマット初期化→未使用状態にする を適用すると、先頭から64セクタ(32768バイト)を0フィルします。IPLwareの先頭部とWindows2000disk署名もきれいにします。NEWHDだと7680バイトまでなのですよね。
あとFDSK98のバグとしては、KAZZEZさんが見つけられた、ディスク署名の変更入力時の問題があります。入力文字列がバッファオーバーランすることで他の変数に影響してしまうようです。署名のクリアは従来のw2ksignの方を使っていただいた方が無難です。
>インターバルタイマ問題の続き Windows2000が関係していなければ全く問題は起きないということでよろしいでしょうか? 「DOS(モード)をインストール」はDOS7.1の起動可能領域を作るという意味かと思いますが、 「2kにアップグレードしてからDOS(モード)を起動」 という部分がどういうことを行なっているのか理解できなくてすみません。普通にWindows2000の機能であるマルチブートでしょうか?(98では起動メニューがあるので、これをやる人は非常に少ない)
|
Re KAZZEZ 2024年10月23日(水) 1:49 |
修正 |
> Windows2000が関係していなければ全く問題は起きない 今のところはそういう認識です。ただし2000でなくともNT4をインストールしたCFや、NT3.51をインストールしたHDDでも同様の不具合が発生することを確認しています。後者は486HAでしたので、本体は多分関係ないようです。
> Windows2000の機能であるマルチブートでしょうか?(98では起動メニューがあるので 両方です。今回は2000側のOS選択メニューからDOSを起動した場合だけ発生しました。 PC-98独自のHDD起動メニューを使う場合、該当のドライブをIDE一台目に繋ぎ、二台目以降の装置からDOS(モード)を起動すると同様の不具合が起こる場合がありました。 なお、SCSIドライブについては試していません。
|
DOS起動とは言っても まりも 2024年10月23日(水) 10:26 |
修正 |
Windows2000を入れた、ブートセクタも変わった、という「ディスクに残る結果」が何かをしているのではなく、完全にWindows2000のブートローダのプロセスに入ってからの事象ということになりますよね。そこでタイマーがいじられているわけで、DOSやIPLwareは無関係だと思います。タイマーといえばboot.iniでの選択にタイマーがあり、こういう記述があります。timeout =30; 30秒後にデフォルトの起動を行いますが、それではないですかね。
純粋なDOS起動と、Windows2000のメニューからのDOS起動とでは、割り込みベクタやシステム共通域の前提条件が全然違うと思いますよ。同じになっているべきではありますが、そうなっていないのはWindows2000のちょっとしたマズい仕様(ないしはバグ)では。
ちなみにPC/AT(レガシーBIOS、CSMモード)の場合、Windows7でもブートマネージャからDOSやXPの領域を起動できますが、起動前環境が微妙に違います。それを嫌ってか、Windows10のブートマネージャだとPOSTからのきれいな起動し直しに変更されています。これはこれで起動時間がかかるので嫌いな仕様ではありますが、、、
|
INTVECTC リウ 2024年10月23日(水) 20:47 |
修正 |
ソースを読みました。 EPSONチェックの後exitmainへ抜けているようです。 dskboot131.zip内のINTVECTC.BINの日付は2024-5-28となっていますので恐らくdiskboot本体側はチェックが外れているのですが、INTVECTCの方は外れたままなのかと思います。指摘が間違えてたらすみません
|
とりあえずNT/2kのブートローダー経由でなければ不具合は起こらない様子。 KAZZEZ 2024年10月23日(水) 21:21 |
修正 |
> 0000:058A てっきりインターバルタイマINT1C/AH=2で設定した値のバックアップかと思ったらそうではなく、インターバルタイマの活動中はINT 08の0.01秒毎のタイマー割込みで随時減少させているのですね。ここがゼロか否かを見ればインターバルタイマが使用中か否かが判別できますから、コレを確認するのが簡単そうですね。ありがとうございます。
> timeout = 先月ぐらいに話題がありましたが、PC-98版のNTの場合はこの値が機能していないようですね。2kでtimeout=0を指定したときに相当し、default= で指定されたOSから強制的に起動しますが、それでも同様の不具合は起きます。なお2kではカウントしますが、途中で切り上げた場合とタイマーがゼロまで待った場合で結果は変わらないようでした(あまり参考にならないですね;汗)。
> 完全にWindows2000のブートローダのプロセスに入ってからの事象ということになりますよね 確かに、問題の起こるドライブを一台目に繋いで起動してHDD起動メニューから問題の起こらないドライブのDOS(モード)を起動した場合に、インターバルタイマの不具合が起こることは再現できませんでした。そうなると、NT/2kのブートローダー経由でDOSを起動したときでなければ不具合は起こらないことになります。
ところが、それはそれでよく分からないのですよ。問題の起こらないドライブを一台目に繋いで起動して、そのHDD起動メニューから、問題の起こるドライブのNT/2kのOS選択メニュー経由でDOS(モード)を起動した場合だと、不具合は起こりません。たとえ一台目の先頭パーティションが2k(もちろんマルチブートの設定は施さず)だったとしてもです。やはりブートローダー以外にも、IPLか何かの環境が絡んでいるように思えます。一台目と二台目の両方が不具合を起こすドライブだった場合に限り、二台目からの起動(もちろんNT/2のメニュー経由)でも不具合が起こります。 IPL内のHDD起動メニューで一台目を選んだときとそれ以外で何か条件が違ってくるのでしょうか?
|
コメントアウトでは落とし穴が まりも 2024年10月23日(水) 22:39 |
修正 |
>INTVECTC.BIN ぁぁそっちもEPSONチェックがあったんですね。自分で作っていて完全に忘れていました。しかもソースのEPSON.INCは共用となっていたようで、EPSONチェック呼び出し箇所をコメントアウトするのではなく、これ自体を撤去すれば気がついたはずでした。 というわけで,「DISKBOOT」はバージョン1.35として(intvectcは2.40)アップロードしました。
|
ファイル名 リウ 2024年10月24日(木) 5:52 |
修正 |
98epjunk.shakunage.net/storage/ep_hdd_upper_limit.html EPSON機の謎.txtというファイル名でLBA化パッチの中に置いてあります。(22:36頃改訂) EPSON機の543MiB壁はSCSIの1GB壁とほぼ同じと考えてよいと思います。DOSからLBAアクセスする限りは計算間違えせずに使えたのでしょう。しかし直接Int1Bを呼ぶようなプログラム(具体的には何がありますかね ちょっと前までのFreeDOS(98)や起動メニューの選択以外には)でCHSアクセスしてしまうととても怖い結果が帰ってきたはずです。 2G壁は符号付き16bitの問題かと思いましたが、どうもBIOSを覗いていると違う気になってきています。NEC機でも採用されていた、既知のシリンダ値へ減らして登録する、というやり方をとっていたのではないか?と妄想しています。そしてある数値より大きいと接続無効にされる意地悪を受けていたのではないか?実物を読んでいないので妄想ですが。
weblabo.griffonworks.net/dorlog/2nddorcom/epson98/2947.html 容量の壁とは別にどうも最初のinitializeの反応でこけるHDDが多数ありそうなのですが、そりゃ容量壁を疑いますよね、これに関してもまた見解(妄想?)を書いておこうと思います。
diskbootとintvectcの対応もありがとうございます。 正午追記 無事にIPLwareで外字領域に保存され、DOSからDISKBOOTも呼べました。 残念ながらEPSON機には非互換部分がありました。オプションなしの標準扱いでコマンド実行をするとフロッピーを入れていても読み出しすらしてくれませんでした。それ以外のオプションを指定すると無事に高速リブートができました。PC-386M,PC-586MVともに同じでしたのでEPSON機の場合は0C01hの値ではダメなようです。(何がよいのか指摘できずにすみません。)
別件ですがインターバルタイマもなんとなく DOS上ではIR0(訂正)の割り込みが禁止になってなければそれだけでカウンタは回るようです。具体的にはIOport02hのbit0を下げると0000:058Aのカウンタが回りました。あげれば止まりますが、NTLDR?IPL?BOOTSECT.DOS?の誰かがこの割り込みを禁止せずに許可状態にしたまま放置してしまっているっぽいですね
(26日13:25追記) 再現方法を頂いたのでemulatorで裏から覗きながら実行してみました。 Windows2000のwinnt.exe実行直後リセットの状態です。 NTLDRがメニューを開いている間はIOport02のbit0の上げ下げが頻繁に行われています。 そのままNT系OSに移行すればプロテクトモード割り込みの世界ですから何も問題ありません。 がDOSを立ち上げると割り込み許可の状態のままOSが起動しました。よってカウンタは回りつづけ、11分経つと無事にInt1Chで設定したルーチンが呼ばれる、という流れになっていました。NTLDRがなぜ許可状態でDOSを呼んでしまうことにしてしまったのかはわかりませんが、原因はこの人なので IPLwareでInt1Chを使うのなら使った後にルーチンを元に戻しておく。以外に解決策はなさそうです。
AH=03のInt1C(タイマキャンセル)はPCI機の頃には搭載されてるような気配がありました。が、そもそも一回りしたらその段階でIR0(訂正)は禁止にされるコードだと思います。 (13:25追記)こちらにもお返事。中身を確認していませんでした。調査ありがとうございます。
|
BOOTSECT.DOS≠直接起動? かかっくん 2024年10月25日(金) 15:13 |
修正 |
BOOTSECT.DOSわ元のPBR(各OSのIPL)をファイルにした物を讀み枡が、動作の点で直接起動と等価でわナイと 云う事dsk? BOOT.INIでdefault迄の時間を設定し枡が、ずっと待つ(時間指定無し)オプションも有ったやうな? timeout=-1だった哉?此の場合わド〜成増か? jeffpar.github.io/kbarchive/kb/131/Q131603/
> DOS上ではIR0(訂正)の割り込みが禁止になってなければそれだけでカウンタは回るようです。具体的にはIOport02hのbit0を下げると0000:058Aのカウンタが回りました。あげれば止まりますが、NTLDR?IPL?BOOTSECT.DOS?の誰かがこの割り込みを禁止せずに許可状態にしたまま放置してしまっているっぽいですね
IR0を許可した儘も問題デスがCALL先が其の儘ナノも問題のやうな?
確かDOSでわIR0(初期設定値でわ=CPU int 8)で時計(≠RTC)をカウントして居たやうな?CLI(DI)で放置 すると時計が遅れた気がし枡 # ゐゃPCの場合だけだった鴨?さもなくばRTC異常で時計が暴走するワケが(略)
DOSで PROMPT $t $p$g とするとパス名の前に時刻が出枡(窓デモ出るがハードが仮想化されて居るので検証にならん) リターンを推しっ放しにすると連続で秒以下が変わり枡が時計が暴走すると規則性が無く成増 秒表示が出る時計TSRデモ同様でせう
|
FATとフラッシュメモリの和解への道 MCtek 2024年10月25日(金) 15:36 |
修正 |
>これはどうやって探したのでしょうね。
FDSK98で確保したパーティションはRsvdSecCnt=4固定のようだ、ということがわかってきたので、 逆にシリンダと1MB境界に一致する最大容量となる2040MBから、17MBずつ引いて行ってRsvdSecCnt=4になりそうな容量は… と適当に表計算で試算していったら……おぼろげながらに浮かんできたんです。1870MBという数字が。 あとは実際に確保してみて、先頭からダンプして居てほしい場所にIO.SYSが居たので、これでよしといった具合です。
BPB_RsvdSecCnt=4とした理由はいつかお聞きしたいなとおもっていたのですが、理解できました。ありがとうございます。
16:63パラメータでは1シリンダ飛ばして2シリンダ目から2016MB確保してRsvdSecCnt=8にすることで揃えることにしました。 手前味噌ですが未使用クラスタをスキップしてFATパーティションをダンプしたり、RsvdSecCntを調整しながらレストアするツールを拵えたので少し運用が楽になりそうです。
いろいろな容量のカードをSDAのフォーマッタでフォーマットして観察した限りでは、8192s(4MiB)境界にクラスタの先頭が来るように調整しているように見えますが、何かの単位(たとえば消去単位?)が4MiBだとすると頻繁に書き換えられるFATがなるべくこの境界を跨がないようにすれば問題ないようにも思えます。
(Windows10以降のフォーマット機能もパーティションの先頭から8192sの倍数にクラスタの開始を置くようになっていましたが、あくまでパーティションの先頭が基準で、ディスク全体のことは見ていないので、例えばパーティションの開始が63sなどになっているとそのずれを継承してしまいます。原則、SDカードはロゴ付き機器か専用フォーマッターで、あるいは十分に気を使ってフォーマットするべきのようです。)
> FATセクタ数を求める計算式で変に余裕を持たせると、今度はFATのセクタを余らす、つまりFAT域の最後のセクタが使われない状態になります。 FATの末尾に使われない部分があるぶんには特に問題ない(FATエントリ数 >= 総クラスタ数 となっていれば問題ない)ようですが、パーティションのサイズを拡大するツールはFATサイズが大きくなる時に何をしているのかは気になるところです。実データはずらしたくないでしょうし…FATを伸ばしたら潰れてしまう先頭付近のクラスタを後方に移動したりしてるんでしょうかね…。
あまり98に関係ないので余談になりますが、SDカードのBPBの中の値を適切に調整しながら先頭にも複製して、パーティションテーブルにあたる部分は残しておくと、MBR形式としてもスーパーフロッピー形式としても認識するSDカードを作れました。 スーパーフロッピー形式決め打ちでアクセスしてくる機器に組み込む際に、SDA推奨のフォーマットを維持して使えるため有用そうです。
|
IPLが関与するように見えた原因が判明orz KAZZEZ 2024年10月25日(金) 22:05 |
修正 |
NT/2Kのローダーを介してDOSモードを起動した場合でも、タイマーが不具合を起こさない場合がある件について、どうしてもIPLが関係しているとしか思えなかったわけですが、原因が分かりました。 より正確にはパーティションテーブルが関係していました。複数の装置込みで3番目以降の領域から起動すると不具合が出ません。言い換えるとドライブレターがC:以降になったとき、…つまりDOSモード起動であってもWin98の起動ロゴが表示されるとタイマーが正常に戻る、それだけの話でした。orz C:以降でもCTRLを押して起動ロゴが表示されなければ不具合が起こります。あのロゴのパレット切り替えってわざわざインターバルタイマーBIOSを使ってタイミングを合わせていたんですかね…。
なおBOOTSECT.DOS内でI/O操作しているのはエラーで止まるときにbeep音を鳴らすところくらいしか見当たりませんので、結局のところ、タイマーが回りっぱなしになる原因はNTLDRの中にあると考えられます。もちろんPC-98でNT/2k側のOS選択メニューはサポート外(というかFAT32で9x起動阻害の件もあるのでマルチブート自体が保証外)ですから、文句は言えません。
とりあえず今回の件をまとめますと、 ・NTか2kのローダー(OS選択メニュー)でBOOTSECT.DOSを呼んでDOSを起動すると、インターバルタイマーがデフォルトで回りっぱなしになっている。 ・IPLwareでインターバルタイマーを使った後は、割込みベクタ07にFD80:0936を設定しておくべき。 ・恐らくはNTLDRがOS選択メニュー(PC-98版では保証外)にちゃんと対応していないため。 …ということになりそうです。
> IOport02hのbit0 なるほどです。とりあえず今回は0000:058Aを見て判断していますが、そちらがより本質的な事象みたいですね。割込みマスクのI/O 0002と000Aについては、DOS起動時の環境次第で、INT08以外にも初期値にぶれがあるようです。気付いたのはI/O 0002のbit2(INT 0Ah=VSYNC割込み?)と、I/O 000Aのbit7(INT 17h)のマスク状況について、環境によって初期状態が異なるようです。後者については手持ちの資料で「ノイズ(GND)」となっていましたが、どういう意味でしょう?
> timeout=-1 おっしゃるようにカウントダウンが出なくなりました。しかしDOS起動時点でインターバルタイマ活動中という結果は変わらないようでした。 やはりメニューのカウントダウンは関係無いんじゃないかと思います。カウントダウンさせない方法としてはtimeout=0にする手もありますし、そもそも選択肢をDOS一つだけにしてWindowsを起動させないBOOT.INIにする方法もあります(そうすればメニュー画面自体が出ません)。
そういう意味では必ずしもNT/2000をセットアップする必要もありませんでした。BIOSを持たないSCSI I/Fから2000を起動する方法の要領でNTのローダからDOSを起動する最低限のファイルをコピーするだけで試せます。 最初にDOS/9xで起動パーティションを作成し、DRVCPY/Bでブートセクタをどこかに退避。NT/2000からそのパーティションをフォーマットしなおし、NTLDRなど必要なファイルコピーして、退避しておいたDOSのブートセクタをBOOTSECT.DOSとして使い、DOSを起動するBOOT.INIを書くだけです。 前述の通り、9xのロゴが表示されると不具合が解消される様子ですので、不具合を確かめる場合はMSDOS.SYSで強制的にメニューを出す設定にしておくと良いかもしれません。
> AH=03のInt1C(タイマキャンセル)はPCI機の頃には搭載されてるような気配 AH以外の必要なパラメータが分からないせいもあるかもしれませんが、適当に試す限りだとタイマーは止まらない感じでした。
|
98でのフォーマットの悩み まりも 2024年10月26日(土) 11:47 |
修正 |
MCtekさん SDやCF用のアラインメント調整関連ツールを作っていらっしゃって心強いです。本来はフォーマッタが対応すべきところなんですが、結構わからない点が多いのですよね。 [1]パーティション先頭セクタを境界に合わせる [2]FATのセクタの先頭は境界に合わせる(必要度高い?) [3]FAT12/16ではルートディレクトリのセクタ先頭を境界に合わせる必要があるか [4]データ領域の先頭は境界に合わせるのは多分必須 これら全部を満たすフォーマットをしようとすると気が狂いそうになるので、どれかだけ守ればいいと思うのですが、Windowsが行うフォーマットを観察すると[4]は必須かなという感じです。拙作FDSK AT版では[2]も対処しましたが、これが可能になったのは、Windows Vista以降に先頭パーティションがオフセット800hセクタ番地かつ後続もそれというルールになったおかげであって、それ以前の3Fhかつ後続はシリンダ単位境界のルールでは、どうにも対応が難しいところでした。そのくらい難しい問題なので、[1]が成り立っていないパーティションだと、Windows10以降のフォーマット機能も結局うまく対応できないみたいですね。
>MBR形式としてもスーパーフロッピー形式としても認識するSDカードを作れました 過去にこんな議論をしたことがあります。どうもWindowsは両形式を曖昧に扱っているのですよね。 ttp://ematei.s602.xrea.com/kakorogu39/リサイクル掲示板202002.htm 汎用スレッド2020年2月 パート4 スレッドの「SFDかつFDISK形式(AT)」ほか
98のWindows 9x上でフォーマットしたらPC/ATで認識してもらえなかったという情報をときどき目にしますが、おそらくはスーパーフロッピー形式でなされてしまったためでしょうね。リウさんが強調しているように、今どきフォーマットするなら、古来より伝わる標準的手法は一切放棄して、「IDE-LBAパッチ実施後にDOS上でFDSK98一択」かもしれません。
|
ノイズとして扱いGNDにする理由 かかっくん 2024年10月26日(土) 21:49 |
修正 |
> C:以降でもCTRLを押して起動ロゴが表示されなければ不具合が起こります。あのロゴのパレット切り替えってわざわざインターバルタイマーBIOSを使ってタイミングを合わせていたんですかね…。
時間を計る(或いわ待たせる)モノは386/486世代でわ 8253 Vsync RTC(一部機種のみ割り込み有り) nop等のloop 位しか有馬せんから8253を遣うのわ一般的でせう
> ・IPLwareでインターバルタイマーを使った後は、割込みベクタ07にFD80:0936を設定しておくべき。
多分NTLDRは元の値を保存してカウントダウン処理後に戻して居ると思われ枡からIPLwareナシでNTLDRが 異常に成らなかったのなら元と同じ状態に戻すのが筋デスし、元々異常が出るなら何処かiretのアドレスに しておけば動くでせう
>> IOport02hのbit0 > なるほどです。とりあえず今回は0000:058Aを見て判断していますが、そちらがより本質的な事象みたいですね。割込みマスクのI/O 0002と000Aについては、DOS起動時の環境次第で、INT08以外にも初期値にぶれがあるようです。気付いたのはI/O 0002のbit2(INT 0Ah=VSYNC割込み?)と、I/O 000Aのbit7(INT 17h)のマスク状況について、環境によって初期状態が異なるようです。後者については手持ちの資料で「ノイズ(GND)」となっていましたが、どういう意味でしょう?
ノイズ(GND)について理解するにわ8259Aの仕組みを知る必要が有馬す。Wikiの8259の項にさらりと有馬す ja.wikipedia.org/wiki/Intel_8259#スプリアス割り込み www.renesas.com/ja/document/dst/711831 資料に依ってわ、初代AでスレーブIR7がシステムタイマと有る物も有馬す。多分A2以降も同様でせう # PCでわIR7はLPT(のACK)、スレーブIR7がセカンダリIDEで後者は問題ナイのけ?
|
タイマーの話題が出ましたのでついでに リウ 2024年10月26日(土) 23:38 |
修正 |
下のリンクはgeocitiesですのでwebarchiveを使ってください。 ttp://www.geocities.co.jp/SiliconValley-Bay/2776/win981.htm#%E6%A9%9F%E7%A8%AE%E4%BB%95%E6%A7%98%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
逆アセンブルしながら原因追求していたのですが、EPSON機はARTICフラグ 0000:045Bhのbit2を立てないようです。(手元のPC-586MVにはIO 5ch 5ehの機能はしっかりあります。EPSON製IDEBIOSは使いまくっています。) Windows98はCPUチェックでPentium未満だった場合66MHz以上かどうかの計測をやっています。その際にARTICが使えれば使うのですが、フラグが立っていないと8253(相当のもの)を使うことになっていました。このときに精度が悪すぎるので0除算をしてしまうようです。今更ではありますがLBAパッチの中にARTICが使えそうならばフラグを立てるプログラムを追加しておきました。
手前味噌ですが色々書きました。 www7b.biglobe.ne.jp/~drachen6jp/EPSON%E6%A9%9F%E3%81%ABWindows98.txt
それにしても実機が一つあるだけでたくさん遊べました。お高くて買えそうになかったので提供してくれた方には再度感謝です。
|
307.2kHzタイムスタンパとウエィト まりも 2024年10月27日(日) 9:26 |
修正 |
ARTICはI/Oの5Ehまたは5Chをワード幅で読む機能ですが、いっぽう5Fhにバイトで出力してウェイトを取る機能もあります。これらの機能を両方持っている(初代01BX以降)か両方とも持たない機種(01FA以前)かのどちらかに分けられるであろうと思っているのですが、片方だけ持つ機種はあるのでしょうか?98GSや01UF/UR/USあたりですかね?system共通域0:45Bhのbit 7,2と両方用意されているのが気になります。
なおH98は両方の機能を持っているけどもsystem共通域0:45Bhのbit 7,2どちらも0という例外です。EPSON機世代相当ですね。Windows95インストーラはH98フラグでも参照しているのでしょう。
|
フォーマッターの悩み… MCtek 2024年10月27日(日) 10:15 |
修正 |
まりもさん お返事ありがとうございます。
フォーマッターでRsvdSecCntを指定できたらいいのにというところでは、mkfs.vfatに-RオプションでRsvdSecCntを指定できるようでしたので試してみましたが、指定した数にはならず32の倍数になってしまうようで、任意のRsvdSecCntを指定することはできませんでした。 mkfs.vfatはパーティションの外側のことは一切見てくれないので、HiddSecにも0を入れてしまい、あまり理想的な動作ではありません。
[1]は98環境ではシリンダ境界や互換性の問題から無理強いしがたい点がありそうです。 FAT以外のファイルシステムでは先頭が合えば問題ないものもありますが、FATに限っては先頭が合っていてもその後の可変長のものでずれるため、パーティションの先頭がアライメントされている必要はないと考えています。
[2]や[3]に関しては、FATの仕様上、データ領域の先頭の前にFAT(あるいはFATとRDE)の末尾が必ず接しているはずなので、無理に変更できるものでもないですし、末尾(=データ領域の先頭)が境界に接しているかは気にしても、先頭については気ににしなくてよいのではないかと思います。 ただし、SDAのフォーマッタの挙動を見る限り、FATが4MiBブロックを跨ぐ数が最小になるようにしているように見えます。 FAT16のFATサイズは十分小さいので、4MiBの境界を跨ぐことは稀と思いますが、跨いでいる場合は警告を出すか、先頭シリンダの変更を促してもよいかもしれません。
[4]に関しては、データ領域の先頭のオフセットがクラスタサイズの倍数に一致していれば、少なからずクラスタが境界を跨く状況は発生しないので良いのではないかと考えます。
試しに、8:17や16:63のパラメータで、データ領域の先頭が8192sの倍数から始まるように確保しようとするとなかなかこんがらがった値になりました。 RsvdSecCntが大きすぎると正しく動かないFSドライバがないとも限りませんし、現状は[4]への配慮がなされていれば十分なのではないかと考えています。
>古来より伝わる標準的手法は一切放棄して しまってもよいとは思いますが、それは「仕組みを理解したうえで使うなら」という但しがついてしまう点が悩みどころです。 8.4GB壁機との行き来も含めたポータビリティであったり、「ポン付で動く」利点とのトレードオフになってしまう点で、互換性に最大限配慮した設計者の意図も無碍にはできないところです。
MBR/SFDハイブリッドの話は以前にも挙がっていたのですね。まさにこの話でした。 どちらで認識しているかわからないというのは、時に厄介ですね。 BUFFALOのCFは出荷時にスーパーフロッピー形式でフォーマットされているようです。 また、アウトレットで買ったSDカードがスマートフォンで認識しないと思ったらスーパーフロッピー形式でフォーマットされていたということもありました。 今は特別な事情がない限りスーパーフロッピー形式は使わないほうが良いのかもしれません。
|
シリンダ境界はDOS6迄でわ厳格でわナイ かかっくん 2024年10月27日(日) 17:35 |
修正 |
> [1]は98環境ではシリンダ境界や互換性の問題から無理強いしがたい点がありそうです。
以前の調査によりみいそDOS3.3〜6.2・えぷDOS4〜6.2とFreeDOS(98)の2020年のバージョンに限ってわシリンダ 境界厳守でなくても認識し起動も出来る事が判りますた。但し(HD)FORMAT(HD).EXEでわ不正なパーティション マップと見なされ初期化を強いられる(中止すれば引き返せる)等、互換性が低く成増
当時の調査でわ複数の領域を同じシリンダに配置して居枡(LBAのダブり無し)が、全ての領域でシリンダを共有しない (各領域の先頭・末尾のH:Sが0:0/MAX:MAXでナイだけ)場合は調べて居ませんですた。急遽調べ枡
次に窓9xわ950と95a(=DOS7.0)に限り認識し起動できるやうデス。FDISKわ未調査。FORMAT.COMは動作し枡 95B以降(=DOS7.1)でわ認識しません。IO.SYSが小さく成って居るので機能を可成り削いで居る模様
詳細わ過去ログを参照
OS/2やNT系・BASIC等、他のOSわ未調査デス。BASICわ入手難な6.3(PS98-4001)が必要ナノで需要も僅かでせう 追加調査が要るのわNT系と雲丹x系dsk?
|
両方のFATを同一ブロックに容れるか分けるか かかっくん 2024年10月27日(日) 17:51 |
修正 |
次にFATについてわTFAT対応OSでない限り両方のFATが同時に更新され枡から同一消去ブロックに有っても無問題でせう # 窓CE始めモバイルOSがTFAT/TexFATに対応。恐らく窓ぽんや窓モバイルも対応でせう。PC用窓は対応せず # 安堵ロイドわ不明
逆に両方のFATのブロックを分ける方が困難でせう。分けた方がベターでは有馬すが。
尤も、消去ブロックと書き込みページの関係が固定でなければ此の前提わ卓袱台返しに成増。詰まりSSDでわ 成立しないと云う事デス。但し消去ブロックも大容量デスが
|
シリンダ境界 リウ 2024年10月27日(日) 17:54 |
修正 |
FreeBSD/pc98の11.4はシリンダ境界を守っていなくてもマウントできるようにしておきました。が厳密に覚えていませんが、Release版では守っている必要があったと思います。まあそんなややこしいことはしないのが一番です。 DOS7.1で使えないというのはあまりにも厳しい制限です。 5:00追記 伝家の宝刀スリープパーティションがPC-98にはあります。
|
シリンダ境界でない事の意義 かかっくん 2024年10月27日(日) 18:29 |
修正 |
逆に窓95B以降で隠しておきたい(認識させたくない)領域をシリンダ境界からズラしておく事で、ノータッチに出来枡。 ドライヴレターは消費され枡が。<成程スリープ領域にわ振られませんね、デモ他のOSと切り替える度にアクティブと 切り替えるのも(略) # 尤もMBRのHDDを98の窓9xで遣うだけなら勝手に認識するので余計な手間わ不要。OS起動用ストレージ # だけの考慮デモ可 後わNT系での挙動がド〜かデスが、NT系こそMBRデモ良い(NTLDRさえ98形式なら本体わNTBOOTDD.SYSで MBRも起動時に認識出来る?)気が? www7b.biglobe.ne.jp/~marimo9821/w2kwxp/w2kfdboot.html
因みに此のやうなパーティションを意図的に造るのが目的ナノでなく、MBR形式でフォーマットされたストレージを 如何にして認識させるか?に主眼を置いて居枡。 認識しない領域わDOSのDRVを書いてDOS互換モードで認識させるかでせう
|
|