fc2ブログ

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に垂れ流してやるという仕組みです。



FAMIBot

実は自分も3ヶ月前から、実機でTAS動画を再生する回路を作っていました。仕組みは、PCで.fm2形式のムービーファイルを読み、PCからFT2232Dを使って4021を介してファミコン実機に送る方式でした。
こっちでは、ムービーファイルの変換作業を行わず、本当に1フレームずつコントローラー状態を更新していました。
ただし、ファミコンには、1フレームずつ確実に変化するピンは映像出力のみのため、これをLM1881を使って垂直同期信号を取って、それをトリガーとして使っていました。

結果は…散々な結果でした。
 アトランチスの謎:正常にクリア
 スーパーマリオブラザーズ:4-2で壁抜け失敗
 ドンキーコングJr.:1面の左から2本目のツタから降りられない
 ロックマン1:エレキマンしか倒せない
 ロックマン2:最初のフラッシュマンで下に降りた辺りからずれる


結局、この問題を解決できないまま、いつの間にかNESBotが登場していたという・・・せめて動画上げとけばよかった・・・。

ちなみに、自分の回路でも、加工済みムービーデータを、4021のP/S Control基準でコントローラー状態更新するようにしてみたところ、スーパーマリオブラザーズが正常にクリアできました。
やはり、実機の動作とエミュレーターの動作の違いは大きかったみたいですね。



まとめ:
・やっぱり実機とエミュの動作の差は大きい
・なぜ.fmや.fm2はログをフレーム基準にしたのか…小一時間問い詰めたい
俺の負け

俺が作った回路の回路図は、必要だったら作りますか…。こんちくしょーふんてこわー!
スポンサーサイト



FC音源:DPCMチャンネルのDACを調べる

DPCMチャンネルの7bitDACと、2A03の2番ピン(三角波・ノイズ・DPCMチャンネルが出力されるピン)のDACについて、どれくらいひずむのかを調べてみた。

$4011に、出力値と0を交互に出力し、それを0x7Fまでやってみた結果、こんな波形になった。
$4011 [01 00] ~ [7F 00] 1

それほどひずんでないように見えるが、直線を引いてみると…
$4011 [01 00] ~ [7F 00] 2
けっこうひずんでた。



ところで、この波形を拡大してよーく見てみたところ、興味深い点を見つけた。
$4011 [01 00] ~ [7F 00] 3
なぜか、4bit目以降が加算される時(0F->10,1F->20~6F->70の全て)、出力差がその他の時とくらべて1.5倍くらいに増えていた。
この結果から予想できるDACの回路ってどんなのがあるんだろうか…

そういえば、ディスクシステムの拡張音源も、波形の出力がかなりひずんでいたなー…。波形としてのこぎり波を指定したら、前出力との差がマイナスになったりするひどい仕様だったけど。
プロフィール

おふがお(OffGao)

Author:おふがお(OffGao)
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR