SOARISTO工房 Logo

ペガソス計画(6) - SHARP「CYBER STICK」の接続

 前回の続きです。

 ArbotiX-M(Arduino)にフルカラーTFT液晶ディスプレイ(uLCD-43PT-AR)が接続できたところで、入力系に移ります。

SHARP CYBER STICK(CZ-8NJ2)

 SHARPの「CYBER STICK」(CZ-8NJ2)を、ArbotiX-Mに接続します。

 CYBER STICKは、1989年発売(当時の標準価格:23,800円)とのことですから、もう30年も前の製品になります。

 買ってはみたものの、当時の愛機は、NECの「PC-9801VX41」(当時の標準価格:630,000円)に、ジョイスティックポートが付いた「FMサウンドカード」(PC-9801-26K)の組み合わせ。

 「いずれI/Oドライバでも作るか」と思っていましたが、けっきょく作らず仕舞い。箱に入れたまま、お蔵入りになっていました。

Sharp CYBER STICK (CZ-8NJ2)

 と、いうことで、ほぼ新品の状態です。

 ところで、なぜいま、長期放置プレイ状態であったCYBER STICKを、引っ張り出してきたのかというと・・・。

 それは、今回の「ペガソス計画」において、非常に重要な入力デバイスとなるためです。

#と、その前に、はたして、30年ぶりに、電源が入るのかどうか。0xF9C8

Raytheon Phalanx CIWS(Close-In Weapon System)

 こちらは、米国海軍、タイコンデロガ級ミサイル巡洋艦、いわゆるイージス艦の「戦闘指揮所」(CIC; Combat Information Center)です。

 火器操作要員が向かっているのは、Raytheon社(旧General Dynamics社)の「近接防御火器システム」(CIWS; Close In Weapon System)、「Phalanx」の制御台(コンソール)です。

Raytheon Phalanx CIWS(Close-In Weapon System)

 もう少し分かりやすい画像が、こちらです。

 利発そうなお姉様の前にあるのが、Phalanxの制御台。しっかりと、ジョイスティックが写っています。

 微妙に形状は異なるものの、ほぼCYBER STICKと同じ。これを、入力に使わない手はありません。

 そう、本物のPhalanxさながら、ジョイスティックを使って、砲台のパン(左右方向)、砲身のチルト(上下方向)を、操作しようという訳です。

SHARP CYBER STICK(CZ-8NJ2)

 と、いうことで、まずはハードの作製。

 以前に少し紹介しましたが、ArbotiX-Mの入出力インタフェイスを集めた回路上に、実装しました。

#「インターフェース」と書かないところが、工学系。0xF9C7

SHARP CYBER STICK(CZ-8NJ2)

 CYBER STICKのケーブルは、D-Sub 9ピンの「メス」。よって、基板側は、D-Sub 9ピンの「オス」になります。

 D-Sub 9ピンコネクタの足は、特殊なピッチのため、秋月電子の「DSUBコネクタDIP化基板(オス・メス兼用)」を使って、2.54mmピッチに変換しています。

 ちなみに、オスの場合は、基板上にシルク印刷で書かれているピン番号が「間違っていました」と、コソッと書かれています。

#ハンダ付けしてから気付かないよう、注意しましょう。

 ArbotiX-M側の信号線は、出力が1本、入力が6本の、計7本となります。

 細かくは、データ要求(REQ)が1本、アクノリッジ(ACK)が1本、4bitデータ上位/下位表示(LH)が1本、4bitデータ入力(D3~D0)が4本です。

SHARP CYBER STICK(CZ-8NJ2)

 つづいて、制御ソフトの作成。

 実は、当初はかなり難航するのかと思っていたのですが、意外にあっさり読み出しに成功してしまいました。0xF9CF

 画像は、CYBER STICKの信号線を、ロジックアナライザでスヌープしたものです。

 「REQ」に対する「ACK」と「LH」の動きを理解すれば、データを正しく読み出すことができます。

SHARP CYBER STICK(CZ-8NJ2)

 「REQ」を“立ち下げる”と、CYBER STICKは「データ転送要求」と理解し、1サイクル50μsの周期で、6サイクル分、データを吐き出します。
(正確には、REQを立ち下げている時間により、データの転送速度を4段階に指定(50 / 96 / 144 / 192μs)することができますが、ここでは「最速モード」(50μs)で読み出すことを前提とします)

 1サイクルは、2回の「ACK」からなり、「ACK」の“立ち下がり”の時の「LH」を比較することにより、8bitデータの上位4bit/下位4bitを判定することができます。


(「CyberStick.c」)

 CYBER STICKの読み込みルーチン(抜粋)です。

SHARP CYBER STICK(CZ-8NJ2)

 実行結果です。

 ジョイスティックとスロットルの操作量は、分解能8bit、256段階(-128~127)で読み出すことができます。

 2byte目(D1)がジョイスティックのY方向、3byte目(D2)がジョイスティックのX方向、4byte目(D3)がスロットルに、それぞれ対応します。
(5byte目(D4)は、「オプション」となっていますが、実質的には接続されていないため、表示していません)

 また、ボタンの状態は、1byte目(D0)および6byte目(D5)で読み出すことができます。

 AボタンおよびBボタンは、本体とジョイスティックにあり、どちらかのAボタンを押すと、1byte目(D0)の8bit目(b7)が、どちらかのBボタンを押すと、1byte目(D0)の7bit目(b6)が、立ちます。
(本体とジョイスティックを分けて読み込むには、本体側のAボタン(A')は、6byte目(D5)の6bit目(b5)、ジョイスティック側のAボタンは、6byte目(D5)の8bit目(b7)、本体側のBボタン(B')は、6byte目(D5)の5bit目(b4)、ジョイスティック側のBボタンは、6byte目(D5)の7bit目(b6)で、それぞれ見分けることができます)

 なお、画像では、ジョイスティックとスロットルの操作量が、いずれも「0」となっていますが、これは、きちんと中立位置をキャリブレーションしてあるからです。

Sharp CYBER STICK (CZ-8NJ2)

 中立位置のキャリブレーションは、本体後面のボリュームで行います。

 ただ、ドキュメントにも、「センター位置は、7Fhまたは80hとするが、±2の誤差をみておく」と書かれているとおり、ジョイスティックを戻したタイミングにより、必ずしも「0」にならない場合が多く、また、数値は状況によりフラつきます。
(電源を入れ直したタイミングでも、余裕で「±4」ぐらいズレます)

 さらに、ジョイスティックやスロットルの操作量は、-128~127の間でリニアに変化するのかと思っていたのですが、実際に動かしてみたところ、上下(および左右)の傾きに対し、4分の3ぐらいの位置で、いきなり限界値(-128または127)になってしまいます。

 よって、このCYBER STICKを、砲台や砲身の操作に用いる際には、中立位置の自動キャリブレーションや、フラつきに対するフィルタリングなどの付加処理が、必要となりそうです。

(つづく)

〔参考情報〕
 ・アナログジョイスティック(サイバースティック)関連 (X68000 LIBRARY)
 ・サイバースティックでアフターバーナーを遊びたい(3)まとめ(CHILDHOOD'S END)

Trackback(0)

Trackback URL: http://www.soaristo.jpn.org/mt/mt-tb.cgi/1198

Post Comment