5.SMCHSMODが出来るまで

←BACK

これは、Gigoさんが96年6月に書いたものです。その頃はSMC製だけだったのでSMCHSMODという名前でした。
GigoさんのページからSHSMOD関連の情報を無くしてしまうという事ですので、許可を得てここに掲載させて頂きます。

最近、あちこちのプロバイダでISDNのMPをサポートするようになってきました。しかし、私のZyXEL2864Iのようなシリアル接続のTAと、シリアルポート最高速度が115.2Kbpsの普通のAT互換機の組み合わせでは128KbpsというMPの速度を生かしきれません。

115,200bps以上の速度を得る方法はいくつかありますがどれも一長一短です。
  1. Hayes ESPのような高速シリアルカードを買う。

    ○そのためのハードウェアなので安心。 ×入手難。 ×高い。 ×スロットを占有する。 ×ドライバ必要。
     
     
  2. シリアルカードのX'talもしくはOSCを交換する。

    普通は1.8432MHzのOSCが使われているので115,200bpsが限界ですが16550自体の規格はこの4倍の速度にも耐えるので倍とか4倍の周波数のものにOSCを交換するという技です。 ○X'tal代だけで済み安価。 ○ドライバ不要。 ×工作必要。 ×設定した速度と実際の速度が異なる。 ×シリアルマウスが繋げなくなる。 ×Multi IO化され、クロックが分離し難い最近のM/Bでは不適。
     
      手元に2Sのcardがありjunk箱にちょうど3.686MHzのOSCがあったのでこれを剥がして付け替えれば良かったんですが半田ポットを使うにはまだ暑すぎるとかどうせやるならCHIPも exar 16650, TI 16C750といった新しいUARTに替えたいとか理屈をこねて伸ばし伸ばしにしてました。
     
  3. 115,200bps以上に設定できるシリアルカードを買う。

    自分でやらなくても2.と同様のカードが市販されています。入手難と言ったHayes同様の欠点が加わるのであまり有り難い方法ではありません。

その他、ZyXEL2864Iではパラレルポートを使うという手もあるのですがNT用のドライバが見当たりません。シリアルに見えるパラレルインターフェースカード、ZyXEL SP111ATを使うという手も売っているところが見つからず断念。(SP111AT,IO121,16C750などを適価で買えるところを知っている方がいましたら教えてくださると嬉しいです。追記:29-Sep.-96にSP111ATを4,500円で購入出来ました。もう少し早く入手していたらSMCHSModは作成されなかったでしょう。)

そんな時、最近のマザーボードに使われているSMCの37C665IR,666IR,669のデータシートに460,800bpsに対応していると書いてあるのに気づきました。これは単一クロックのはずなのでソフトだけで出来なくてはおかしいと思い、調べてみるとちょっとドライバをいじれば良さそうです。

Windows NT3.51J
230,400bpsや460,800bpsが使えるということをNTに伝える方法がわからなかったので57,600bpsに設定しろと要求された時、対応chipであれば57,600bpsではなく230,400bpsになるようにしてみました。

物は試しとTermで57,600bpsに設定してZyXEL2864Iの速度レジスタS20を見てみると230,400bpsを表す0になっています。しめしめとRASでdial upするとサポートしていない速度になったと怒るのでmodem.infをちよっといじって宥めてやりました。試しに2MBのファイルをftpしてみたところ平均で13.2Kになったので問題無く動作しているようです。

これをfj.os.windows-ntで紹介したところ結構、反響がありました。

95 Version0
同僚から95版もという要望が出たんですが私自身は95はNTで動かない邪悪なアプリケーション用の予備環境としか思っておらず開発環境も無いので却下しようと思ったのですが、その同僚が500円出すというので500円分だけの手間で出来るか考えてみたところ出来そうに思えたので引き受けました。

SMC665IR,669のHigh Speed ModeではDivisorラッチに0x8002を書き込むと230,400bps,0x8001を書き込むと460,800bpsです。元のドライバは0x0001C200(115,200)をbpsで割ってDivisorに書き込む値を決めているのですがこれを0x7081C200をbpsで割るという形にパッチしました。

すると57,600bpsに設定した時、Divisorラッチに書き込まれる値は0x8002ということで実際には230,400bpsになります。ここではこれをVersion0と呼びます。ここまでは10分とかからず500円は妥当な金額ですが安易なパッチのため38,400bpsと115,200bps以上の時でたらめな値になってしまうので使えないという欠点があります。

95 Version1
さすがにVersion0は妙な欠点がありすぎて気が引けたのでまともなものを書くことにしました。しかしDDKのCDはある物の95のパーティションは256MBしかなくMASMも持っていません。結局、HS Mode対応を加えても最適化して短くすれば元の領域に収まるだろうと目星が付いたのでハンドアセンブル(!)し、もくろみ通り1バイトだけ短いコードになったのでバイナリエディタでパッチを当てました。ここまでで約3h,とっくに500円分以上働いてます。^-^

95 Version1f(ake)
MN128やZyXEL2864Iはコントロールパネル/モデムで正しくインストールすれば115,200bps以上も選択出来るので何の問題もありませんが115,200bpsまでしか設定出来ないという困ったmodem.infしかない製品のために57,600bpsを選択すると実際には230,400bps,115,200bpsを選ぶと実際には460,800bpsになる版を作りFakeのFを取って1fとしました。窮余の策ですので必要にならない限り使ってはいけません。

公開
さて,500円出資した同僚ですが彼のマシンは665IRでも669でもなく665GTで折角作ったものが使えないという落ちが付きました。無駄にするのは惜しいということで彼の許可を得て公開することにし、ドキュメントを整備してfj.os.ms-windowsに出したところ反響が予想外に大きかったのでこのホームページが出来ました。

なお、同僚はSMC665IRの載っているマザーボードに買い替えて快適に使っています。

←BACK


Last updated on 9/30/1999.