LinuxZaurus に TOWNS PAD を接続する


トラップ <CXL00145_AT_nifty.com>
2003.09.01 Create
2004.11.28 Modify

linux zaurus with joypad
対応確認機種:SL-C7x0/860/C3000

TOWNS PAD があったので

既に 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 壊しちゃいますので。


I/Oポート(オプションポート16)の信号線 (SL-C7x0/860/B500, C3000)

ぱたぱたキーボードを LinuxZaurus に接続する(ハード編) をご参照ください。


DSUB 9 pin コネクタの信号線 (TOWNS PAD の場合)

【DSUB9pin のピン配列(TOWNS PADの場合)】

Pin123456789
名称 A B GND

TOWNS PAD の GND は 9番になっているのですが、 ジョイパッドよっては異なる場合もあるようなので、 テスタでジョイパッドの導通状態を調べてから作ってください。

各ボタンのラインと GND(と思われるライン)をテスタでつなぎ、 導通チェックを行えばすぐにわかります。 ボタンを押すと導通し、離すと非道通になれば OK です。

DSUB9pin の信号端子

ジョイパッド-シリアル変換回路

必要な材料

  • I/Oポートのコネクタ(筆者は e-zaurus用携帯電話接続ケーブルから入手)
  • PIC 16F84A 1個
  • 10MHz のセラロック 1個
  • DSUB 9pin コネクタ
  • ケーブル少々
  • PICを焼ける環境(ROMライタなど)
  • 回路図

    ジョイパッド接続回路図 (for Towns PAD, ATARI準拠ジョイパッド)

    ※上の図で、水色の丸いのは 10MHz のセラロックです(実体配線図的に書いてます)。

    実装例

    【ケースに回路を仕込んでみた例】

    ケースに回路を仕込んだ例(実験用なので無駄にでかいです)

    【SL-C760 と接続した状態】

    jpview1.jpg

    PICに載せるソフトウェア

    ワンチップマイコン PIC 16F84A 用ソフトウェア serjoyp.lzh を用意しましたので、 下記 download より入手してください。 同梱物は、PIC用のバイナリ SERJOYP.HEX と、そのソースファイル SERJOYP.ASM の 2点です。 当然ながら、ROMライタを持っていないと焼けません。

    ソフトウェア処理概要

    処理自体は至極簡単です。 ポートの初期設定を終えた後、無限ループでジョイパッドのボタンの状態を監視し続けます。 ボタン状態に変化が起きたら、(一応)チャタリング防止を行った上でその値を確定し、 ボタンに応じたキーコードを作成して、stowaway keyboard と同じプロトコルでシリアル送信します。

    つまり、ジョイパッドを単にボタンの集合と見なし、小さなキーボードのように使っているわけですね。


    使い方

    ジョイパッドではありますが、論理的には 6つ(TOWNS PADの場合は8つ)しかボタンの無い シリアルキーボードという扱いです。ですので、ぱたぱたキーボードと同様にして使います。 唯一違うのは、ダイレクトモード( -d オプション) を指定することだけです。

    sercode_ksim の入手と詳しい使い方については、 ぱたぱたキーボードを LinuxZaurus に接続する(ソフト編) をご覧ください。

    開始

    停止

    ボタンの割り当て

    現在の設定を以下に示します。 SELECTでコインを投入して、RUNで一人プレイ開始という感じです(笑)。

    ボタンコード
    Ax
    Bz
    SELECT5
    RUN1

    なお、どのボタンが押されたときに何のキーコードを送信するかは、 SERJOYP.ASM 内で決定されています。 もし、キー割り当てを変えたければ、ソースを直して PIC に焼きなおすか、 sercode_ksim に与える設定ファイル (sercode_direct.ini) を変更するか、 ゲーム側で割り当て変更するかしてください。


    あとがき

    linux には、キーボード・エミュレートによるジョイパッド接続ではなく、 本当のジョイパッド接続方法があります。 今回は、先日作成した sercode_ksim を使いましたが、 気が向いたら本来の正当な方法も試してみたいところです。


    download

    2003.8月版 デジタルジョイパッド-シリアル変換アダプタ用ソフトウェア
    serjoyp.lzh
    md5 : a98fb839a5fd8599bfedde7067cc581b *serjoyp.lzh

    参考文献

  • ザウルス宝箱Pro (SLシリーズの技術サポート情報ページに、I/Oポート仕様書やカーネルソース類があります)
  • ぱたぱたキーボードを LinuxZaurus に接続する(ハード編)
  • ぱたぱたキーボードを LinuxZaurus に接続する(ソフト編)
  • りなざうテクノウ : ジョイパッドの製作 (本記事製作の原動力となった記事、クールなジョイパッド接続に感動)
  • びっくまのゴミ置き場 : Linux Zaurus用ジョイパッドの製作 (ジョイパッドの改造手順が丁寧で、読み応えもあり大変参考になりました)

  • [INDEX]