トラップ <CXL00145_AT_nifty.com>
2003.09.01 Create
2004.11.28 Modify
既に ser_code_ksim のところで前ふりしているような気もしますが(笑)、 手元に ATARI規格準拠の(SELECT, RUN ボタンが拡張されている) TOWNS PAD があったので、 例によって例のごとく、PIC を使ってシリアル接続ジョイパッドにしてみます。
本文書は、ATARI規格準拠のデジタルジョイパッド(一般的には上下左右とABボタンの6つのみ)を、 ワンチップマイコン PIC を使って、シリアルキーボードのように見せ、 ser_code_ksim ダイレクトキー入力モードを使って、 ジョイパッドのように使ってみようというものです。
従って、製作するのは、ジョイパッド-シリアル変換アダプタと、 それに載せるPIC用のソフトウェアになります。
なお、今時 ATARI規格準拠のジョイパッドなんて手に入らないよ・・・という方は、 何でもいいですから手ごろなジョイパッドを分解して、上下左右、ABボタンの部分のみを 有効にしたものを作ればいいだけです。 6つのスイッチの片側を GND につなぎ、もう片側を信号ラインにつなげばそれで出来上がりです。
以下の記事では、Linux Zaurus の I/Oポート から直接、有線による接続を行っています。 赤外線で接続するのとは違って、電気的な接続ですので、十分注意してください。
特に、Zaurus の電源が切れていても、 常に I/Oポート の Vcc からは 3.3V が出ていますので、 回路を接続する前に Vcc と GND が絶対に接触しないように(ショートしないように)確認してください。 Zaurus 壊しちゃいますので。
ぱたぱたキーボードを LinuxZaurus に接続する(ハード編) をご参照ください。
【DSUB9pin のピン配列(TOWNS PADの場合)】
Pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
名称 | ↑ | ↓ | ← | → | A | B | GND |
TOWNS PAD の GND は 9番になっているのですが、 ジョイパッドよっては異なる場合もあるようなので、 テスタでジョイパッドの導通状態を調べてから作ってください。
各ボタンのラインと GND(と思われるライン)をテスタでつなぎ、 導通チェックを行えばすぐにわかります。 ボタンを押すと導通し、離すと非道通になれば OK です。
※上の図で、水色の丸いのは 10MHz のセラロックです(実体配線図的に書いてます)。
【ケースに回路を仕込んでみた例】
【SL-C760 と接続した状態】
ワンチップマイコン PIC 16F84A 用ソフトウェア serjoyp.lzh を用意しましたので、 下記 download より入手してください。 同梱物は、PIC用のバイナリ SERJOYP.HEX と、そのソースファイル SERJOYP.ASM の 2点です。 当然ながら、ROMライタを持っていないと焼けません。
処理自体は至極簡単です。 ポートの初期設定を終えた後、無限ループでジョイパッドのボタンの状態を監視し続けます。 ボタン状態に変化が起きたら、(一応)チャタリング防止を行った上でその値を確定し、 ボタンに応じたキーコードを作成して、stowaway keyboard と同じプロトコルでシリアル送信します。
つまり、ジョイパッドを単にボタンの集合と見なし、小さなキーボードのように使っているわけですね。
ジョイパッドではありますが、論理的には 6つ(TOWNS PADの場合は8つ)しかボタンの無い シリアルキーボードという扱いです。ですので、ぱたぱたキーボードと同様にして使います。 唯一違うのは、ダイレクトモード( -d オプション) を指定することだけです。
sercode_ksim の入手と詳しい使い方については、 ぱたぱたキーボードを LinuxZaurus に接続する(ソフト編) をご覧ください。
現在の設定を以下に示します。 SELECTでコインを投入して、RUNで一人プレイ開始という感じです(笑)。
ボタン | コード |
---|---|
上 | ↑ |
下 | ↓ |
左 | ← |
右 | → |
A | x |
B | z |
SELECT | 5 |
RUN | 1 |
なお、どのボタンが押されたときに何のキーコードを送信するかは、 SERJOYP.ASM 内で決定されています。 もし、キー割り当てを変えたければ、ソースを直して PIC に焼きなおすか、 sercode_ksim に与える設定ファイル (sercode_direct.ini) を変更するか、 ゲーム側で割り当て変更するかしてください。
linux には、キーボード・エミュレートによるジョイパッド接続ではなく、 本当のジョイパッド接続方法があります。 今回は、先日作成した sercode_ksim を使いましたが、 気が向いたら本来の正当な方法も試してみたいところです。