2002-9-18 更新
環境改悪ツール(?)
テンキー操作でゲームで遊ぼう

プレイステーション用キーボードアダプタ

~ 試作編 ~

→ 制作編
→ 完成編
ご案内
プレイステーション用コントローラを自作したいとお考えの方は、是非こちらのページも参考にしてください。

きっかけ

MindStorms関係のOFF会にて、「ポケットコマンダー」を開発された石川さんによれば、「ワンチップマイコンのプラットフォームとしては、ポケットステーションはとても良いです」とおっしゃるので、私も試しにポケステと秋月電子通商の書き込みツールを購入してみました。しかしプレステを持っていないくせにポケステがあるのも妙なので、プレステを購入するか否か悩んでいたのでした。

そんな時、同じ職場の自他ともに認めるゲーマーのK氏がプレステ2を買うというので尋ねてみたのでした。

私 「古いプレステはどうするんです?」
K 「欲しい?」
私 「うん^^;」

そもそもK氏のプレステは3台目であり、そのうち1台が壊れて動かないというので、とりあえず借りて分解することにしました。実際には故障などしておらず、CD-ROMドライブのレンズをアルコールで拭いただけで、何事もなく動き出してしまったのでした。実験材料としてありがたく頂戴することにしました。

ところが、プレステで遊んでみても、どうにも操作性が悪いのです。親指のボタン操作に馴染めず、ゲームキャラクタを機敏に正確に動かすことができないのです。

先人はDPPなるモノを発明し、普段使い慣れたコントローラをPCに接続しゲームを楽しんでいます。日本国内においても愛好家が大勢いらっしゃいます。しかしながら...

その昔ロードランナーで鍛えた私には、ゲームの操作はテンキーでなければならないのです。

このような人は多いはず(←独断100%)なのに、プレステ用テンキーパッドなどという装置はいまだ聞いたことがありません。こうなったら、せっかくもらったプレステを無駄にしないためにも、自作するしかありません。

ざいりんくすだ!

プレステとコントローラ間の通信は250kHzのクロックに同期したシリアル通信です。最近のワンチップマイコンは20MHzで動作するものもあるので、ゲームパッドのエミュレーションは一見簡単そうなのですが、受信とコマンド処理と送信を行おうとすると、すぐに処理速度が破綻してしまいます。はじめはPICかZ80かH8で作ろうと思っていたのですが、キーボードからの入力も受け付けなければならないことも考えると、あきらめた方が良さそうでした。

仕方なくweb上に散在する電子工作関係のページを漁っていたところ、PICでおなじみの後閑さんのページでCPLDなる文字を見つけたのでした。

「CPLDってなんだ?ソフト的手法で論理回路が組めるの?」

わたしは過去にパソコン周辺機器メーカー(の技術サポート)に居たことがあり、PALとかGALとかいう言葉だけは聞き覚えがありました。これらは一般的にはPLDと呼ばれるのですが、PLDをたくさん寄せ集めた(Complexした)ものをCPLDと言うのだそうです。しかしこの手のモノは普通なら開発環境は数十万円と決まっています。

「個人の趣味人でも使いこなせるのだろうか?なぬっ、開発ツールを無償で提供だって!」

PLD専門メーカーであるXILINX社XC9536-15PC44やXC9572-15PC44なら数百円で購入できます。XILINX社のwebページではWebPACKという開発ツール一式をダウンロードすることができます。CPLDに論理回路を書き込むためのケーブルの回路図も公開されていますので、ワンチップマイコンのプログラミングができる方なら、何の問題もなくCPLDに入門することができます。

XILINX社のページからデータシートをダウンロードして読んでみたところ、数十ビットのカウンタやシフトレジスタがあるような回路規模でも平気で作れるようです。どう考えても懸案の装置の制作に最適な部品に思えてしまいますね。

設計

下図は本機の概念図(?)です。プレイステーションとキーボードの間を取り持ちます。

プレステとの通信はCPLD、キーボードとの通信はPICを使用します。キーボードはPC-9800シリーズ用に対応します。なぜPS/2ではないかというと、PC-9800はRS-232Cと同様な19200bps調歩同期式シリアル通信ですが、PC/ATではデータ信号とクロック信号をビットごとに制御しなければならず不便なのと、さらに悪いことには、PC-9800では全てのキーのキーコードが1バイトになっていて、キーを押しても離しても1バイトだけ受信すれば良いのですが、PC/ATのキーボードは、キーの種類や押すか離すかによって、可変長の(バイト数の異なる)キーコードが送られてくるのです。PS/2キーボードはワンチップマイコンには荷が重いので不採用としました。

98が現役を退いた今でも、98用キーボードはいくらかストックがある(^^;)のですが、職場の引っ越し整理のときに、誰も使うあてのないテンキーパッド「エレコムTK-98W」が廃品置き場に転がっていたのを拾ってあったので、まずこれをつないてみましょう。2/4/6/8を方向キーとしますが、他のキーの割り当てに困るので、キートップの配列を変更します。このテンキーパッドにはトラックボールが付いていますが、今回は「プレステ互換マウス化」は行いませんので悪しからず。

▲標準の配列
▲キートップを全てはずす
▲配列変更

内部の配線を変えるわけではなく、単にキートップを交換しただけですので、見た目は "2" "4" "6" "8" でもキーコードは "." "2" "=" "6" のものが送られてきます。これは受信した側で対応しなければなりません。したがって、「普通のキーボード版」と「TK-98W(改)専用版」ではPIC16F84のプログラム(の変換テーブル)を変える必要があります。

HDL

CPLDの論理回路を作るため、HDL(Hardware Description Language : ハードウェア記述言語)を勉強しなければなりません。VHDLというのとVerilog-HDLというのが2大勢力らしいです。私はサンプルソースを見てVerilogの方が読みやすかったのでこちらを覚えることにしました。

試作

試作機はPIC16F873を使って制作しました。873はシリアル通信機能を装備していますので、これを利用してキーボードとの通信を行います。

キーコードは常に1バイト単位なのでバッファリングする必要はなく、PICのシリアル通信機能を使うより、ポートをポーリングして受信した方が、かえって簡単にできまうということを、後になって気づきました。これならPIC16F84でも充分事足ります。

使ってみる

XI[sai] JUMBO をプレイしてみました。練習モードで99レベルに到達できました。標準コントローラでは私にはとても無理なので、これは快挙です。これから安心してソフトが買えます。

この喜びを伝えるべくK氏にも聞いてみました。

私 「キーボードをプレステにつなぐのに成功したけど、試してみないっすか?」
K 「いらないっ」

使いやすいのにぃ...


はい。試作編はここまでです。

実際に作ってみたいという方は「制作編」をご覧ください。