特別編・98バスマウス端子にホイールマウスを・・・


ちょっと今回からは、毛色を変えていく事にしようと思う。
期待している人には申し訳ないが、実際に改造に成功して、実現しているものの紹介ではないのだ。

・第1回 己を知る

最近、新たなマウスが登場した。そう、インテリマウスをはじめとする「ホイール付きマウス」だ。
このホイールは、慣れてしまうと非常に使いやすい。いや、ないと非常に不便に感じてしまうくらいだ。
しかしながら、市販されているホイールマウスはシリアルポート接続の物ばかりで、98に標準添付されている
バスマウス端子には接続できない物しかない。これは、非常に不便である。コネクタ形状的にセカンド
シリアルに接続されるのを前提にしているのだが、シリアルのリソースが足りなかったり、また、多くの機器が
つながっていたりなど、使えない事が多いのだ。
最初からつながっているバスマウス端子(※1)になぜ接続できないのか?
それは、DOS/V互換機のマウスが、シリアル通信で、本体にマウスデータを送信しているのに対し、98バス
マウスは、マウスのロータリーエンコーダの出力パルスがそのまま入力される構造になっているのだ。

つまり、マウスの中身はすっからかんで、回転検出のロータリーエンコーダがそのまま98に接続されていると
考えてもらえばよい。(※2)
X方向の回転と、Y方向の回転、左ボタン、右ボタン、センターボタン(※3)程度の信号しか出てないのだ。
それに引き換え、シリアルポートを利用したマウスならば、クリア、クロック、データIN、データOUT程度の
信号があれば、いくらでもマウスにデータを問い合わせて、その応答を得るといった事が出来る。
X方向のカウンタ、Y方向のカウンタ、ボタン状態、ホイール状態など、コマンドをきめさえすれば問題なくデー
タの受け渡しができる。

いきなり絶望的になってしまった。
マウスにデータを送信できれば、いくらでも向こう側で、Xの代わりにホイール状態などの出力に切り替えて、
送信できるのだが、マウスは送信オンリーのみなのだ。
ここで、マウスとして使用できそうなポートを探してみる事にした。

1.Cバス
2.PCIバス
3.ジョイスティック端子
4.AUDIOIN
5.パラレル端子
6.シリアル端子
7.98バスマウス端子
8.キーボード端子
9.電源
10.アース

9番・10番は、現在の技術では無理であろう。電源ケーブルに信号を流して、家の中にLANを組んでしまうと
いう物があるが、今のところちょっと個人レベルでは作れそうもない。原理は簡単だし、家中に電源は走り回って
いるので、LANの用途にはぴったりであるが・・・。ちなみに、家に電気を供給している引込線にフィルターを
設置しないと、外に信号が出てしまうので、注意されたし。

8番は、結構いい感じなのだが、いかんせんキーボードの間にかますマイコンの制御と、本体側のキーボード割り
込みのルーチンに干渉するので、今まで通りのマウスの使い方が出来ないかもしれない。信号のやり取りができる
ので、一番楽そうであるのだが・・・

1番・2番は、マウスだけのためにCバスやPCIバスを使用するのは本末転倒である。(※4)

3番のジョイスティック端子は、音源ボードがないと使えない。1ポートでは足りない。ブラスターとかの端子な
ら結構いいのだが。(※5)

4番のAUDIOINだが、マシンの負荷が高すぎる。常に監視していなければならないからだ。
もっとも、一定のレベルでサンプリングして、その内容を監視するなら負荷は問題にならないかもしれない。
FFTとかかけて、周波数によって動作を行うとかいったのなら、負荷はもっと高くなるかもしれないが・・・
その前に、PCMがなければ使えない。却下。

5番のパラレル端子だが、最近ではプリンタかスキャナ程度の接続しか使用していないので、これは結構つかえ
そうである。データの入出力も可能である。もっとも、入力自体は9801インターフェースでは、BUSY端子
1ビットだけだが、外部ロジックの作り込みで、こんなのはいくらでもごまかせるからだ。

6番。これを使ってもいいのなら、何の苦労もしない。市販品を使えばいいだけだ。

7番。やっぱりこれだ。これしかない。

