戻る
***** 返 信 *****

 98システム解析スレッド2025年12月  まりも  2025年12月1日(月) 0:10
月が変わったので立てておきます

 Ce2/Cs2のROM  まりも  2025年12月1日(月) 0:22
先月スレッドの最後
>Ce2/Cs2ではオンボードSCSIも無くなりましたので4Mbも使われていないような気がしますが
Cs2のマザーボードにはuPD27C4000が載っており4Mbitです。ただし同時期の機種はどれも4Mbitが載っていながら半分しか使っていないので、Cs2/Ce2でもそうかもしれませんね。読み出すことができれば調べてみます。

 IPL1前パラメータ型BIOS  リウ  2025年12月1日(月) 8:44
PCI版には大きなバグが含まれていました。
KAZZEZさんには大変な手間をおかけして申し訳ないです。

ブートROMが配置されている場所が書き込み可能な状態になっておらず、かつパラメータ置き場をAT互換機用コードの位置を再利用、という状態で強制的にBIOSに渡すSが00になっていました。その状態でLBAからCHSへの計算も行うので0除算直行でした。しかも0除算回避ルーチンを設置しておらず逃げることも不可能な状態でした。まったく動くわけがありません。

そこをまずは修正しています。Int1FのAX=CD02h、BH=対象セグメントの上位アドレス、BL=20h,DX=0という非公開命令をLHA521のROMが使っていたのを見てそれをそのまま写しています。対象セグメントが(PCIのRAMとして)書き込み可能になります。とっても便利ですが今まで目にしたことがないのでどこにも解説は書かれていないと思います。
[13:00追記]
CanBe系列にはなさそうです。Cr13、Cx13,Nr166/Xに存在せず(ただしこれらにはPCIカードを刺せないのでそんなに影響なし)Xt13、Xb10、V166_D2には存在
残念ながらXfにはありませんでした。430LXなEPSON機にも調べてすらいませんがないと思われます。
[13:20追記]
勝手RAMにする方法
AX=CD01 BX 同じでInt1Fを呼ぶと返事が帰ってきます。AX=CD01のままだと未実装、0000で帰ってくると実装されているはず、DX=1で帰ってくると書き込み不可、DX=0で帰ってくると書き込み可の状態っぽいです。
それを呼んだ後にAX=CD02でInt1Fを呼ぶと勝手RAMにはなりそうです、がやはり機種依存なので全機種で使えません。結局IOを叩くことになるのなら便利なプログラムとしては使えそうにないです。

> card at 0:13:0 set
> PCI mechanism1 used
> card found at 0:13:0
この表示がされるということはカード側がまともにIOを設置できておらずIOがFFFEh扱い、という状態です。Intelsat /editやPCILIST -bでも同じようにFFFFと表示されるか無視されてしまうと思います。
その状態のときにあれやこれやをするルーチンは入れていますが、まずはPCI版は完全にバグっていました。またIPLWare版で止まるのは無理やりのあれやこれやがうまく行ってない可能性が高いです。余計なことをせずとも正常反応してくれる状態でないとうまく行かないかもしれません。
IPLware版を使ったあとだけこうなってしまう、ということはそのあれやこれやがおかしいという話になりますので、やりなおします。

そのバグつぶしの際にちょっとだけ気づいたこととして
div0回避ルーチンですが、div ecxで飛んできた場合には3byte進める必要があります。実際に使われることはありえないと思います。(私のBIOSはやらかしました。)余計な判定を増やすとメモリをたくさん食べるのでよほどのことがないかぎり今のルーチンで十分と思いました。

SMIとSMMの勉強を始めました。とんでもない機能ですね。

 そんな便利なファンクションが  まりも  2025年12月1日(月) 11:31
>Int1FのAX=CD02h、BH=対象セグメントの上位アドレス、BL=20h,DX=0という非公開命令
これは滅茶苦茶便利な機能ではないですか!! よくぞ発見されました。機種依存部分のコードを大幅に簡略化できます。問題は9821Xf、Xa初代の頃の機種にも実装されているかどうかです。場合によってはCfも。ちなみにPCIの旧い機種ではCDxxのファンクション、たとえばIRQ routing取得ファンクションなどが実装されていません。なおやはりRAM化するブロックはintel chipset機以外でも16KB単位でしょうかね? そもそもがundocumentなチップセットであるRvII26や山猫でも試さなきゃ。

