このページではゲームエミュレータBizHawk上で動作するRTCを作成して、以下のようにPython版サンプルコンポーネントのジョイスティックコンポーネントと接続してゲームを操作するシステムの作成を行います。
以下からBizHawk 1.12.2をダウンロードして適当な場所に展開してください。
※1.13.0以降のバージョンでは何故か動作できていません。
BizHawkを展開したフォルダにOpenRTM Lua版の各ファイルをコピーします。
以下から32bit用のOpenRTM Lua版ファイル一式(OpenRTM Lua x.y.z Lua5.1 32bit)をダウンロードしてください。
OpenRTM Lua版からBizHawkにファイルをコピーします。
openrtm-lua-x.y.z-x86-lua5.1\lua\以下のファイルを全てBizHawk-1.12.2\Lua\以下にコピーしてください。

次にopenrtm-lua-x.y.z-x86-lua5.1\clibs\以下のファイルを全てBizHawk-1.12.2\以下にコピーしてください。

RTC BuilderによるRTCの基本的な作成手順は以下のページを参考にしてください。
上のページの作成手順に従って、以下の仕様のRTCを作成してください。
| モジュール名 | BizHawkSample |
onExecuteを有効にしてください。
| ポート名 | in |
| データ型 | RTC::TimedFloatSeq |
BizHawkSample.luaのonExecute関数を以下のように編集してください。
function obj:onExecute(ec_id)
if self._inIn:isNew() then
local data = self._inIn:read()
local buttons = {["Left"]=false, ["Right"]=false, ["A"]=false}
if data.data[1] > 20 then
buttons["Right"] = true
elseif data.data[1] < -20 then
buttons["Left"] = true
end
if data.data[2] > 70 then
buttons["A"] = true
end
joypad.set(buttons, 1)
end
emu.frameadvance()
return self._ReturnCode_t.RTC_OK
end
InPortの入力データを、コントローラーの入力に設定しています。
emu.frameadvance()でフレームを更新しています。
編集したBizHawkSample.luaをBizHawk-1.12.2\Luaにコピーしてください。

BizHawkの関数については、以下のページに説明があります。
BizHawkで動作可能なROMイメージを入手してください。 市販のゲームソフトのROMイメージのダウンロードは違法のため、以下のようなフリーのROMイメージを入手してください。
事前にネームサーバーの起動が必要です。
※OpenRTM-aist 1.2以降ではRT System Editorにネームサーバー起動ボタンがあるため、手順が簡単になっています。
TkJoyStickコンポーネントを入手して、TkJoyStickComp.exeを実行してください。
EmuHawk.exeをダブルクリックして実行してください。

Emulation->Pauseをクリックしてゲームを一時停止してください。

Tools->Lua ConsoleをクリックしてLua Consoleウインドウを表示してください。

Open ScriptボタンをクリックしてBizHawkSample.luaを開いてください。

まずRTCの起動に成功している場合は、以下のようにネームサービスビューにRTCが表示されます。

Open New System Editorボタンを押してシステムダイアグラムを表示してください。

ネームサービスビューからシステムダイアグラムにRTCをドラックアンドドロップしてください。

TkJoyStick0のposのOutPortを、BizHawkSample0のinのInPortにドラックアンドドロップしてください。

これで通信ができるようになります。
All Activateボタンを押すとTkJoyStick0からデータが送信されるため操作ができるようになります。

Emulation->Pauseをクリックするとゲームを再開します。

BizHawkSample.luaのmanager:init関数の引数を以下のように変更してください。
manager:init({"-o", "manager.components.preconnect:BizHawkSample0.in?port=rtcname://localhost/TkJoyStick0.pos", "-o", "manager.components.preactivation:BizHawkSample0,rtcname://localhost/TkJoyStick0"})
-oオプションでパラメータの設定ができます。
"-o", "manager.components.preconnect:BizHawkSample0.in?port=rtcname://localhost/TkJoyStick0.pos"起動時に接続するポートを指定します。 この場合はBizHawkSample0というRTCのinというデータポートを、TkJoyStick0というRTCのposというポートに接続します。
ただし、TkJoyStick0は別プロセスで起動しているため、rtcname形式による指定が必要になります。 rtcname形式はネームサーバーからRTCを取得する方法です。rtcname://アドレス/RTC名.ポート名で指定します。
"-o","manager.components.preactivation:BizHawkSample0,rtcname://localhost/TkJoyStick0"起動時にアクティブ化するRTCを指定します。