H8/3048の場合、消費電流に気をつける必要があります。ハードウエアマニュアルによると、H8/3048は16MHz動作時65mA消費することになっています(H8/3664は22.5mA)。MSXのジョイスティックポートからは50mAしか取れないので、低いクロックで動作させるなどの対策が必要です。 |
このアナログジョイスティックの最大の特徴は、ソフト的にはMSXマウスと互換であることです。したがって、BASICでもPAD関数などにより簡単に対応ソフトを作ることができます。
これまでにも、MSXで使えるアナログ的入力デバイスとしては「パドル」や、シャープ製「サイバースティック」などがありましたが、いまいち普及していませんでした。たとえばパドルは
また、サイバースティックは
といったデメリットがありました。今回作成したアナログジョイスティックはそれらのデメリットを解消しています。
H8/3664のアナログ入力からボリュームの電圧値を読み取り、それをMSXマウスのデータ送信シーケンスにしたがって送っています。
普通、ボリュームの作動角は270度程度あるのですが、ジョイスティックの形に組み上げた場合、270度全ては使いません(ギヤ、プーリーなどを駆使すれば270度全てを使うことも可能ですが、かえって工作が面倒になります)。今回は中央付近の67度程度(全作動角の1/4)を使うことにします。
都合のいいことに、H8/3664のアナログ入力の精度は10ビット(0〜1023)ですが、その1/4だけを使えばちょうど8ビット(0〜255あるいは−128〜127)数値となります。
デジタルスティックモードもおまけとして(というか、MSXマウス互換をうたうなら必須でしょう(笑))付けました。左トリガボタンを押しながらリセットするとデジタルスティック(ようするにジョイパッドと同じ)になります。
MSXのジョイスティックポート用コネクタはいらなくなったマウスやジョイパッドのものをケーブルごと使うか(すべての線がつながっている物を使うこと)、またはD−SUB9ピンメスコネクタのでっぱった「耳」を切るなどして使います。
D−SUB9ピンコネクタの加工についてはこのページも参考にしてください
回路図です。
全体像です。
部品面です。上に出ているケーブルがMSX、左に出ているケーブルがボリュームにつながります。下に2つ見える白い四角はトリガボタン用キースイッチです。左下、H8/3664ボードに半分隠れているのがリセットスイッチです。
ハンダ面。H8カートリッジと比べるとずいぶんシンプルですね(^^;;;
まず、秋月のH8/3664キットを、秋月の説明書どおりに作ます。それから、適当なユニバーサル基板に、H8/3664基板を載せるためのコネクタ(キットに入っているはずです)を付けます。
アナログジョイスティック回路を作る前に、H8/3664基板が正しく完成したかどうかを確認します。CN1の23、24ピン(GND)および25、26ピン(POWER SOURCE)から8〜12V程度の適当な直流電源を供給し、キットに添付されているモニタを書き込んでみて、H8/3664基板に問題がないかどうか確認します。とりあえず、モニタが書き込めて動いていればOKでしょう。
次に、いったん電源を切り、ユニバーサル基板上にアナログジョイスティック回路を作ります。回路ができたら、まだMSXとはつながずに、先ほどと同じように外部から電源を供給してモニタを動かします。
モニタのMコマンドで FFB8番地(ADCSR)に 31(チャネル0、1スキャンモード、AD変換開始)を書き込みます。そして、Dコマンドで FFB0番地(ADDRA)以降を見ると、ボリュームの電圧値が読み取れるはずです。適当にボリュームを回しては FFB0番地をダンプする、ということを数回繰り返して確認しましょう。
ここまでうまくいっていれば、ほぼ問題無いと思いますが、さらに慎重を期したい人はポート8を出力、ポート5を入力、プルアップありに設定してちゃんと入出力ができるか確認するのもよいでしょう。(その方法は省略します。各自自分で考えてみてください。)
それらの確認が済んだら、H8/3664の内蔵ROMにアナログジョイスティック用プログラム(ASTICK.ABS)を書き込みます。書きこんだ後、ブートモード設定ジャンパをはずすのを忘れないようにしましょう。
そしていったん電源を切り、H8/3664基板上のレギュレータ(7805)を外します。5V電源はMSX側からもらうので、レギュレータは必要ありません。また、テスト用の直流電源もこのあと必要ありません。
MSXとつなぐ前にもう一度、配線間違いがないかどうか最後の確認をしましょう。
配線に問題がなければアナログスティックのジョイスティックポート用コネクタをポート1に挿して電源を入れ、次のBASICプログラムを打ち込んで動作を確認してください。ボリュームを回すと数値が変化するはずです。
10 A=PAD(12) 20 PRINT PAD(13),PAD(14) 30 GOTO 10
ちなみに超ミニBASICの場合テストプログラムは以下のようになります。 10 *LOOP:A=BIOS($DB,12) 20 PRINT CBW(BIOS($DB,13)),CBW(BIOS($DB,14)) 30 GOTO *LOOP |
ボリュームにスティックを取り付けるという、メカニカルな工作を行います。回路を作るよりこっちの方が面倒かもしれません。実は、白状すると、これはまだ私もやっていません。これからプラ板とかポリパテとかで作ろうと思っているのですが。
2つのボリュームが独立して動けるように工夫しなければいけません。たぶん下の図のような物になると思います。
このアナログスティックを、従来のMSXマウス対応ソフトで使うと、スティックを少し倒すとカーソルがゆっくり動き、大きく倒すとカーソルが早く動く、という感じになります。そういう動きでも問題ないアプリケーションの場合はそのままでよいでしょう。
スティックを倒した角度がそのまま画面上の位置に反映するようにしたい場合は、以下のような感じのプログラムを組むことになります。
10 COLOR 15,1,1:SCREEN 5 20 SPRITE$(0)=STRING$(8,255) 30 A=PAD(12):DX=PAD(13):DY=PAD(14) 40 PUTSPRITE 0,(128+DX,106+DY),15,0 50 GOTO 30
せっかくですから、DOS/V機などで使われているPS/2マウスをMSXで使えるようにするアダプタとしての機能も組み込んで、スイッチ一つでアナログスティックとPS/2マウスの切り替えができるようにできたらいいな、とか思っています。
すでにH8/3664ボードにはRS−232インターフェースが乗っているので、古〜いRS−232タイプのDOS/V用マウスアダプタなら、このまま特に回路を追加しなくても作れるかも。
それから、秋月で売っている加速度センサーをマウスの代わりにできないかなぁ〜、とか。
あと、H8/3664をMSXだけで書き込めるようにするのも課題です。(H8/3048と全然書き込みかたが違う〜(^^;;;)