SMI,SMMのことは全然知りませんが、以前、電源を自動で落とすプログラムをAPM BIOSではなくI/Oだけでやろうとして、勉強のためファンクション9Axxをtraceしました。ところが突然知らない町に旅に逝ってしまい、こりゃなんの資料もなしに解析するのは無理、と思ったことがあります。
モデムring電源ONの機能やタイマー電源の機能もSMMつながりでしょうかね。あとは何が・・・気になっているのは、PCI機のマザーボードにあるserial EEPROM 24C01へのアクセスです。

【13時追記】このファンクション int 1Fh, CD02hをいじってみました。
まず元々メモリに接続されている状態でないと機能しないようです。なので既にBIOS域に何かがいる状態でないとダメです。勝手RAMを作るときには使えません。BHとして使える範囲はC0h〜DChまでです。残念ながらF0hやE8hという指定は無効でした。まあ拡張BIOSが自身で使うための機能なのだから、そういう制約はあって当然でしょうけども。

シャドウメモリが予め出ていれば、DX=0でRAM化、DX=1でWrite Protected RAMになるようです。ちなみに当該セグメントのPCI PAMのWrite可bitだけを立てる操作をするようで、「CバスのROMが読めるけど本体のシャドウメモリに書き込める」という状態になります。シャドウメモリに読み書きするにはPCI PAMのread可bitを立てないといけませんが、DX=0の機能では為されませんし、DX=1でもPCI PAMに何も変化が起きません。write可bitを引っ込めるだけのようです。

DX=2つまりbit1を立てるとキャッシュが有効になるようです(intel430系チップセットの場合)。この他のbitやBLの他のbitのことはまだ調べられていませんが、適当にやると結構ハングアップしますね。しかもD0を操作仕様とすると道連れでD4に副作用が及ぶ(その逆もしかり)という問題もあるようです・・・ちゃんとトレースで調べるべきかも。

【17時追記】結論として、このファンクションは使い物にはならない感じです。PAMの上位と下位の4bitの片方を設定しようとするともう片方がメモリの接続から外れてしまいます。またBLやDXの使ってなさそうなbitをいじると勝手にキャッシュ可にされてしまいます。これってバグなんじゃないですかねぇ・・・ LHA-521はよくこれで動いていますね。

 ROMを写す際に  かかっくん  2025年12月2日(火) 0:32
CバスROMが讀めてシャドウRAMに書けるモードってRAMイヒでROMをシャドウRAMに写す際に
遣えそーな?実際遣って居そーな?
; (此のモードに設定する)
; --- CバスのROMから同じアドレスのシャドウRAMに写す
; ES:DI = DS:SI = BX:0 に設定する
mov BX,imm16 ; BB ** **
; mov BX,[mem16] ; 8B 1E ** **
mov DS,BX ; 8E DB
xor SI,SI ; 31 F6
mov ES,BX ; 8E C3
xor DI,DI ; 31 FF
mem16:defw segm ; ** **

; ES:DI = DS:SI = [mem32] に設定する
lds SI,[mem32] ; C5 36 ** **
les DI,[mem32] ; C4 3E ** **
mem32:
defw 0 ; 00 00
defw segm ; ** **

; 転送量の半分を設定してCバスのROMから同じアドレスのシャドウRAMに写す
mov CX,imm16 ; B9 ** **
; mov CX,[mem16] ; 8B 0E ** **
rep movsw ; F3 A5
mem16: defw **** ; ** **
; ---
; (R/W共シャドウRAMに設定する)

まぁ今日でわ多くの場合要パッチに成増から別の位置に写してパッチして移すやうでせう
あとバンク切替を平屋に組み替えるとか、バンク切替を同じ位置への書き換えにする(ソフトウェアEMSの
やうに他の位置から書き写す。WBキャッシュと相性良いが実行されない無駄な部分もキャッシュされる)
とか?
# UMB使用等でV86ならページングで容易に切り替え出来る
# PCI,PnP含めバンク切替の全BIOSをV86のページングで切り替えるのも技術的に可能
# 但しリアルモードに戻すITFに限り非推奨
# まぁV86ならITFへのパッチも(286→386+アクセラ機であっても!)フカ能でわナイのデスが

Ce2,Cs2のμPD27C4000わ大小有って(SOPのわμPD23C4000鴨)片方が漢字ROMだとか?
# BIOSも漢字ROMも2MのμPD2[37]C2000で足りそーな?

 手数は減るけども  まりも  2025年12月2日(火) 6:55
