出来てたけどアップするの忘れてたので上げておく。
木曜日, 8月 9th, 2007VBで作成してたけど、ふと思いつきVisualC++ 2005 Express Editionで作り直し+機能追加したもの。
(動作環境)
.Net Framework 2.0
FTDI ダイレクトドライバ
対応機器は参考にさせていただいた「くすのき電算室」さんで公開されてる回路構成のモノ+シリアルIDになっていたりします。
くすのき電算室さんはレビューとかいろいろと参考になります。
VBで作成してたけど、ふと思いつきVisualC++ 2005 Express Editionで作り直し+機能追加したもの。
(動作環境)
.Net Framework 2.0
FTDI ダイレクトドライバ
対応機器は参考にさせていただいた「くすのき電算室」さんで公開されてる回路構成のモノ+シリアルIDになっていたりします。
くすのき電算室さんはレビューとかいろいろと参考になります。
パラレルポート接続のエンジンをPerl・マクロ編集はVBScriptのHTAっていうコマコンですが被験者達(笑)の様子を見てると実用性の限界に達してるのを感じたので素直に1アプリとして完成させようということでセコセコとやってます。ちなみに暇つぶし勉強がてらVisualBasic 2005 Express Editionを開発に利用。ひさびさにVisualBasicまじめにいじってるけど、ずいぶん変わってるなあVB……。
さて。パラレルポートでの接続だとコントローラを2系統同時に操作するにはどうにも面倒なことになりそうな気配があり、サイトで情報公開してる人が居るUSB接続でのコントローラを同時に2系統操作する方針に現在は転換しております。参考にさせていただいたサイトと使ってるUSBのシリアル→パラレル変換チップ(FTDI社のFT245BM)を使っているIPI社のデモ基板USB245BPを購入(回路組むのに手間かけたくなかったので)、手持ちのテスト用PSパッドとつないで早速テスト。参考にしたものとはピンの結線が私のパラレル接続バージョンと微妙に違ってどうしようかなあと思ったんですが、さしあたって動くかどうかコマンド送信できるプログラムが作成できてなかったのでマネッコ結線(^^;シリアルナンバーもFT000001にあわせて公開されてるコマコンアプリ使わせてもらって……。
おk。
通信速度(?)の微調整は必要そうですが一通りの操作に問題無しです。 まずは試しにってことで1個しか基板買ってないわけですが買い足せってことですかね。なんとなく、本当になんとなくで使い道も考えずに単体チップも購入してるんですが考えなさすぎで持ち腐れ決定っぽい(・w・;
#確認しきれなかったけどアレ完成してるはず。ちょっと確信がもてた>Kの人 以下参考。ただのメモ
PS NG PS(参考)
D0 ↑ ↑ ←
D1 ↓ ↓ ↓
D2 → → →
D3 ← ← ↑
D4 □ A ○
D5 △ B ×
D6 × C △
D7 ○ D □
USB245BP
Pin
D0 1
D1 2
D2 3
D3 4
D4 5
D5 6
D6 7
D7 8
GND 15
![]()
120フレーム制限解除。
新規マクロ作成時に最大フレーム数指定可(30フレーム単位)
レバー方向の入力は任意のセルを選択して数字キーで入力。
テンキーでも通常数字キーでも可。レバー入力消去はDel、BS、Space。
あとは細かいバグ取り……
とりあえずここに置いておくのでフィードバックよろ。
マクロ実行本体の方は詰めれるところ詰めた割に効果が薄くてションボリ。
なので、貼り付けたスクリーンショットを見てもらえばわかると思いますがマクロ編集環境の方をせこせこと開発してます。これ作ったら
思った以上に動作検証のテストが楽になりました。
うーむ、制限なしのVBScriptって遊べすぎる(・w・
さて。
今の時点での機能、および仕様です。
「マクロの編集はマウス操作だけで完結」
※キーボード使うならテキストエディタとか表計算とか使いましょう。
「編集したマクロをファイルに保存」
・直前フレームのNフレーム延長記述は保存できない。
・必ず120フレーム分が記述されたファイルとして作成される。
「保存したマクロの読み込み」
・長さ120フレームを超えるマクロは120フレームまでを編集画面に読み込み、121フレーム以降は読み込まれない。
・120フレームを超えるマクロを保存しなおすと121フレーム以降は欠落する。
「任意のフレーム間のリピート実行」
・指定したフレーム番号の範囲を指定回数実行させます。
「編集中マクロの実行」
実装度80%、開発優先度(高)
リピート実行以外は厳密には編集中のマクロ実行はされない。
→一度ファイルを保存して実行する必要がある。
「マクロ実行時の左右反転出力」
1P側記述を2P側として出力させることが可能。
出力数値のXOR取るだけ。実装にかかった時間3分。
「実行ログ表示」
標準出力へ出力している内容を別窓で表示する。
実装中。
まあ、こんなとこですかね。
実用レベルといえば実用レベルだけども・・・って感じ。
実装して思ったけど繰り返し実行は、硬直フレーム計算に超便利です。
ふと、MIDIファイルをマクロに変換する仕様を決めれば、ピアノロール画面でマクロ組めるじゃん。
とか思ったんですが、「苦労>>>>得られる物」って予感がするので忘れることにします。
根っからのデジタル脳を切り替えて、K氏のレクチャーを参考にトランジスタ用意してアナログ回路を自作、テストで完動確認できたから8方向+4ボタン1系統の自動操作環境完成です。次はゲートIC使って、8方向+8ボタン2系統の操作環境か、それともV-Syncとの同期か?
Perlのプログラムの方は、テンキー表記に準じた操作内容CSVファイル(カンマ区切りテキスト)を読み込んでパラレルポートへ出力をします。
今のところ暫定仕様ですが、自動操作用CSVは
1行=1フレーム(1/60sec)
レバー方向:1232456789 ニュートラルは「5」
ボタン:ABCD(鉄拳的にはLPRPLKRK)
を基本にし、拡張記述として
行頭「.」につづけて「N」(任意の数)=前フレームをNフレーム繰り返す
行頭「_」=全入力なし状態
を用意。編集はExcel使えば楽かな?
![]()
最風連打再生中のPC画面↑
で、こっちが動画→最風
オマケのきしょいの。63xN
![]()
まあ、テストで動かしててもウチのPS2壊れてないしかまわないかということで作業を進めます。あ、同じことして壊れたって人いても知らないので、悪しからず。
まず、昨日購入したジャンクの初代PSのパッドをひん剥いて、中の基板を取り出します。基板の回路パターンを眺めて上下左右○△×□のボタンとGNDに対応した基板の箇所にコードを半田でくっつけます。この型番のパッド(SCPH-1080)は圧電素子けずらなくても半田付けできる部分が備わってるので楽チン
コードを9本半田付けできたら、次はそのコードとパラレルポートからの信号線をソフトウェアで制御する内容に合うようつないでいきます。私が作成してるプログラムでは以下のように規定して、上からパラレルポートの2番、3番、4番……9番となっているので、2番を↑、3番を↓、4番を→、5番を←というようになります。
1 2 3 4 5 6 7 8 9 10 11 | # キー入力データ my %code = ( D_UP => 0x01,#1 0b 00000001 ↑ D_DOWN => 0x02,#2 0b 00000010 ↓ D_RIGHT => 0x04,#3 0b 00000100 → D_LEFT => 0x08,#4 0b 00001000 ← B_1 => 0x10,#5 0b 00010000 button1 B_2 => 0x20,#6 0b 00100000 button2 B_3 => 0x40,#7 0b 01000000 button3 B_4 => 0x80 #8 0b 10000000 button4 ); |
上下左右のキーの結線(といっても仮繋ぎ)をして、とりあえずプログラムから動かしてみました。PS2の鉄拳5で風神ステップを20回ほど自動実行。キー入力認識のタイミング調整ができてないのと、プログラム的に詰めれてない部分なんかもあって数回ミスってますがw。
キャプチャ環境がないのでIXYDigitalで録画した動画です。AVIをVLCでASFに変換してみました。
自動操作テスト動画
この動画TVBOXes+PS2コンポーネント接続はこんな風にうつります。という意味もあるかもしれない。
今日の買い物。
PSパッドSCPH-1080 2個
プリンタケーブル 2本
21ピンRGB-D-Sub15ピンケーブル 1本
全部ジャンクしめて450円くらい。最後のは使い道が分かんないけどなんとなく買ってしまった。
時代的にはUSBのシリアル/パラレル変換とかして開発するのが流行りかなあとは思うんですが、余分な出費多そうなので流行りを無視してPCのパラレルポート入出力で乗り切ることにします。最終的な対象ハードはコントローラ構造が簡単なMVS(NEOGEO)です。今回作成するものを基礎として、パラレルポート→コントローラへの入力電圧を調整する回路その他を作れば1レバー+4ボタンまでのゲームで1プレイヤー分の操作をすべてきることになる予定。スタートとかセレクトはどうするのかという課題がありますけど(^^;
#PSを開発テストで使おうと思ってたけど電圧3.6Vに落とさないといけないから、信号出力をテストして動いたと思ったのは気のせいみたい。
ハード面は今、電気テスターがみつからなくて進んでなかったりするのですが、ソフト面は案外さくさくいってたりします。
開発言語はActivePerl 5.8.8です。Perlでこんなことやってる人いないしネタっぽくていいです(笑)
パラレルポートをPerlで操作するためにCPANモジュールを追加します。
ActivePerlですのでppmを使ってインストールすればいいので簡単です。
追加するモジュールはDevice::ParallelPort、Device::ParallelPort-drv-win32の2つ。
Device::ParallelPortでは内部的にinpout32を呼ぶため、配布サイトのページ最下部にある「Download Inpout32.dll and source code here」よりZIPファイルを取得し、中からinpout32.dllを取り出します。
使用するパラレルポートはECPプリンタポートI/Oの範囲が0×378から始まる設定にします。(BIOSで設定できる)
作成するPerlスクリプトと同じフォルダにinpout32.dllを置きます。(WindowsやSystemディレクトリあたりでもかまわないですが)
これでソフトの開発に関しては準備完了。