|
面白そうで以前から気になっていた「Auduino」を作ってみる。
Arduinoをシンセサイザーにするというプロジェクトで、既に多数の製作例がある。各自「Auduino」でググること。 詳細はauduinoのオリジナルページ ハード、スケッチともほぼオリジナルどおり。 ただし、4.7kΩの可変抵抗器が手元になかったので、5kΩで代用。非常に簡単に出来上がる。ユニバーサル基板ながら、Arduino専用シールドっぽくしてみた。 http://art11.photozou.jp/pub/378/247378/photo/22419168.jpg およそ楽器には見えないが、つまみのひとつが音階調整。残りは音色操作。非常にクセのある音色操作で、今のところ、どこをどうすればどんな音になるか予想がつかない。まあFM音源のときも最初はワケが分からなかった。そのうちなんとかなるだろう。 スケッチには既にいくつかの改変サジェスチョンが記入されている。 ハード的にも、ある一定範囲で抵抗値を変えられるものなら何でもいいので、改変の余地が大きい。他の製作例では、超音波距離センサーを使ってのテルミンもどきとか、Cdsセンサーを使って光で操作するというのがあったと思う。 オーソドックスに、「曲げると抵抗値が変わるデバイス」に代えることを考える。横山ホットブラザースのノコギリ音楽がシミュレートできるかもしれない。相変わらず、「お・ま・え・は・ア・ホ・か〜」である。 あるいは、2つのつまみの代わりにタッチパネルを接続すれば、コルグのKAOSS PADっぽい感じの操作性になるかもしれない。 ちなみに、大きさ比較として先日作った小型液晶モニタを並べた。さらにその大きさ比較として百円硬貨を並べた。素直に百円硬貨を並べないところが天の邪鬼たる所以である。1chipMSXは、USBから電源供給しているだけで機能的には無関係である。Auduino音声出力は小型液晶モニタに接続。音が歪みまくるのが素晴らしい。 それにしても、学研のSX-150並の大変チープな音づくりであるが、なんでこんなのが、こんなに楽しいのだろうね。スペース系のエフェクトをかけると俄然、トランスしたりハウスしたりヱスビーしたり、しちゃうんだよなあ。 |
デフォルト
-
詳細
コメント(0)
|
■ジョイスティックモード
MSXの電源ON時にマウスのボタン1が押されていると、MSXはマウスをジョイスティックとして認識する。このモードを「ジョイスティックモード」という。なお、通常のモードは「カウンタモード」という。 ジョイスティックモードにおけるタイミング・チャートは、下図のとおりである。 http://art14.photozou.jp/pub/378/247378/photo/22103173.gif 図中のエンコーダ出力については、マウスに採用されているセンサにより差違がある。実際の動作は、マウスが0.254mm(カウンタの1カウントに相当)移動するごとに方向に応じたジョイスティック端子(RIGHT、LEFT、UP、DOWN)が21mSecの間、Lレベルとなる。 このとき、マウスの移動速度が約12mm/Sec(=0.245mm/21mSec)以上であるとき、つまり、エンコーダからのパルスがジョイスティックポート出力パルス幅の21mSecより小さくなったときには、ジョイスティック端子の方向信号にLが出力され続けることになり、MSXはジョイスティックが倒されたままであると認識する。 このモードを用いると、ジョイスティック対応ソフトをマウスで操作できるようになる。 ただし、常時倒し続けていないとセンスできないソフトでは、マウスを動かし続けなければならない。 また、4方向しか見ていないソフトではマウスのわずかな傾きを検出して、真っ直ぐ動かなかったり、全然動かなかったりすることがある。 ジョイスティックモードでは、BIOSのGTTRGやGTSTIKコールでマウスの状態を読み出すことができる。 ■まとめ 今回入手した資料の概略紹介は以上である。 資料にはマウスドライバのサンプルプログラムも掲載されているが、それはまた次の機会に。 以前に紹介した「テクガイ」のサンプルプログラムはトラックボールにも対応しているので、そちらを参照したほうが良いと思われる。 さて、今回の資料でいろいろと分かったことがあるので、それを利用してボチボチと展開していきたいと考えている。まあ、例によっていつになることやらであるが。 ところで今回は、ちょっとレイアウトを変えてみた。 だんだんブログの残容量が心配になってきた。といってもまだ30%の使用量であるが、根が心配性で後憂を避けるため、他のストレージサービスにいったん図を登録し、アドレスを参照することとした。それに伴い、ちょこちょこ変更を加えた。 一応、いろいろと工夫を重ねているのである。いままでサボってきただけのことだがね。 |
|
■転送時の注意点(2) 内部の移動量カウンタは8ビットしかないため、データ読み出しから次の読み出しまでの間隔が長いとオーバーフローしてしまい、正しい移動量が得られなくなる。 このマウスのアクセスは、VDP割込みのタイミングで読み出しを行うことを前提としているので、なるべく読み出しルーチンは、VDP割り込みの中で行うようにすべし(と、資料には書いてあるが、これは実際に守られていたのだろうか?)。 ■転送時の注意点(3) ジョイスティックポートのアクセスは、BIOSコールのPSGアクセスを利用し、移動量の読み出しは右図Aのタイミングで行うこと。 このタイミングは、MSXマウスの読み出しの標準的タイミングとなっている。 (なお、資料では「BIOSコールのPSGアクセスを利用し、」となっているが、これはRDPSGのことであり、WRTPSGはダメである。理由は後述。) ■マウスの移動と出力データの関係(右図B) X軸では左、Y軸では上が正の方向となっている。 ■中締め 疑問点。 「MSXテクニカルガイドブック」では大意、マウス/トラックボールを使うとき、MSX1のGETPADはトラックボールに対応していないので自前のルーチンを使うべし、その際、RDPSGを使うと割り込みが許可されてしまうので、直接I/Oポートをアクセスすべし。MSX2以降の場合はGETPADを使用すべし、としている。 ところが、今回入手した資料掲載のサンプルプログラムではRDPSGを使っている。割り込みが許可されちゃっても平気、なのであろうか? と思って、MSX1のBIOSを参照してみると、WRTPSGはルーチン内で割り込み禁止/解除を行っているが、RDPSGは割り込み関係はノータッチである。 というわけで、「テクガイ」記述の「RDPSG」は、「WRTPSG」の誤りであろう。実際、MSX1のGETPADでは、PSGに書き込むときは直接I/Oポートをアクセスし、読み込むときはRDPSGを使っている。 マウスが接続されているポート(Aポート又はBポート)を選択するに当たり、PSGレジスタ#15に値を書き込まないといけないが、その際は、WRTPSGを使わず、直接I/Oポートをアクセスすべし、ということである。 いろいろと資料を突合して、ようやく合点がいった。ことほどさように「現場百遍」は大事である。ちょっと違うか? まあ、いいや。 |
|
■データ出力フォーマット カウンタモードでは、マウスは常時、センサの状態を監視し、内部レジスタにX、Y方向各8ビットのデータを保持している。8ビットデータは最上位ビットを符号ビットとし、負数は2の補数形式となっている(前回の「データ出力フォーマット」を参照)。 ■データ転送シーケンス(右図A) 8ピンは、通常Hレベルであるが、右図Aのように変化することでマウスにデータ転送を知らせる。 シーケンス終了後、内部カウンタはリセットされ、次の読み出し時に出力される移動量は、前回の読み出し後のものとなる。 ■各タイミングの範囲(右図B) ストローブが変化してから最初のデータが確定するまでの時間(Ta)が最大80μsecとなっているのは、使用チップや構造に自由度を持たせるための余裕。 今回入手した資料曰く「この値でもX、Y方向の移動量を読み取る時間は、最少で299μsecとなっていて9600ボーのシリアルマウスから2byteのデータを受け取るのと比較すると10倍程度も速く」なっているそうな。 ■転送時の注意点(1) MSXマウスは、動作中にコネクタが抜けたり、転送途中で処理が中断したとき等に、マウスがハングアップするのを避けるため、規定の時間が過ぎるとマウス側が転送を中止するようになっている。この時間を規定するのが右図Aの「Tj」と「Ti」のふたつのタイミング。 ストローブをHレベルにして、一定時間待つことで、マウスを初期化して転送サイクル開始前の状態にすることができる。 ■中締め 図の書き起こしが面倒で、今回はコピーからスキャンした図を用いた。文章もなにぶんテクニカルな内容なので、あまりアレンジできず、ほとんど引用となった。ごめんねジロー(Powered by 奥村チヨ)。 なお、図をクリックいただくと、ちゃんと読めるサイズの図が表示されるはずである。横倒しの図となっているので、頸を捻挫しないよう留意されたい。 データ転送のハナシは続く。 |
|
■仕様決定検討事項 「テクニカルガイドブック」によれば、MSX2になってマウスの仕様が決定されたとのことである。 今回入手した資料では、仕様決定に当たり、次の点が考慮されたとしている。 A 高精度であること B 本体側にあまり負担がかからないこと C 多機能であること D 本体との接続が容易であること Aについては、価格対性能、精度が高すぎるとかえって使いにくいこと、毎秒100カウントの分解能であれば約7cm四方の面積でMSXの画面がカバーできること、等により毎秒100カウントとされた。画面解像度から、いきなり答が出そうな気がするんだけどな。 Bについては、(a)本体CPUで移動距離を求める、(b)マウス側で移動距離を求める、の2案があったが、(a)はコストダウンには有効ながら本体の負担が大きいことから、(b)が採用された。この点は、昨年の実験(いたずら)の結果から見ても妥当なところだろう。 Cについては、「マウス対応のソフトは多くなく、マウスの高い操作性を享受できないのは惜しい」との理由で「カウンタモード」と「ジョイスティックモード」が用意されたとのこと。どっちか言うと「マウスでもゲームできまっせ」と売り付けるマーケティングっぽい理由だったのではなかろか? 実際にマウスでゲームするとどうなるかは、「MSXマガジン」1988年11月号140〜141頁「マウスを使ってゲームをしませう!」を参照してほしい。全然、盛り上がっていない。確か他にも同種企画があったはずだが、失念。 (追記)1989年5月号132〜133頁に「ジョイスティック、パッド、マウス比較」の記事あり。ここではマウス対応ゲーム「ゼビウス」でベンチマークをとっており、ジョイスティックモードは使っていない。ただし、パッドを用いた「サイコワールド」のベンチで、マウスの参考値を掲げている。ジョイスティックモードかどうかは分からないが、パワーパッド61,700点に対し2,700点というひどい点数である。 Cについて、専用インターフェースを用意するより既存インターフェースを利用するほうが価格的に有利。RS232Cはオプションとなっている機種もある(と記事は表現している)ので、ジョイスティック端子を使う、との結論となった、とのこと。このへんも結論ありきの後付理屈の気がするなあ。 ■ハードウエア ほとんど前置きばかりとなったが、ハードウエアの概要は右図のとおり。 X軸及びY軸の移動距離について、4ビット×4回データ転送している。ちなみに、データ転送シーケンスは規定しているが、それを実現するハードウエアについては「4bitのワンチップCPUでカウントする」以外、何も規定していない。2007年11月8日付け「マウス・メモ(3)」の写真中、「ナゾの16ピンIC」として示したのが、この「4bitワンチップCPU」かも知れんね。 ■まとめ 次回は、資料のキモである「データ転送シーケンス」についてまとめたい。でも、図が面倒なんだよなあ。 ところで、この「マウス・メモ」、2007年10月22日付けから続いている「長寿シリーズ」となっている。マウスの何がそんなに面白いのだろうね。 |