ここで、設計するマウスとして、以下の点に注意したい。
1.今まで通りのバスマウスとして使用可能である。
2.ホイール動作が可能である。

この点から考えても、やっぱり7番しかないであろう。
何か合った時など、もととして使用できなければ困る。

・98バスマウスインターフェースを調べる

マウスドライバでは、マウスインターフェース回路に4種類くらいのタイマ割り込み設定が出来る。
マウスインターフェースは、この設定により一定間隔のインターバルタイマで、マウスドライバに割り込みを
かける。
この割り込みで、マウスドライバは、今回の移動量を受け取る。(※6)
間隔周期が長いと、マウスカウンタがあふれやすくなる(※7)ので、通常は一定の間隔でしかつかわない。
このマウスの割り込み周期は、200カウントマウスや400カウントマウスなどとは関係がない。
早い周期で読むからといって、動作が速くなるわけではないのだ。1回の移動量が少なくなるだけである。
速い速度でマウスを動かしたときと、ゆっくり動かしたときでは、同じマウスの移動距離でも、画面上のポイ
ンタの移動距離が違うことに気づいている人も多いと思う。これは、倍速スレッショルドといい、一定の移動
速度以上のときにマウスの移動速度を2倍や、4倍にする機構の事である。これは、マウスドライバによって
実現されている。Win95でも、マウス速度をレジストリをいじる事によって、速度をアップできるが、そ
のなかにはこの2倍速スレッショルドレベルや4倍速スレッショルドレベルの設定があった。

ボタン状態は、ビットのON/OFFで現される。

・実現可能な方法を考える。

ここであいてるものといったら、 「センターボタン」 しかない。
しかし、ボタンは一つしかないのだが・・・
そのまえに、9821Xaでは、センターボタンがなんと使用不可能なのである!

これはこまった。
ホイール動作用に別の端子を複合して利用というのはどうだろうか?
しかし、エレガントではない。困った・・・

左ボタンか右ボタンを使用するしかない。
そこでこう考えてみた。マウスのタイマ割り込みに同期して、左ボタンと右ボタンをON/OFFの周期に
してみてはどうだろう?
通常マウス割り込みは デフォルトである、120Hz(0.00833秒間隔)で動作している。
人間業では、この速度でボタンをON/OFFする事は出来ない。
そこで、マウスの割り込み周期とのずれも考慮して、8回読んだとき、周期のような規則性が観測できたの
なら、その周期によってホイール+と−を区別してはどうであろう。
Lボタンで観測できたのなら+方向。Rボタンで観測できたのなら−方向のように。
これが実現可能であるかどうか、まだ実験していない。ひょとしたら、チャタリング防止回路によって、
これくらいの周期の入力はキャンセルされてしまうかもしれないのだ。(※8)

次回は、・敵を知る 〜PS/2マウスを考える〜 をお送りする。

※1
そもそもバスマウスというくらいだから、ホイールマウスの接続など考えられていない。が、それをいってはおしま
いである。
しかしながら、DOS/V互換機などでは、問題なく接続されているのを考えると、ちょっと不公平であるな。

※2
一応、チップが入っているマウスもある。というか、その方が多い。しかし、使用されているチップは単なるバッファ
(信号増幅)だったり、コンパレータ(信号の電圧比較して、安定させる目的)くらいで、なんらマウスのコントロー
ルができるようなチップがはいっていない。

※3
バスマウス(2ボタンマウスの事)なのに、センターボタンがあるのはなぜか? まあ、設計当初はあとあと使用する
かもしれないとのことで、付け足された物なのだろう。

※4
その昔、最初に出た無印98などは、Cバスが6スロットあった。そして、マウスはマウスインターフェースユニット
をCバスに差す事によって実現していたのだが、今の98には最初から内蔵済みである。

※5
だって、シリアルだもん。

※6
カウンタのサイズは8ビットあるのだが、なぜか一度に4ビットしか読めない。
そのため、2回に分けて読む必要がある。

※7
高速でマウスをがっと動かすと、反対方向に動く事がある。あれ。
マウスカウンタがあふれてしまうため、最上位ビットの符号ビットが反転してしまい、反対に動いてしまう。

