NESBotを調べてみる
最近、TAS動画をNES実機で再生出来る「NESBot」というものができたみたいですね。
YouTubeの動画では、マリオ1が正常に再生されている様子が確認できます。
http://www.instructables.com/id/NESBot-Arduino-Powered-Robot-beating-Super-Mario-/
回路図などを見てると、AVRマイコン(Arduino)を使って、SDカードから加工済みムービーデータを、4021を介して実機に送っているようです。
コントローラ状態は、4021に送られる「P/S Control」が立ち上がった時に更新される方式のようです。
しかし、TAS動画で使われる.fmや.fm2形式のムービーファイルは、コントローラー状態が読まれるごとのログではなく1フレームごとのログなので、このままではコントローラ状態を読んでいないフレームがある分ずれてしまいます。
そこで、FCEUXでムービーを再生しながら、4021のP/S Control基準のムービーファイルに変換してやるのです。
そして、それをSDカードに送り、AVRマイコンを使って4021に垂れ流してやるという仕組みです。

実は自分も3ヶ月前から、実機でTAS動画を再生する回路を作っていました。仕組みは、PCで.fm2形式のムービーファイルを読み、PCからFT2232Dを使って4021を介してファミコン実機に送る方式でした。
こっちでは、ムービーファイルの変換作業を行わず、本当に1フレームずつコントローラー状態を更新していました。
ただし、ファミコンには、1フレームずつ確実に変化するピンは映像出力のみのため、これをLM1881を使って垂直同期信号を取って、それをトリガーとして使っていました。
結果は…散々な結果でした。
アトランチスの謎:正常にクリア
スーパーマリオブラザーズ:4-2で壁抜け失敗
ドンキーコングJr.:1面の左から2本目のツタから降りられない
ロックマン1:エレキマンしか倒せない
ロックマン2:最初のフラッシュマンで下に降りた辺りからずれる
結局、この問題を解決できないまま、いつの間にかNESBotが登場していたという・・・せめて動画上げとけばよかった・・・。
ちなみに、自分の回路でも、加工済みムービーデータを、4021のP/S Control基準でコントローラー状態更新するようにしてみたところ、スーパーマリオブラザーズが正常にクリアできました。
やはり、実機の動作とエミュレーターの動作の違いは大きかったみたいですね。
まとめ:
・やっぱり実機とエミュの動作の差は大きい
・なぜ.fmや.fm2はログをフレーム基準にしたのか…小一時間問い詰めたい
・俺の負け
俺が作った回路の回路図は、必要だったら作りますか…。こんちくしょーふんてこわー!
YouTubeの動画では、マリオ1が正常に再生されている様子が確認できます。
http://www.instructables.com/id/NESBot-Arduino-Powered-Robot-beating-Super-Mario-/
回路図などを見てると、AVRマイコン(Arduino)を使って、SDカードから加工済みムービーデータを、4021を介して実機に送っているようです。
コントローラ状態は、4021に送られる「P/S Control」が立ち上がった時に更新される方式のようです。
しかし、TAS動画で使われる.fmや.fm2形式のムービーファイルは、コントローラー状態が読まれるごとのログではなく1フレームごとのログなので、このままではコントローラ状態を読んでいないフレームがある分ずれてしまいます。
そこで、FCEUXでムービーを再生しながら、4021のP/S Control基準のムービーファイルに変換してやるのです。
そして、それをSDカードに送り、AVRマイコンを使って4021に垂れ流してやるという仕組みです。

実は自分も3ヶ月前から、実機でTAS動画を再生する回路を作っていました。仕組みは、PCで.fm2形式のムービーファイルを読み、PCからFT2232Dを使って4021を介してファミコン実機に送る方式でした。
こっちでは、ムービーファイルの変換作業を行わず、本当に1フレームずつコントローラー状態を更新していました。
ただし、ファミコンには、1フレームずつ確実に変化するピンは映像出力のみのため、これをLM1881を使って垂直同期信号を取って、それをトリガーとして使っていました。
結果は…散々な結果でした。
アトランチスの謎:正常にクリア
スーパーマリオブラザーズ:4-2で壁抜け失敗
ドンキーコングJr.:1面の左から2本目のツタから降りられない
ロックマン1:エレキマンしか倒せない
ロックマン2:最初のフラッシュマンで下に降りた辺りからずれる
結局、この問題を解決できないまま、いつの間にかNESBotが登場していたという・・・せめて動画上げとけばよかった・・・。
ちなみに、自分の回路でも、加工済みムービーデータを、4021のP/S Control基準でコントローラー状態更新するようにしてみたところ、スーパーマリオブラザーズが正常にクリアできました。
やはり、実機の動作とエミュレーターの動作の違いは大きかったみたいですね。
まとめ:
・やっぱり実機とエミュの動作の差は大きい
・なぜ.fmや.fm2はログをフレーム基準にしたのか…小一時間問い詰めたい
・俺の負け
俺が作った回路の回路図は、必要だったら作りますか…。こんちくしょーふんてこわー!
スポンサーサイト