ボコスカウォーズの最強ワザ考察


 いつもどおり4STの動画を見て解析チャレンジです。
 ちなみに解析したあと、2014時点でとっくに海外フォーラムで解析済みだったということが判明した悲しい状況だったのですが、まあ供養も兼ねてうpうp。

・ボコスカウォーズの最強ワザとは?
 動画でも説明されてますが、2コンのSELECT+STARTを押しながらリセットボタンを押し、そこで「なってちょんまげってか~」と2コンマイクに喋ると最強になる…という裏技ですが、動画の備考にも書かれてるとおりファミコンのマイクにはON/OFFの1ビット判定しかないので何を言うかは特に意味ありません

 また、周知のとおり2コンにSELECT+STARTは無いので、拡張端子にアスキースティック2台を接続して3コン/4コンの後者を2コンとして使うのが「本家」のやり方ですが、2コンモードへの切り替えスイッチの付いている拡張パッドでも代用できます。

・実際の処理を見てみた
 2コンのSELECT+STARTを押しながらリセットした時の無音ウェイト中に、エミュレータFCEUXでブレークをかけたところ一発で当該処理にヒットしました。
 だらだらと語っても仕方ないので、下記に重要処理を列挙。

// ボコスカウォーズの裏技コマンド判定ルーチン
 00:8030:20 B8 E7  JSR $E7B8 // この先にJOYP2判定あり
 00:8033:C9 0C     CMP #$0C // 0C=1100 = START+SELECT
 00:8035:D0 24     BNE $805B // 押してなければ通常分岐へ
 00:8037:20 B3 F3  JSR $F3B3 // タイトル画面描画コール。潰すと裏技中は真っ暗。
・ループ開始位置
 00:803A:AD 16 40  LDA JOY1 // AレジスタにJOYPAD1上方格納
 00:803D:29 04     AND #$04 // 4と論理積 = マイク判定
 00:803F:F0 02     BEQ $8043 // マイク無音状態なら下行を飛び越える
 00:8041:E6 2E     INC $002E // アドレス002Eに+1 (これが無敵トリガー)
 00:8043:A2 10     LDX #$10 // ここから
 00:8045:A0 00     LDY #$00 // Y++で1~255カウントループ
 00:8047:C8        INY
 00:8048:D0 FD     BNE $8047 // Yがオーバーフローで0になったら脱出
 00:804A:CA        DEX       // Xを減算し#$10が0になるまでループ
 00:804B:D0 FA     BNE $8047 // ここまで無音の要因(ウェイト)
 00:804D:E6 2D     INC $002D // アドレス002Dに+1
 00:804F:D0 E9     BNE $803A // ループ終端
・ループ終了
 00:8051:A5 2E     LDA $002E // Aレジスタにアドレス002Eをロード
 00:8053:C9 C8     CMP #$C8 // ループでマイクに音が入った回数とC8を比較
 00:8055:90 04     BCC $805B // キャリー1(C7以下)なら下行を飛び越える。
・ここで最強フラグを立てる処理(0014=FF)
 00:8057:A9 FF     LDA #$FF // アドレス0014に
 00:8059:85 14     STA $0014 // FFを書き込み=これで最強フラグON
・ここから本来のタイトル画面処理へ
 00:805B:20 E5 E2  JSR $E2E5
 00:805E:A9 00     LDA #$00
 00:8060:85 3F     STA $003F = #$00
 00:8062:A9 00     LDA #$00

 赤文字の箇所が注目ポイントです。
 処理としては「256回のループの中でC8(200回)以上マイクがONであれば最強フラグがONになる」という感じ。
 マイク信号を常時ONにするとループ255回目でオーバーフローで0に戻るはずなので、SELECT+STARTを押してリセットした後にほんの少し(コンマ秒)くらいの間を開けてから音楽が流れるまでマイク信号を入れ続けるのが正解と考えられます。

 シイナさんが実機で何度やってもダメだったのは、たぶんセリフが早すぎてマイク信号カウント200に到達してないのが原因かなと。
(※追記:シイナさん曰く、ずっと声を入れっぱなしにした時もダメだったらしいので、本体の経年劣化でマイク入力を取りこぼしてるケースもありそうです)

 動画で行っていた「マイクを固定してすぐに音声入力できるようにするアプローチ」は正しいはずなので、後はタイトルBGMが流れるまでマイク信号を入れ続けることが出来るかどうかが勝負所でしょう。

・エミュレータでやるなら「VirtuaNES 0.97」が良い感じ
 NESエミュレータVirtuaNES 0.97は、2コンのコントローラ設定に「任意キーにマイク信号の割り当て」があります。
 2コンのSELECT+STARTを押しながらF2(ソフトリセット)を押し、音楽が鳴るまでマイク割り当てキーを押下すれば、002EのカウンタがちょうどE0オーバーくらいまで回るので、確実に裏技が成功できます。

・・

 とりあえずウチはここまでで作業を終わるので、後は他の人に任せるのですん。
 それと、Xでの解析ツリー中に助言をいただいた、おばきいさん&たちばなみおさん、ありがとうでした(’ω`)ノ