PC-9821Ap/U2のROM書き換え


動機

SiI680のBIOSにバスマスタ転送を盛り込むのに行き詰まっていたころに、んでみたのですが、何とはなしに動いているようで(DOSで65MB/s位出る)、それでいて高負荷のときにハングアップするという、原因をつかみかねる状況です。そこで、気晴らしにAp/U2を拡張することになりました。

ROMライター

私の使用しているROMライターはGRIDのChipMaxになります。約4万円と、同種の製品に比べると対応するデバイス数が多く、かなりお買い得なほうだと思います。対応デバイスリストには初代/2代目A-mateのころのITFやBIOSを格納したROMであるμPD27C4000Dは含まれていません。日本橋に言ったときにJ&Pで『コンピュータユーザのための著作権&法律ガイド』(aka:萌える法律読本)と一緒に『メモリIC規格表』を買ってきまして、ピン互換な石を探すと、東芝のTC574200Dが存在します。このデバイスを指定すると27C4000Dそのものは対応外ですが、読めました(^o^)/。保証外いかんにかかわらず、データが化けてる可能性を考慮し、2-3回ほど読んでチェックサムが合っていることと、FC /B [イメージファイル1] [イメージファイル2]とやってチェックします。なお、98で用いられている28F400とかに関してはSOP-DIPアダプタPA44SO40DAが12000円くらいとN.Yさんのなんでも掲示板過去ログ5に情報があります。私が問い合わせたときは18000円と言われました。28F200については対応して欲しいとメーカーの方に伝えて欲しいと購入時にお願いしたところ、対応してくれました。すばらしい!同じイメージを2つつないだものを用意して28F400を選択すれば書きこめます

ROM直付け機

私のAp/U2はROM直付けでした(T_T)。現在手持ちのCPUボードのG8MVSは3枚あります。すなわち

  1. ソケット3もどき仕様でワンタイムROM直付け
  2. CPUソケットはもとのままで、UV-EPROMはソケット仕様
  3. As/M2のCPUボード(無改造)

ROM抜き後のCPUボード何って、悩むことは全くなくて、簡単な方、つまり一つ目のワンタイムROMを引っこ抜くわけです(笑)。真中のピンが親の敵のように半田が盛られていて、鬱陶しかったです。その他のピンを確実にスルーホールと繋がっていない状態にして、ROMを引っこ抜きながら半田ごてを当てて少しずつ引き抜きます。ここで焦らずに、折角パターンがきちんと見えているので、パターン切れなどを起こしていないのをテスタで確認します(図)。そこへ丸ピンソケットを挿して、半田付けし、元のROMを載せて起動!「ぴぽ」おお、うまくいった。ちなみに私の持っているG8MVS上のROMのイメージは3枚いずれも同じでした。

改造場所

一番不満が大きく、そして先人が多く道筋が示されているのはHDDの容量壁でしょう。こいつを128GBぎりぎりまで対応させます。ROMに動的にパッチを当てるのと比べると幾分やさしい作業となります。最も参考にすべきは土野明日香様の発言でしょう。Ap/U2はその対象として挙げてあるAfより約半年前発表のマシンで、数セクタずつ読みこむREAD MULTIPLEやWRITE MULTIPLEに対応していません。そのため1セクタ毎に割りこみが入り、PIC操作、バンク切り替えの面倒を見ないといかず、BIOSの転送速度が遅いです。もっとも、Windowsでも遅いのでハードウェア的な原因もあるのかもしれません。試しにDOSでSET MULTIPLEをかけて起動してみましたが、転送速度の向上はありませんでした。

面倒な場所

この頃のIDE-BIOSは256バイト/セクタに対応するために、ドライブの1セクタ512バイトをソフト上は2セクタ256*2バイトとしています。そのために論理セクタ数をソフトウェアでごまかすことで倍に見せかけています。256バイトだけ読みたい場合にもHDD側は512バイトアクセスしないといけないわけです。そのために2100hからをデータバッファとして用いて帳尻を合わせたり、ドライブのセクタ数をBIOSのセクタ数の半分としてごまかしたりしています。

また、スレーブ接続のドライブに触ろうとします。しかし、スレーブ接続のドライブに対応するIDENTIFY DATAなどの格納エリアも存在しないわけで、まともに扱う仕組みがないので有害以外の何物でもありません。つまり、2台目IDE-HDDに触るようなパラメータをBIOSに渡すと、おかしなアクセスをします。ユーザープログラムから接続の有無を判別するには0000:055Dhのbit0とbit1を最も信頼するべきということになります。

直す箇所

ともかく土野明日香様の発言をご覧頂くとして、私の作ったPC-9821Ap/As-IDE-BIOSパッチを掲載します。要はまずいところが

の5箇所にあって、いずれにも決めうちや桁あふれの危険のあるコードがあるわけです。パッチは幾分手抜きで、1台目しかアクセスされないという前提で作っています。具体的には「パッチの用いるワークエリアが0ではない」ことと「0000:0457hが10hである(シリンダ数可変)」ことと「テーブルを指すES:BXがCS:081Dhである(シリンダ数可変のテーブルを指す)」ことを同値として扱っています。CHS->リニアセクタの変換ルーチンはあのサイズに収めるのは苦労しました(^^;。チョンボが見つかりましたので、新しいのを掲載しました。ついでにAp2/As2のパッチも掲載します。容量決め打ちのドライブでブートできないのは以下の削除部分が原因ではありませんでした。

で、どうなったの?

540MBの狭いHDDから80GBの6Y080L0(Maxtor)に換装し、2000MBずつ3つ領域を確保し、Windows95用とMS-DOS5.0A-H用の起動領域とを作りました(残り74GB)。そう言えばFAT16だと2GBしか確保できないんですね(汗)。まあ、このクラスのマシンでHDDが80GBもあると到底使い切れないわけで、なんにしようかと。CD-RWのイメージ作成用の区画なんかも作っておけばAp/U2でCD-Rが焼けるかという実験も出来そうで、遊べそうです。

ベンチ結果

 ★ ★ ★  HDBENCH Ver 2.610  ★ ★ ★ 
使用機種   
Processor  PODP83 83.6MHz [GenuineIntel family 15 model 3 step 2] 
解像度     1024x768 65536色(16Bit)  
Display    [X]スタンダード ディスプレイ アダプタ (9821 シリーズ)
Display    [?]Power Window 805i
Memory     13,764Kbyte
OS         Windows 95 4.0 (Build: 950) 
Date       2004/ 5/17   8:37

SCSI = ICM IF-2769 SCSI-2 Board
HDC = スタンダード IDE ハード ディスク コントローラ

ABC = GENERIC IDE  DISK TYPE00(MAXTOR 6Y080L0)
D = GENERIC NEC  FLOPPY DISK
E = GENERIC NEC  FLOPPY DISK
F = GENERIC NEC  FLOPPY DISK
G = GENERIC NEC  FLOPPY DISK
H = FUJITSU M2513A           Rev 1000
Q = YAMAHA CRW8424S         Rev 1.0d

  ALL   浮    整    矩    円   Text Scroll DD  Read Write Memory Drive
 2021  2821  4659  2367  1577   843    13   0  1779  2115  2522  A:10MB

HDDの転送能力が1割も活かせてないようですが(汗)、ともかくも何とかALL2000越えしました。


Valid HTML 4.01 Strict