APPLE II 用 USB ジョイスティック・アダプタ

USB ジョイスティック・アダプタはオープンプロジェクトになりました。ファームウェアのソースコードをダウンロードできます。

pic1

初めに

APPLE II にはジョイスティックを接続可能なゲームポートが付いていて、 多くのリアルタイムゲームでジョイスティックが必要でした。 ところが現代では、APPLE II に接続出来るジョイスティックは希少で高価です。 一方、近所の電気店に行ってみると、アナログ入力のジョイスティック、 デジタル入力のゲームパッドが比較的安く売られています。 そこで、これらの機器を APPLE II で使用する方法を考えました。

対応 APPLE II

APPLE II J-plus で動作確認しています。スタンダード、plus も回路が同じなので使えると思われます。
IIe に対応しました。 既にお求めのお客様で、IIe でご使用される方は、サポートをご依頼下さい。
DB-9 タイプのコネクタのタイプもございます。

対応 USB 機器

設計で想定したのは、以下の条件を満たす機器です。

  1. USB 1.1 の HID に対応しており、インタラプト転送の周期が 10ms である。
  2. レポートデータが 8 バイト以下である。 
  3. ジョイスティック、ゲームパッドの場合、X軸、Y軸のレポートデータがそれぞれ 1 バイトであり、最も左 (最も上) が値 0、最も右 (最も下) が値 255 である。マウスの場合は、各軸の変位が 1 バイトの符号付き整数である。
  4. レポートデータにおいて、X 軸のデータの次のバイトが Y 軸のデータである。
  5. 4 つのボタンがレポートデータの 1 つのバイトの上位または下位 4 ビットに対応しており、押されているビットが 1 になる。

現時点で接続を確認した機器を以下に示します。

メーカー型番方式ディップスイッチ設定
サンワサプライJY-P60USアナログ 4 軸 12 ボタン ジョイスティック10010101
サンワサプライJY-P55UCデジタル 2 軸 8 ボタン ゲームパッド00001000
サンワサプライMA-90HUS3 ボタン 1 ホイール マウス10000010
エレコムJC-U912VBKアナログ 4 軸 12 ボタン ジョイスティック10010101
エレコムJC-U2410TWHデジタル 2 軸 10 ボタン ゲームパッド11010101
エレコムM-N1URSV3 ボタン 1 ホイール マウス10000010
SaitekP220デジタル 2 軸 8 ボタン ゲームパッド00011000

性能

本機では USB 通信処理と APPLE II のゲームポートのタイマー処理を一つのマイコンで行っています。 そのため、アナログの分解能は最高でも 85 程度であり、ややブレもあります。通常のゲームでは差し支えないと考えますが、 精密な入力を必要とするアプリケーションには向きません。

APPLE II との接続

コネクタをゲームポートに差し込んで下さい。 ソケットの切り欠きを APPLE II の手前にして差し込みます。 足が曲がりやすいので、まっすぐにして差し込んで下さい。

pic2

ジョイスティック、ゲームパッド、マウスとの接続

必ず、APPLE II の電源を入れる前に接続して下さい。プラグ&プレイは出来ません。

pic3

ディップスイッチの設定

ディップスイッチは、動作中でも切り替えることが出来ますので、色々試しながらセッティング出来ます。

スイッチ 1 - 3 の 3 ビットで、レポートデータにおける X 軸のデータの位置を示します。ビットの並びが通常と逆 (スイッチ 1 が最下位ビット、スイッチ 3 が最上位ビット) なので注意して下さい。例えばスイッチ 1 - 3 が全て OFF であれば、レポートデータの最初のバイトが X 軸のデータとなります。

レポートデータにおいて Y 軸のデータの位置は、X 軸のデータの位置の次のバイトに固定となります。

スイッチ 4 - 6 の 3 ビットで、レポートデータにおけるボタンのデータの位置を示します。ビットの並びが通常と逆 (スイッチ 4 が最下位ビット、スイッチ 6 が最上位ビット) なので注意して下さい。例えばスイッチ 4 - 6 が全て ON であれば、レポートデータの 8 バイト目がボタンのデータとなります。

スイッチ 7 は、ジョイスティック、ゲームパッドを使う場合は OFF、マウスを使用する場合は ON にします。これは、各軸のレポートデータを絶対的な位置と見なすか、前回の位置からの変位と見なすかを切り替えます。

スイッチ 8 は、ボタンのレポートデータのバイトのうちどのビットを使用するかを切り替えます。OFF の場合、下位 4 ビットをボタンデータとして使用します。ON の場合、上位 4 ビットをボタンデータとして使用します。なお、4ビットのデータと APPLE II のゲームポートとの対応は、上位ビットから SW0, SW1, SW1, SW0 となります。

基盤がむき出しですので、ショート事故には十分、注意してください。

良くある質問

こちらをご覧下さい。

ファームウェア

本製品をよりご活用頂くため、マイコンのファームェアのソースコードを公開します。 ライセンスは GNU GPL3 としますのでご活用下さい。

こちらからダウンロード出来ます。

旧版 (IIe 未対応版) のファームウェアはこちら

免責事項

私個人(アマチュア)による手作りです。
不良等の場合は誠実に対応させて頂きますが、
万が一、ご使用で損害が生じた場合、西田ラヂオでは製品以外について保証はできません。
どうか、ご理解のほどお願い致します。

謝辞

Drew さんに、Saitek のゲームパッドをご提供頂きました。ありがとうございました。

雑談

マイコンのソフトウェアによる USB コントローラの実現は、ホスト、クライアントともいくつか発表されており、 西田ラヂオでも非常に興味を持っていましたが、実力が伴わずになかなか実現しませんでした。
書店で USB について立ち読みで勉強して、 Web で勉強し、機器にビット列を流し込んでは反応を見て実験を繰り返し、 何とかオリジナルのホストもどきが動き出しました。
データの変換や送受信に結構な速度が要求されますし、加えて機器によるクロック周波数の変動に対応するための機構も必要になったため、やむなく 20 MHz のマイコンを 27 MHz にオーバークロックしています。。。が、何とか動く物ができました。
バージョンアップ版では、NE558 のタイミング電圧をマイコンで制御するためのアナログ回路を新たに設計し、NE558 を抜かずにゲームポートに接続するだけで使用出来るようにしました。