>ROMをシャドウRAMに写す際に遣えそーな
読み出して同じところに1回書くだけですから手数を減らすことができますが、ソースコードの可読性は悪くなるというか、「これって何無意味なことやってんだ?ハテナ」なります。そして、パッチ当てがある場合は、途中で終了するわけにゆかなくなります。

別のところに一旦コピーしてからROM/RAM変更してコピー戻しをする普通の方法の方がいいです。コピーした方にパッチを当てれば、パターン不一致などの理由で途中で放棄しても問題ありません。

 ほぼ私信  KAZ.K  2025年12月4日(木) 8:55
だいぶ前に某所のポチ枝に書いていたんですが、埋もれて気付かれていなかったようなので、余計なお世話かもとは思いつついちおう転載しておきます。読み違いは有り得るのでその辺は適宜ご注意ください。

なお元の枝で言及している TowerNMI/TowerSMI や TTwT の現物はhp.vectorと共にどっかいってしまいましたが、ひとまずweb.archive.orgには確保されているようなので、必要でしたら適当にそちらを当たってください。


A08/A0A近辺
A08 &01 ←→ SMI配送マスク
A09 ←→ レジスタアドレス(以下[]表記)
A0A ←→ レジスタデータ

割り込み配線の流れ

トリガー[03]、電源スイッチ、SERR#、テストパッド等
↓ \
入力マスク[x0]\
↓ \
ラッチ[x1] A09/A0A
↓ /
出力マスク[x0]/
↓ ↓
↓ SMI→ A08マスク → CPUのSMI#入力

NMI→ システムポートC(マスク+ラッチ) → 50/52マスク → CPUのNMI入力

チップセットその他バスのNMI出力


//以下 2023/01/24 (Tue) 08:49:17 付投稿より。スイッチ=電源スイッチ。

--------
[x0] ←→ 入出力マスク 0=入力無視+発射保留
[x1] ← 発射(待機)中ステータス
[x1] → 0=発射待機解除 1=nop
[0x] SMI
&80 [03]&01 手動発射
&04 たぶんSERRあたり
&02 [32]=1 ← スイッチ
&01 たぶんMMDUMP
[3x] NMI
&02 [03]&02 手動発射
&01 [32]=2 ← スイッチ
--------
[02] &02 ← スイッチ入力#
[32] ←→ スイッチの接続先選択
0or3 無接続っぽい?
1 → SMI (&02)
2 → NMI (&01)
[03] → 手動発射トリガー
&02 → NMI (&02)
&01 → SMI (&80)
--------
[10] ← たぶん電源EC
&02 EC DATA WRITE READY
&01 EC DATA READ READY
[11] ← EC DATA READ ???
[13] → EC DATA WRITE
80 06 00 00 初期化っぽい
80 07 00 02 電源断前準備?
80 01 00 00 電源断
--------
[20] ???
--------

補) たぶんSERRあたり: チップセットにメモリECCエラーが記録されていたらNMIを発射するように書いてあるように見える。チップセットがSERR#→SMI送出設定になっている場合でも従来の挙動を維持するためのshimっぽい。ただし少なくともXvではSERR#→NMI送出設定になっているのでこの機構が実際に働くことは無さそうに思える。(Raというか440FXだとSERR#からNMI/SMI#への接続は本来PIIX3の領分らしくちょっとはっきりしない)

補2) たぶんMMDUMP: SHIFT+CTRL+STOP+スイッチSMI と等価。

補3) [20] ???: クロック倍率設定の読み取りポートその他。詳細未読。

   KAZZEZ  2025年12月5日(金) 1:54
