今風太ワールドを楽しむ(31)
更新日:2020年5月19日

PasocomMini PC-8001のJOYSTICK TWINを作る(2)
やっと完成しました。いろいろといじっていたら今頃になってしまいました。いくつかのことを平行してやっていますのでご理解よろしくお願いいたします。ここで前回の復習をしておきます。
(JOYSTICK TWINの構成)
このJOYSTICK TWINは外付けのEEPROMのデータを書き換えることで自分に合ったキー配置を行うことが出来るゲーム操作用キーボードです。あくまでもキーボードですのでお間違いなく。PC-8001ミニに内蔵されているゲームや打ち込んだゲームを遊ぶのに使用します。自分でプログラムを打ち込んだゲームはファイル名などをキーボードから打ち込まないといけないので別途キーボードが必要になります。私はUSBセレクターでキーボードとジョイスティックを切換えてゲームを楽しんでおります。
(ジョイスティックとキーボードを切換える)
前回も写真を載せましたが最終形のものを載せておきます。少し操作の名称が判るようにしました。あえて各キーには何の表示もしておりません。皆さんで自由にして下さい。
(完成したJOYSTICK TWIN)
すみません、貼り付けたジョイスティックの文字が間違ってました(kが抜けてました)。
内部の回路図を記します。クリックすると大きく見ることが出来ます。
(JOYSTICK TWINの回路図)
USBマイコンにはPIC24FJ64GB004を使用します。私的には高級なマイコンになりますが、USBに接続出来てピン数が多くて入手し易くてソフトを作り易いというチョイスになります。難しい部分は全くありません。やたらとキーを多く接続しているだけです。EEPROMの接続もI2Cではややこし過ぎるのでポート駆動で接続しています。
(プレステ2を分解して取り出したジョイスティック)
今回の製作のキモとなるジョイスティックはプレステ2のコントローラーから取り出しました。最初はコントローラーをそのまま使うつもりでしたが、物理的に内部に全ての回路を入れることが出来なかったのでジョイスティックのみ取り出しました。同じようなジョイスティックはアマゾンなどでも購入出来ると思います。今回のJOYSTICK TWINはジョイスティックの押し込みは使用しておりません。用途が無いと思ったので。
(タクトスイッチ)
操作キーはタクトスイッチを使用します。結構操作力が軽いので指が疲れずに遊べると思います。これは共立さんから購入しました。
(タカチのケース TW11-5-22)
ネットでの購入にはケースが一番迷います。タカチのホームページページで充分寸法を確認する必要がありました。これしかない、と思ってクリックしたら、これしかないほどにピッタリのケースでした。
内部はこのようになってます。キーのブロックごとにユニバーサル基板を使っているので、かなり煩雑に見えますが、配線は難しくありません。
(JOYSTICK TWINの内部配線)
ジョイスティックの高さ合わせと穴の大きさにかなり苦労しました。穴を大きくしてジョイスティックを倒れやすくするとかなり操作に苦労することが判ったのですが、あとから狭めることも出来ませんので、皆さんもケースを加工される時は気を付けて下さい。プレステ2のコントローラーはそのあたりが上手く出来ていたのだと思います。
ここで前回製作をしましたEEPROM書き込み装置のバージョンアップを記しておきます。JOYSTICK TWINを作る過程においてEEPROMに書き込む情報を増やしました。EEPROM書き込み装置のPICのプログラムとPCアプリを改良しています。適宜ダウンロードしてお使い下さい。(PICのプログラムにはちょっこしバグがおりました)
(EEPROM書き込み装置を制御するVBアプリ)
方向ファイルの読み込みと書き込みを追加しています。ジョイスティックの部分の判定もEEPROMで各自が変えられるようにしました。詳細は後述します。
EEPROM書き込み装置制御アプリの実行ファイルはここです。
EEPROM書き込み装置のPICのファイルはここです。
ここからJOYSTICK TWINのプログラムについて記します。
(キー配置に対応するキー名称割り当て)
EEPROMにデータを定義するためにキー名称の割り当てを行いました。上図を参照下さい。A1-A9、B1-B9はジョイスティックによる割り当てです。各キーには自由にコードが割り当てられるのでこれから私が示すデータはあくまでも1例ですので、皆さんの使い易いように変更して頂ければ結構です。
(EEPROM内の割り当てマップ)
EEPROMへの制御はあくまで16進数ですが、マップは判り易いように10進で表示しています。まずアドレス10から16バイト分は識別符号が入っています。EEPROMが挿してなかったり他のEEPROMが挿されていた場合の異常動作を防ぐためです。16バイトには JOYSTIC TWIN 100 と記してあります(ここもkを忘れていました。気にしないで下さい)。黄色のセルがアドレスになります。
アドレス100からはそれぞれのモードに対するUSB送信コードが入ります。各モードづつ33バイトを使用します。判り易いように各モード40バイト分を確保しています。メニューモードが1面とゲームモードが20面分のデータが入ります。(上図マップでは1面33バイトとなっていますが最終的には1面35バイトを使用します。ややこしくてすみません)
操作キーには1種類のコードを送信するものもあれば2種類のコードを送信する場合があります。アドレス1000からはその2種類送信の場合のコードが入ります。ここの部分はUSB送信コードではなく、識別のためのコードになります。20種類分で計40バイトを使用します。
ジョイスティックをテンキーの情報に変換するためにアドレス1500から100バイト分を割り当てています。この部分がいろいろいじっているうちに改良しようと思った部分です。ジョイスティック操作の難しいところは操作している自分は上下左右のしっかりとした方向に倒していると思っていても斜めに操作している場合が頻発する可能性があるのでその部分を各自で変更出来るようにしています。
(EEPROMのデータ割付)
上図はEEPROM内に書き込むデータの割付内容です。まず255はそのキーが動作しないことを意味します。EEPROMを消去するとFFH(255)になるのでそのようにしています。1〜127はUSB送信コードになります。ここに定義するコードはUSB HIDキーボードの送信コードです。全てのコードが送信出来るわけではありません。今回のJOYSTICK TWINに定義したコードはそれを参考にして下さい。他のキー操作を定義したい場合はWEBでUSBキーボードコードなどとググルとコード表が出てきます。今回のシステムでは10進数で表記していますのでそのあたりはご注意下さい。
次に128〜147は2種類のコードを送信することを定義しています。その内容は別途定義しています。最後に250,251,252がコントロールコードになります。それぞれCtrl、Shift、Altになります。これはあくまでもUSBキーボードに対する定義になります。PC-8001ミニに送り込むと違う意味になるコードもあるので気をつけて下さい。これらのコードがあれば全てのPC-8001ミニのゲームを操作することが可能と思います。
(全てのモードに対するキー操作表)
左からMがメニューモード、G0〜G19がゲームモード0〜19になります。ゲームモードは20種類あります。今回のJOYSTICK TWINもゲーム12はゲーム19は未定義にしてありますので皆さんで自由に定義して下さい。(上記のキー操作表はクリックすると大きく見れます)
(全てのモードに対するコード表)
青色にセルがUSBコードです。そのままUSBで送信されます。黄緑色の部分が2種類コードになります。別テーブルを参照して2種類のUSBコードを送信します。ピンク色の部分がコントロールコードです。このコードは2種類コードに含まれていることもあります。
(2種類送信コードの割り当て)
表中のS+Hと記した部分はShift+Hキーになります。S+RはShift+Returnキーです。137〜147は空けてありますので自由に使って下さい。
コード表のB1〜B9は右側のJOYSTICK部分です。ゲームで操作するテンキーの部分に割り当てています。私は斜め方向の操作を重要視していますので2と4の多重押しなどを登録しています。ゲームによっては使いずらいこともあると思いますので皆さんの自由に改造して下さい。
さてこのA1〜A9、B1〜B9のキー操作の検出をどうしているかを少し説明します。ジョイスティックはアナログ値を出力します。ADコンバータで読み取ってデジタルに変換します。今回使用するPICのADコンバータの処理はその位置情報を%で出力するようにプログラムされています。その部分を一部改良して最大値99%になるようにしました。そうすることでジョイスティックの上下、左右の位置を10分割出来ます。その分割を読み込んで配列に割り当ててテンキーのコードにしています。面で定義が出来るので皆さんの使い易いように出来たと勝手に思っています。
上下方向をVR1の%値で10分割、左右方向をVR2の%値で10分割してPICの2次元配列に割り当ててテンキーの値を読み出します。斜め方向が出にくいようにしましたが如何でしょうか。ジョイスティック取り付けによっては傾けても10%以下や90%以上が出ない場合もありますのでご注意下さい。ジョイスティックをテンキーに割り当てる場合、テンキーの5は動作しないようにしていますのでお間違いなく。
このJOYSTICK TWINで遊べるゲームのゲームモード番号の対応表を載せておきます。先にも記しましたが全てのゲームがジョイスティックでゲームし易くなる訳ではありませんので、ご理解よろしくお願いいたします。
(各種ゲームに対応したゲームモード番号)
私の麻雀ゲームもこじつけで操作が出来るようになりました。
PICのプログラムには定番のMicrochipのmlaをダウンロードして使用します。ファイルを解凍してセットアップするとCドライブにmicrochipのフォルダが生成されます。これをフォルダごと自分の作業エリアにコピーします。フォルダ名を判り易いように書き換えます。今回はmicrochip_24F_USB_KB_Joystic_New_Twinとしました。フォルダの中には今回のソフト開発には必要のないものも含まれていますのでそれは削除しておきましょう。
(必要なフォルダの構成)
上記のフォルダ以外は削除しても大丈夫です。このJOYSTICK TWINはUSBのHIDキーボードとして動作します。今回書き換えた部分は次の通りです。
(ヘッダーファイル)
(Cソースファイル)
それぞれのファイルは別々のフォルダに入っていますので、番号で判るようにしています。書き換えるファイルのみをダウンロード出来るようにしていますので、それぞれのフォルダ内にコピーして書き換えて下さい。
書き換えるファイルはこちらからダウンロード出来ます。
最後にEEPROMの書き込みについて説明します。今回ファイルを3種類に分けました。
(各モードに対応したコードデータ)
各モードに35個分のコードを記載したファイルです。テンキーの5に対応する部分にも255を配置していますので35個になります。それぞれ3桁の10進数で記載して、カンマでつなぎます。1モードづつ改行して下さい。テキストファイルなのでメモ帳で開くことが出来ます。このファイルの拡張子をda1としていますので他のファイルと区別しています。
(2種類送信の定義データ)
2種類送信の定義データファイルです。10種類で改行して下さい。拡張子をda2にしてあります。
(JOYSTICKのテンキー判定用データ)
テンキー判定用データです。拡張子をda3にしてあります。
(EEPROM書き込み装置を制御するVBアプリ)
以前に製作したEEPROM書き込み装置でデータを書き込みます。まずPCのVBアプリを起動してCOM接続します。最初に許可ボタンをクリックしてEEPROMを書き込み許可状態にして下さい。次に全消去をクリックしてEEPROMを初期化します。これでEEPROM内部が全て255にクリアされます。続いて識別記号書き込みボタンをクリックして識別記号を書き込みます。続いてコードファイル読込ボタンをクリックして下さい。ファイルを選択出来る画面になりますが拡張子がda1のファイルしか見えないようにしてあるので選択して下さい。その後、コードファイル書込をクリックしてEEPROMにデータを書き込んで下さい。書き込まないところは飛ばすようにしていますがそこそこの時間が掛かります。書込み時はEEPROM書込み装置のLEDが点滅しますのでよくわかると思います。
同様に多重ファイル読込(拡張子da2)、方向ファイル読込(拡張子da3)の順に読み込み、書き込みを繰り返して完了です。EEPROMをJOYSTICK TWINに差し込めば完了です。私が書き込んでいるファイルをダウンロードして使って下さい。又は書き変えて使って下さい。三つのファイルをまとめて圧縮しています。
JOYSTICK TWIN用のEEPROM書き込みデータはこちら
今回の解説は大変長文になりましたが興味のある方は製作に挑戦してみて下さい。不明点があればメールを頂けると幸いです。
(こんな感じに仕上がってます)
PasocomMini PC-8001に興味を持たれたらこのページへどうぞ
パソコンミニ公式ウェブサイト
(PC-8001ミニでゲームを楽しもう)
なんとか完成しましたが、うーーん、どうなんでしょうねえ。全てのゲームがジョイスティックを使えばやり易くなると限らないようです。テンキーの2468がやり易いこともあります。もし皆さんが作って頂けるのであれば、まあ状況に応じて使い分けて下さい。もしくは自分が使い易いようにEEPROMを書き換えて使って頂けると幸いです。これからもこのPC-8001ミニに係わっていきたいと考えていますのでよろしくお願いいたします。

「蘇る今風太ワールド」表紙へ戻る