PC-9801RA2のCBUSについて 前提知識 CBUSは16bitデータバスで24bitアドレスまでのアクセスが可能なCPU外部バスです。 これがPC-9801VX以前と以降で一度仕様変更がありますが基本的にはその後ピンの配置は変わっていません。 利用されていた期間がそれなりに長く互換性に関しては非常に繊細に対応されていると思うのですが 現実的には完璧ではありません。例えばメモリボードなどはPCI機ではまず使うことができません。 さてここでのメインの話は100ボードです。この板のASPIドライバはAIC-6360石のDWORD転送機能を使っています。 そのためこのASPIドライバは286機では使用不可です。ではそもそもCBUSに対してDWORDの転送は可能であるのか? という話題です。 少なくとも手持ちのRA2ではCBUS->CPUの向きでは不可のようでした。CPU->CBUSの向きではできているようには見えます。 CBUSとCPUの間にバッファがあって一時的に2byteを溜めておけるのでしょうか?回路を読めないのでこういったことがわかりません。 元々286が搭載されていた機種にCPUアクセラレータを載せて32bitCPUに変更できても似たようなことが起こると予想しています。 以前リサイクル掲示板でi430NXを搭載したPC-9821Xaでおかしい事象も起こったことを報告しました。 その時はCPU->CBUSの32bit転送をした場合に上位バイトが化けてしまっていました。 チップセットとCBUSの間のどこかで化けていると思うのですが原因はつかめませんでした。 こういったことから必要性に駆られてDOS用ASPIドライバ、Win95用ドライバ、WinNT3.51用ドライバにWORD転送に変更するパッチを当てました。 この文章は当時まとめていなかったその情報を公開するものです。 なおBIOS動作中はDWORD転送を行わないので286の16bit機でも100ボードは動作可能です。 (http://ematei.s602.xrea.com/cgi-bin/bbs39_ken/bbs39.cgi 初代X MATEのSCSIについてスレッド参照) 手持ちでは動作していますが、CBUSのSCSIボードは100ボードでなければいけない、という条件がなければ 古い機種には外部DMAバスマスタのボードの方がおすすめです。 今回RA2にNT3.51をインストールするに中って100ボード以外では遅すぎて?動作してくれない、という問題がありましたので取り組みました。 Win98やNT4.0のドライバは解析していません。それらを使うような機種ではCBUSとCPU間のDWORD転送は可能であろう、との腹づもりです。 i430NX搭載のXaで同様のことが発生してもPCIなSCSIカードを使えばよいだけです。 ではDOS用ASPIドライバのパッチ場所 ASPI2DOS.SYS 1DF2h 20h->40h 1E01h F3h 66h->90h F3h 1F16h 02h->01h 1F18h F3h 66h->90h F3h 1FA2h 02h F3h 66h->01h 90h F3h 20AEh 20h->40h 20BFh F3h 66h->90h F3h やっているのは右シフト2回を1回に減らして(20h回繰り返しを40h回繰り返しに変更して) rep insd/outsdを rep insw/outswに変更です。 NT351用ドライバのパッチ場所 AIC6x60.SYS D8h 0Fh->FAh PEcheckSUM 319Eh 76h->EBh 条件ジャンプを強制に 3380h 75h->EBh 同上 ドライバ内部にWORD転送モードを持っています。そちらに強制ジャンプするように変更しています。NTのドライバはチェッカがあるのでそこも変更 Windows95用ドライバ sparrow.mpd 4F44h 0Fh 8Eh->90h E9h 5289h 0Fh 8Eh->90h E9h ドライバ内部にWORD転送モードを持っています。そちらに強制ジャンプするように変更しています。 さてこれでドライバは動作することが可能にはなったのですが、Win95のインストーラは386をCPUチェックで弾いています。 webを検索するとIO.SYSをパッチして486に載せ替えた286機にインストールする方法などは今も見つかりますが CPUを386のままインストールした、というようなレポートは見たことがありませんでした。そのはずし方も見つけたのでここでついでに公開します。 SETUP.EXEに/NMオプションを使うとCPU判定が外れるというような文言もインターネットでは見かけますがPC-98版ではそのようにはならないようでした。 Windows95OSR2 96年9月5日 DOSSETUP.BIN 4776h 74h 05h->90h 90h EFLAGS第18ビットのACチェックで386判定された時に条件ジャンプする先に行かないように変更 WINSETUP.BIN 2929h 74h->EBh Win16APIのGetWinFlagsでCPUが386であるという返事が来なかった際にだけジャンプするのを強制ジャンプに変更 Windows95 95年10月26日 DOSSETUP.BIN 4766h 74h 05h->90h 90h WINSETUP.BIN 2a6ah 74h->EBh これを行ってもインストールに10時間以上かかります。さらに実際に運用できるかにしてもかなり違和感があります。 一つ一つの反応がとても遅いです。内部メモリ4.6M+CBUSメモリ8Mでやってみました。 以上 令和6年9月7日 初版 令和6年9月8日 誤植訂正、CPU-CBUS間のバッファについて言及 調査についての(CBUSの常識、及びBIOS動作中にDWORD転送を行っていないという情報以外の)情報元は私です。おそらくこんなものを気にしているのが私しかいません。 しかしこのパッチ群を適用したせいで何かが起きても私は何も行いません。 これを参考にするのもしないのも読んだ方の責任で追試してください。 drachen6jp リウ