RaII23でBIOSの出現しなくなったVT6421の件ですが、AT互換機に差したら普通にBIOS認識しましたので、ROM内容が壊れたわけではなさそうです(疑ってすみません)。そしてまたRaに戻すとBIOSが出現せず起動阻害も起こりません。PC-98用BIOSの用意されていないPCIボードであればそのほうが都合がよいですから、何故そんな状態になったのかは興味深いのですが、全然わかりません。(汗
前述のようにRaをスーパーリセットしても直らなかったわけですから、VT6421にアクセスした際にボード側の設定が変わったとしか思えないのですが…。

HPT368についてはIwillのウェブアーカイブにも残っているアップデータ
web.archive.org/web/20020606025014/www.iwill.net/support/drivers/raid109.exe
を試す限り、AT互換機のDOS上でBIOS更新できそうなことは確認(といっても同じバージョンの上書きしか試していませんが)。しかしPC-98上で実行するとハングするようですので、万一にもAT互換機上で起動できなくなった場合の対策を考えておく必要がありそうです。
# ところで同じバージョンの上書きと言っても、PCIXROMで読み出したBIOSはきりの良いサイズで末尾にサム合わせがありましたが、アップデータ付属のBIOSファイルはサムが0になっておらず、ファイル末尾が中途半端なところで終わっておりサイズが小さいです。どちらを書き込んでもAT互換機上でBIOSは動作しますから、BIOS更新プログラムが勝手にサム合わせして書き出しているのでしょうかね。

 お返事  リウ  2025年12月5日(金) 3:18
おそらく私宛と想像しますので
KAZ.Kさま
とてもわかりやすい解説ありがとうございます。A08系列IOの1級資料として保存しました。ちょろっとITFを読んだ感じのものと一致しておりますのでIntelチップセットではこれをヒントにあれやこれややろうと思います。

VT6421のROMについて
手持ちのカードをinternetで検索すると、ROMが載っているカードと別リビジョンのどうみてもそれを省略したタイプのものがひっかかりました。やはり私の手持ちはROMへの配線すら省略されてしまったようです。
ですが、たまたまPCILIST-bを見たときにROMが(形の上では)前に出てきていました。資料を読むとconfig spaceの68hですが、そこや69hの値を弄くると出たり消えたりするようです。うちのカードは配線すらされてないようで何も見えませんがそのような気配でした。叩いてみると出てくるかもしれません。何かの解決を示せているわけではありませんが情報として

 追試した結果…  KAZZEZ  2025年12月6日(土) 0:58
リウ様情報ありがとうございます。
結論から言いますと、今のところ、どうも80芯ケーブルにHDDが繋がれているとBIOSが出現しない状態になっているようで、HDDを外せばPCILISTやPCIXROMはBIOSを見付けてくれました。しかしPCILISTのMEMはNoとなっており、なぜか起動阻害も起こりません(他にPCIとCバスには何も差していません)。ちなみにPCIXROMで読み出した内容は以前のものと全く同一でした。

その状態で該当PCIスロットのPCIレジスタ68h/69hを適当にいじってみたところ(資料が無かったので本当に適当ですが)、PCIXROMでBIOSが検出されなくなったり検出されたりといった挙動は確認できました。しかしIDE-HDDを繋いでROMが引っ込んでいる状態では68h/69hを適当にいじってもROMは検出されませんでした。

なんとも中途半端な結果ですが、とりあえずヤドカリブートで試用すべきのようです。
[追記] SATA1にSSDを繋いだら起動阻害が起きましたので、BIOSが機能したのかもしれません。もしかしてROM内容に関係なく最初からそういうハードウェア仕様だったのでしょうか?? AT互換機でも何も繋いでいないときはVT6421のBIOS表示が出なかったような気もします。しかしPC-98ではIDE-HDDと併用したらBIOSが出現しないというのも変ですが。

 40芯ケーブルの場合?  かかっくん  2025年12月6日(土) 2:09
全素通しの40芯ケーブルで試すとド〜成増か?

 続き  KAZZEZ  2025年12月6日(土) 20:26
> 40芯ケーブルで試すと
ご助言ありがとうございます。そういえばAT互換機で試したときは2.5インチ変換ケーブル経由のCFでしたので全結線相当だったかも?と思って替えてみましたが、同様のようでした。
結論を言いますと、どうもPC-98側でテストに使っていたMaxtorの40GB(ICCFIXで31.5MBに制限)との相性のようでした。なぜか件のHDDをIDEのまま繋ぐとBIOSが引っ込むようです(SATA変換して繋ぐと起動阻害)。
VT6421に2.5インチ変換ケーブルで500MBのHDD(IBM)を繋いだところ、普通に起動阻害になりました。
また(IDEの)CFアダプタでCFを試したところ、マスタ側にCFを差していると起動阻害、スレーブ側だけに差すと起動阻害は起こりませんでしたが、DOS起動後に(MEM=Noですが)BIOSの存在はちゃんと検出されます。
SATAにSSDを繋ぐ限りは1/2どちら側でも起動阻害になるようでした。
いずれにしても件のHDD以外でROMが引っ込むようなことはなかったと考えられますので、今のところHDDとの相性としか思えません。
[23:30追記]AT互換機でも、件のHDDは(オンボードIDEでは認識するのに)VT6421上では認識しませんね。これが繋がっているとSATAに繋がれたSSDまで認識しないのも同様でした。

先月iplbios版を試したときに件のIDE-HDDでしか動作を確認できなかったことも、もしかしたらBIOSの無いVT6421で開発されたことで、逆に相性が良かったのかも?

----10日01:43追記----
HPT368のアップデートプログラムLOAD.EXEがPC-98で動かない件について。軽くデバッガで追ったところ、どうもAT互換機のI/O 0x61(NMIの状態を示すらしい)bit4を使ってリフレッシュタイミングを計るルーチンから抜け出せなくなっているようでした(PC-98ではハイレゾマウスポートだそうで、ノーマル機ではFFのまま変化しないようです)。機種依存でタイミングを計っているとなると移植するには目的を調べた上での代替ルーチンが必要ですから、簡単ではなさそうですね。さすがにプログラム全体を解析するほどの元気はありません。

もっとも、どるこむのログを見たところ(ABIT HotRod66での話ですが)書き込み成功の表示が出てもAT互換機で起動しなくなってしまったケース(ROM種別の選択を誤ったらしい?)もあるそうですので、そもそもAT互換機で書き込みに成功していたのかどうかも定かではなかったりします。
結局のところHPT368(VT6421もそうですが)のBIOSを自由にテストするにはROMをソケット化改造して別の手段で書き換えられるようにするしかなさそうです。当面はiplbios版かヤドカリブート版でテストするのが無難そうですね。

> Cs2のマザーボードにはuPD27C4000が載っており4Mbitです。ただし同時期の機種はどれも4Mbit
これもログを調べてみるとそのような話が見付かりました(すみません)。
対応するROMライタが限られるそうで。手持ちのROMライタも40ピンソケットは付いていますが、最大でも1Mbit(および一部の2Mbit)しか対応していようでした。
REIでパッチしたBIOS RAMデータを元のBIOS ROM(の該当個所)に(ROMライタで)書き込めば540MB制限を解除できるという話もありましたので、EXIDEABでも同様のことができないかと考えていましたが、大人しくSCSIボードか何かで試すのが無難のようです。

----20:00追記----
ふと思ったんですが、NoAtBootのAT互換機版みたいなものがあれば話は簡単になる気がするのですが、そういうことは可能なのでしょうか? AT互換機でPCIボードのBIOSアップデートに失敗して差したままだと誤動作で起動しなくなった場合に、BIOS ROMは現れていても実行されない状況で起動できるようにできれば、再度AT互換機用のアップデータが実行できるので安心なのですが。

 ハード的にROM無効/有効にした方がいいかも  まりも  2025年12月11日(木) 0:18
>NoAtBootのAT互換機版みたいなものがあれば
できないことはないと思いますが、基本的にBoot ROMアプリを作るということになります。98と同様です。特定のデバイスのブートを阻止するというのは作ったことがありませんが、ACPI を書き換えるというのは作ったことがあります。国内では注目した人はほとんどなかったようですが、Mac OSX86を実行可能にできたという報告は頂いたことがあります。
ttps://www7b.biglobe.ne.jp/~marimo9821/pcat/acpimod.html
でもブート阻止だけならROMのChipSelectを切り離す改造(ON/OFFスイッチもつける)でもした方が簡単です。ソフトを作るなんて1000倍面倒です。なおHPT36xは汎用書き込みツールが適用できます。↓の対応デバイスベンダIDを追加するだけです。I/OアドレスやROMアドレスがまともに現れた時には98から書き込みできたことはあります。
ttps://www7b.biglobe.ne.jp/~marimo9821/pcat/pciflash5.html

ところでそういえばうちにはCyrixの6x86があるなと思い出してCPUジャンク箱から出してきました。MIIのご先祖様に当たるものです。Xa7とかAnの頃に試したわけですが、後に出たK6には性能と互換性で大差をつけられたため使わなくなりました。ATX電源搭載の9821には載せたことすらありませんでした。リウさんがMIIのことについて呟いていたのを見て、それも思い出しました。Cx686をXa13/Wに載せてみるとやはり電源ボタンで電源遮断ができませんね。SMMの仕組みが異なるようです。Cx686のデータシートっぽいものをネットで拾ってみると、確かにIntelのとは違っていますね。BANK1後半のSMM用コードを改造すればいいのでしょうけど、大変そうです。そこまでしてCx686を使う気も起きません。

Cx686のキャッシュ関連レジスタもいじれば何かメリットがあるかもしれませんが、基本的に載せるのはPentium機なので、キャッシュの設定を変更しなきゃならないところもないような気がします。

名前
題名

内容
画像1
画像2
画像3
画像4
修正キー (英数8文字以内)