アカウント名:
パスワード:
V-Syncとは別に、高サンプリングレートでパッドの入力履歴をリングバッファに記録する処理を走らせるしか。
ファミコンのコントローラ(パッド)はパラレルではなくシリアルなので、サンプリングレートはどうしてもクロックに依存します。それ以上のサンプリングはできません。連射回路を後づけした場合、ON/OFFを1クロックずつ繰り返した場合にはソフトによっては読みこぼしがあるので、ONを2クロック、OFFを1クロックで回す設計のほうが安定していました。その場合、迷宮組曲等のカウントでたしか21~22連射程度だったことから、V-syncと同じ60Hz程度のクロックが流れていたと想像しています。(おそらく「1秒(10秒)」の区切りが正確ではなく若干長かった?)つまり、ハード的に
前のフレームでボタンが押されておらず、かつ現フレームでボタンが押されたと検出できた場合に「ボタンが押された」判定されるのですから、60fpsで回っているとするなら最大30連射しか検出することが出来ないはずです。
仮に秒間60回ボタンを押すことができたとしても、それは「押しっぱなし」と判定されるはずです。
ボタンが区別されていなければその通り。ソフトの実装次第ですが、機能の重複する2ボタンが個別に認識されているものは逆位相で交互に押すようにすると、押しっぱなしというではなく全フレームでmake/breakが認識されるものがあります。確実にそうなっているのは、例えばアーケードのテトリス。
ファミコンのギャラガはボタンが同じ機能かつ区別されているのは間違いない(一方を押したまま他方を連射可能)のですが、どの程度まで連射を受け付ける仕様なのかは試したことがないのでわかりません。
A/Bボタンを区別して検出するのであれば、ABを毎フレーム交互に押し下げればAボタンで30連射 Bボタンで30連射 の合計60連射ができるかも、ということでは。
これ [famicom.biz]を使うんですかね
違います。AもBも同じショットですが、Aを押したままBを連打しても普通に撃てる独立仕様だったのでAとBのon/off逆転させた30連打で合計60連射できたかも?という話です。
実際、ABずらし押しで弾を極端に繋げて撃てました。まぁ、1画面に2発しか撃てないゲームなんですけどね。
> 前のフレームでボタンが押されておらず、かつ現フレームでボタンが押されたと検出できた場合に「ボタンが押された」そうすると楽ちんだしそこまで早押ししないだろうからそうしているソフトが多かろうというだけで、複数回確認してるソフトの存在は否定できないでしょう
それが他で書かれている迷宮組曲の計測モードなんかがその例なんだけれど、CPUでI/Oポートをポーリングする必要があるんで当然ながら重くなります。連打系のゲームなどを除いて、おおよそメリットのある処理ではないですし、そんな実装はしないでしょう。
1フレーム毎に8ビット分溜めて、前フレームの値をxor取って立ち上がったビットを判定するのがありがちなパターン。AボタンとBボタンを区別する意味もないから、2bitマスクして立っていれば弾発射、なんて書くので、交互に入力できれば毎フレーム発射は可能になるわけですな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
サンプリングの問題 (スコア:2)
必要なのは正確さで、ちょっとでもタイミングがずれると抜けが出ますし、秒間16連射とか秒間17連射だとどんなに正確でも同期が取れなくなって所々抜けます。
そういう抜けが出ないような、16回押したら16回と認識されるような実装を作り込んだという制作秘話が面白そうです。
Re: (スコア:0)
V-Syncとは別に、高サンプリングレートでパッドの入力履歴をリングバッファに記録する処理を走らせるしか。
Re: (スコア:4, 参考になる)
ファミコンのコントローラ(パッド)はパラレルではなくシリアルなので、サンプリングレートはどうしてもクロックに依存します。それ以上のサンプリングはできません。
連射回路を後づけした場合、ON/OFFを1クロックずつ繰り返した場合にはソフトによっては読みこぼしがあるので、ONを2クロック、OFFを1クロックで回す設計のほうが安定していました。
その場合、迷宮組曲等のカウントでたしか21~22連射程度だったことから、V-syncと同じ60Hz程度のクロックが流れていたと想像しています。
(おそらく「1秒(10秒)」の区切りが正確ではなく若干長かった?)
つまり、ハード的に
60連射? (スコア:0)
前のフレームでボタンが押されておらず、かつ現フレームでボタンが押されたと検出できた場合に「ボタンが押された」判定されるのですから、60fpsで回っているとするなら最大30連射しか検出することが出来ないはずです。
仮に秒間60回ボタンを押すことができたとしても、それは「押しっぱなし」と判定されるはずです。
Re:60連射? (スコア:1)
ボタンが区別されていなければその通り。
ソフトの実装次第ですが、機能の重複する2ボタンが個別に認識されているものは逆位相で交互に押すようにすると、
押しっぱなしというではなく全フレームでmake/breakが認識されるものがあります。
確実にそうなっているのは、例えばアーケードのテトリス。
ファミコンのギャラガはボタンが同じ機能かつ区別されているのは間違いない(一方を押したまま他方を連射可能)のですが、
どの程度まで連射を受け付ける仕様なのかは試したことがないのでわかりません。
Re: (スコア:0)
Re: (スコア:0)
A/Bボタンを区別して検出するのであれば、ABを毎フレーム交互に押し下げれば
Aボタンで30連射 Bボタンで30連射 の合計60連射ができるかも、ということでは。
Re: (スコア:0)
これ [famicom.biz]を使うんですかね
Re: (スコア:0)
違います。
AもBも同じショットですが、Aを押したままBを連打しても普通に撃てる独立仕様だったので
AとBのon/off逆転させた30連打で合計60連射できたかも?という話です。
実際、ABずらし押しで弾を極端に繋げて撃てました。
まぁ、1画面に2発しか撃てないゲームなんですけどね。
Re: (スコア:0)
> 前のフレームでボタンが押されておらず、かつ現フレームでボタンが押されたと検出できた場合に「ボタンが押された」
そうすると楽ちんだしそこまで早押ししないだろうからそうしているソフトが多かろうというだけで、
複数回確認してるソフトの存在は否定できないでしょう
Re: (スコア:0)
それが他で書かれている迷宮組曲の計測モードなんかがその例なんだけれど、CPUでI/Oポートをポーリングする必要があるんで
当然ながら重くなります。
連打系のゲームなどを除いて、おおよそメリットのある処理ではないですし、そんな実装はしないでしょう。
1フレーム毎に8ビット分溜めて、前フレームの値をxor取って立ち上がったビットを判定するのがありがちなパターン。
AボタンとBボタンを区別する意味もないから、2bitマスクして立っていれば弾発射、なんて書くので、交互に入力できれば
毎フレーム発射は可能になるわけですな。