※8
ボタンを押したとき、実際には、スイッチは激しくON/OFFになっている。これは、ばねが接点とくっついた
り離れたりするためである。
防止回路は、この差を吸収する。
どのくらいの差が吸収されてしまうかは、実験してみないと分からない。
かなり吸収されてしまうときは、判別のためにマウスのボタンが鈍くなるかもしれない。
もっとも、0.1秒程度ボタンの反応が遅れても気がつかないであろうが。(それくらいに収まってくれればよいが)




特別編・98バスマウス端子にホイールマウスを・・・2

・第2回 敵を知る

敵とは何か? それはもちろん奴だ(笑)(※1)

で、敵には、以下の種類のマウスがあるようだ。

・バスマウス (※5)
・PS/2マウス (※6)
・シリアルマウス (※7)

そして、PS/2マウスには、変換アダプタを使用することによりシリアルマウスとしても使用可能なタイプがあると
いうことだ。
PS/2マウスであるが、そのアクセス手順は以下のようになっているらしい。

通信には、DATAとCLK信号線を用いる。データの流れる方向は双方向である。
通常これらの信号線はHレベルに固定されている。本体側がデータを送るときには、CLK信号をLレベルにして、
動作に問題がないようならば、DATAとCLK信号を利用して信号を送出する。(DATAに信号をのせて、CLK信号に
より、データを1ビットずつ送信する)

マウス側が本体にデータを送出するときには、DATAをLにして、問題がないようなら信号を送出する。
といった、謎の手段を使用するらしい。(※2)
単純なシリアル通信とは違う手順を踏むのである。

シリアルマウスの場合は、通常通り非同期シリアル通信を行うらしい。
これらの制御は複雑なので、マウス側に搭載された1チップマイコンと通信することで実現されている。
つまり、このマイコンに設定するプログラムによってPS/2専用、シリアル両対応マウスといったことが
実現されているらしい。

まあ、ちょっとした問題があるかもしれないが、シリアルとしての通信を実現する方向で向かおうと思う。
最初に実現しなければならないのは、ATマウスの出力を、98マウスインターフェースが必要とする、ロータリー
エンコーダの出力波形にしなければならない事だ。(※3)

・98マウスの連射限界スピードについて

前回は、左ボタンの連射で・・・ 云々になっていたが、結局両ボタン同時押しを検出することによって、
特殊動作を検出することにする。
人力で寸分の狂いもなく、同時に両方のボタンを押すことは非常に困難であるし、またそのようなことを必要
とするソフトはないと思われるからだ。
同時押しの時間を検出することによって、ホイールの動作方向を決定するようにすればよいと思われる。
ホイールの回転時間は、非常に間延びしているので、.25msec程度の時間検出にかけても問題ないと思われる。

とりあえず、どれくらいの連射が有効になるか計測してみた結果、0.003125程度の時間は余裕で
とおった。ボタンを同時にかちゃかちゃ押して見ると・・・なんとこれ以下の時間をたたき出してしまった。
まあ、これを連続して押せるわけではないし、ボタンを押してから離すまでの時間があるので、ボタン同時押し
連射が.25mSec程度の間に計測できればOKであろう。

・ドライバ

そして最大の難関がこれ。ドライバである。
もっとも、ドライバではなく通常のソフトで疑似ホイール機能を実現しているソフトもあるので、一応この
考えを利用しようと思う。
マウスのメッセージを横取りし、加工・スルーすることによって、動作を実現するのだ(※4)

次回へ続く!


※1
もちろん、DOS/V互換機のこと。これ意外になにがあろうか。

※2
本当に謎の通信手段である。しかし、マウスからもデータを送信できるというのは、マウスが勝手にデータを
本体に送り付けてくるのだろうか?マウスにデータ要求信号を出した後に、マウスがデータの送信を開始する
のだろうか?
98用のマウスドライバはよく見るのだが、AT用のマウスドライバは見たことがないので、どうなっているのか
非常に気になるところである。
ここも調べなければならない問題の1つである。

