XPで(略)HTAと格闘
火曜日, 5月 29th, 2007![]()
120フレーム制限解除。
新規マクロ作成時に最大フレーム数指定可(30フレーム単位)
レバー方向の入力は任意のセルを選択して数字キーで入力。
テンキーでも通常数字キーでも可。レバー入力消去はDel、BS、Space。
あとは細かいバグ取り……
とりあえずここに置いておくのでフィードバックよろ。
![]()
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!perl # PerlParallelPortMacroPlayer # by MDR mdr@sevenearth.com use strict; use Device::ParallelPort; use Time::HiRes; my $port = Device::ParallelPort->new; # パラレルポートを出力方向にセット $port->set_bit( 21, 0 ); # データビット2をN $port->send_data( chr(0x02) ); |
![]()
まあ、テストで動かしててもウチの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ディレクトリあたりでもかまわないですが)
これでソフトの開発に関しては準備完了。
何を間違ったのか、いつのまにかFPGA基板でデジタル回路の開発をしたい衝動に駆られて、Verilog HDLの入門書とかを本屋で物色してた昨日の私のこと。
始まりはウチの環境(いわゆるテレビそのものが無い。IO DATAのTVBOXesを使って液晶ディスプレイをテレビとしてます)でMVS遊ぶのに必要となってくる機器について情報あさってたってだけなんですけどね。まるっきり予備知識が無い訳じゃないけど、本当に理解してるかといえば怪しいレベルですから。当初、TVBOXesにコンポジットやS映像で接続できるのを完璧なまでに失念しててRGBからコンポーネント(YCrCb)に変換しないとなぁ……とばかり考えていたので、その信号変換できるモノ、仕組みを調べてたんですよね。この変換を市販の機器でどうにかするとなるとトランスコーダになるんだけど、どの製品も機能的にそこまで求めてないって部分の割合が大きいのと販売価格から、もうちょっとコスト抑えないとイマイチ…ってことでRGB-YCrCb信号変換回路を自作するか?と考えるに至り、ネットで公開されてる回路製作やRGB-YCrCb信号の変換式をいろいろ見ている内、閃いたのが回路のパッケージ化できるところをマイコンにまとめちゃえば工作する部品が減ってお手軽になるんじゃねえの?とか思っちゃったから、そこからノリノリになって調べはじめて、やりたいことするにはFPGAなら機能そろってるボードもあるし、イケるぞコレ…とか。
(自分の中で作業の難易度がマイコンのプログラム>ハード工作という認識になってるあたり、我ながらとことんソフトウェア志向だなぁ、オイ。余談だが兄は電気工事士資格持ってたりとハード寄り)
冷静になると、そのFPGAボード購入したらRGB21pinをS映像に変換できるXAV-2Sを買ってお釣りがくるという事実に気が付いたんですけどね。ついでにFPGAにくわえてアナログ回路部作成もいるからいろいろひっくるめてコスト的にどうよ……と(・w・;
けど、いじるの超オモシロソーで今もかなり心惹かれてる。
で、そんな感じで路線を間違えてたんだけど本題に戻って、MVS環境を構築する際の現実的な落としどころを探ってみた。
あんまり金をかけたくないのと、とりあえずMVS動かすこと考えてるだけだからできるだけ手持ちで間に合うものはそれを使うという考えを基本にする。
まず、何は無くともMVSのマザー。コントローラ端子がついてるマザーのMV-1かMV-1Fを入手したいところ。
コントローラは思惑通りのマザーが手に入れば、適当なスティックを流用して作成(15pinコネクタの入手できるかがキモだけど)、もっとも入手できてもできなくてもSNK拡張のJAMMAに沿ったコントローラー作るってのも結構正解な予感。
画面はTVBOXesにXAV-2sでS映像に変換して映す。
で、その際の映像出力の経路は(↓)こうなるわけですが……
[MVS]→アナログRGB(CSYNC)15kHz→[XAV-2s]→S映像入力→[TVBOXes]→アナログRGB31khz→[S2410W]
うーん、見るからに何やってんだこのバカ?って感じだ(・ε・;
XRGB-3購入して、直接アップスキャンした信号をS2410Wへというのも現実的なんだけど環境作る為のトータルコストが結構なことになるので今は除外ということで。
あとは電源だけど、これは適当なものを見繕えば間に合いますな。