※3
とりあえず、これには1チップマイコンを用いようと思う。とりあえずプロトタイプとしては、AKI80があるので、
これで動作確認をしてからになるだろうが。
ホイールの動作はともかく、この部分を実現するだけでも98マウス以外をつけることができるようになるので、
いい感じになると思われる。
マウスは消耗部品であるから、その入手の道が立たれてしまうのは非常に痛い。
もっとも、ロータリーエンコーダやマイクロスイッチ(商品名なので、実際には別の名前)は、入手できなくもないので、
共通の部品で付け替えてしまってもいいだろう。
スイッチに関しては、適当な部品で交換したことがある。足の高さが会わなくて、その調整に苦労したが。
結局、4本の足が刺さる部分にあらかじめ金属の足を立てておいて、それにマイクロスイッチをはんだ付けし、
足を延長することで解決。ボタンそのものは、ぴったりくるものがなかなか見つからないと思うので、
この辺の技術を磨いておけば役に立つと思う。とりあえずは、右ボタンで代用してもかまわないが。

※4
とはいったものの、まだその実現方法についてはわかっていない。WindowsHookあたりを使えばできるのであろうが、
使った事ないしなぁ。
しかし、スクロールさせるメッセージは何を使用しているのだろうか・・・

※5
ボタンが2つあるマウスのことを昔はこう呼んだ気がする。

※6
PS/2マシンが採用したインターフェースらしい。それより前はシリアルマウスだった。

※7
シリアル通信を使用したマウスのこと。本体のコントローラとマウス内部のマイクロチップにより通信を
行い、マウスとして動作する。
後々改造が効きそうであるが・・・




特別編・古いSIMMを再生する

今回もSNOWMANの協力でお送りする。

・SIMMの改造

皆さんのマシンはSIMMを使っていますか?
または最近のマシンならばDIMMのみで増設しているかもしれませんね。
実際のマシンはメモリースロット数の制限により手持ちの昔のSIMMが遊んでいる人もいるでしょう。
そんな一昔前のSIMMを再生するのが今回の目的です。

・改造できるSIMM
同じ種類のSIMMが2本単位で必要です。
片面のみにしかRAMが載っておらず、さらにRAMが載っていない面にRAM搭載用のパターンが有ること。
つまり、片面で16MBのRAMならば、両面で32MBになるというわけです。
下の写真を参考にして下さい。(赤い線は気にしないように)
表面

裏面

・用意する物

半田こて・半田(なるべく細い物、0.8mm以下)・少々の線材・半田吸い取り線
では、改造に入ります。
まず2本の内の1本のSIMMはRAMはぎ取りようとして使います。
PLCCのパッケージなので半田を外すのは大変ですが頑張って下さい。
コツは、片側づつ半田を外していくことです。
私は、片側の足全部に半田を大量に流し、RAMの下にマイナスドライバーを入れて
こじって少し浮かす。またその反対も同じように浮かす・・・これを延々と繰り返すと、
RAMがかなり浮き上がってくるはず。そうしたら半田吸い取り線で半田を吸い取ればOK。
この際に、パスコンのチップコンデンサーも外しておきましょう。これも移植します。

・RAMの移植

私が使ったSIMMはパスコンがRAM間に挟まってマウントされていました。
通常パスコンは小さいチップコンデンサを使っているのでこれを先に移植します。
RAM(三星(韓国)製)D−RAMとチップコンデンサ
石を剥がれた基板(下)と、元の姿(上)
PLCCなどの小型ICは半田が大変ですがコツがあります。
基板側の銅箔に薄く半田しておき(予備半田)、ICを乗せて対角線の足を2本半田すると安定して他の足も、
安定して半田しやすくなります。間違っても、1234...の順で半田しないでください。
ピンピッチが狭いため少しのずれが最後には大きなずれとなって半田ブリッジの原因となります。

移植が終了したら電源ラインのショートがないか、信号ラインのショート、半田ブリッジや半田忘れがないか
慎重に点検して下さい。マザーボードが壊れても責任もてませんから(笑)
点検のうえ、「もう完璧!!」となったらマシンにさしてみて98の場合は起動音「ぴぽっ」が鳴ればOK!!
完成です。 もしだめだったらすぐの電源を切って点検して下さい。失敗の仕方によってはマザーが壊れます。

この赤い線の正体は・・・CASだかRASの銅箔パターンがRAMの下で切れていたようで、
メモリーエラーが発生したため、仕方なく部品の上からジャンパーしました。(T_T)

RAM の品番はKM44C4100AK-6です。一応60nSですが韓国製は日本製よりもマージンが少ないようです。




特別編・HDD増設具をつくる

HDDを増設する際に、機種によっては最初のHDDがCDROMドライブの下にマウントされているが、
この場合HDDを増設するには、HDDの増設金具を買わなければまったく増設できない。

・・・で、例によって接続具を作成した。
この接続具は2台までHDDをマウントできる優れものである(笑)
材質は加工が容易な厚紙(※1)を使用した。
近くにファンを設置して、冷却用に側面にスリットを入れるのもいいであろう。

新型HDD増設具



そして、2台目のHDDを増設するための仕切りである。
実際には、今までこれを使用して、この上にHDDを置いて使用していたのだが、2台目の増設(実質的には3
台目)
を考えたときに、このままではどーがんばっても、乗せることができなかったのだ。
というわけで、このパーツだけでHDDを支えることが可能である。
1台目と2台目のHDDは接触しておらず、この間には空間(※2)がある。
2台目用セパレータ



1台目のHDDを設置したところである。
隙間がぎりぎりになってしまうが、これはフレームによる制限である。
なお、奥行きはHDDにあわせてぴったりにしておいた。ケーブルや電源線をつなぐスペースとして奥は
非常にごちゃごちゃするためである。
なお、今回は1台目の増設HDDをIFC−USP−Mに接続して、2台目の増設HDDをIDE98に
つなぐことにした。
1台目のHDDを設置



1台目はIFC−USP−Mにつなぐために、左側からケーブルを取り出した。
ケーブルを出すスペースは、右も左もこの部分しか空いていないのである。ちなみに、左側から入って
HDDの下を通過しているケーブルは、SCSI CD−ROMのケーブルである。
ケーブルの接続



1台目のHDDの上にセパレータを設置して、その上に2台目のHDDをマウントしたところである。
なお、いくらか隙間ができるようにしてある。
2台目を設置


ガムテープで止めてあるのは、筐体に密着させて熱を逃すのと、動かないように固定するのと両方の
意味合いがあるのだ。
2台目のケーブルを接続


というわけで、W型番タイプのデスクトップ筐体に、HDDを増設することができた。
3,4時間連続して使用しているが、現在までに異常な発熱などはしていない。
今回はこの辺で。



※1
例によって紙である。前にもいったが紙の発火温度は非常に高いので、HDDが壊滅的な破壊をおこさない
限り問題ないであろう。
なお、使用するドライブは発熱の少ないドライブを選ぶことをお勧めする。
固定具は金属ではないので、廃熱の手段が問題になるからである。ヒートパイプや冷却ファンを用意した
方がいいだろう。今回のセパレータは紙であるが、この部分を金属にして筐体に接続して熱を捨ててもいいかな。
プラスチックを扱うというのもあったのだが、手に入らなかった。100円ショップをまわって、かごでも
ゲットして改造するのもいいかもしれない。
ちなみに、壊滅的な破壊とは俗にいう「火を噴く」というやつである。
ICチップから火花が飛び散るさまは壮観である。過電流が流れたせいであろう、ICチップのプラスチックが
割れていることもあった。
ちなみに、ASICの設計者などの間では、頻繁に動作する回路(状態が変化する回路のこと。CMOSなので、
状態が変わるときにだけ電流が流れる)
の設計には気をつかうとのことである。
下手な回路設計をしてしまうと、熱の発生でASICが割れるからだそうだ。

※2
とりあえず、熱がこもらないようにと空間を用意した。
筐体内部は空気が循環するようになっているので、ここにも空気が流れ込むようにするのがよいであろう。
ちなみに、筐体前面部のパネルには、この部分に空隙がうがたれている。
まるで、前面部からHDDを挿入することができるようになっているのだ。ここに小型のファンを設置できそう
である。
これが前面にある謎の穴である。
ちなみに電源ランプは青になっている(笑)
どうやらFDDの増設スペースのようである。横につくとは、88やDOの再来か

トップへ