NEStinymachines

コンソールを走らせる

リポジトリのコンソールが、このページの中で走る: 2A03 と 2C02 の高速版が書き下ろしの糊を通して一つのマスタクロックに乗り、音は基板の音声段を通り、各フレームはコンポジット波形に符号化されて 3 ラインコムで引き剥がされる。ntsc ベンチが走らせるのと同じ信号経路だ。リポジトリのスイートが押さえているのと同じコードを、記録済みコミットから WebAssembly にコンパイルしたもの。

ここにカートリッジは無い。自分のディスクから .nes ファイルを選ぶ。ファイルはこのブラウザ内のワーカーに読まれ、他のどこへも行かない。読み込めるのはコンソールが持つマッパーである NROM だけで、それ以外は名指しで拒む。サイトの検査が走らせるのはリポジトリ自身のテストカートリッジで、そのカラーバーのカートリッジはここからダウンロードできる: 誰のゲームでもなく、十二の色相を三十二ドットのセルに一つの輝度行で並べ、行は二秒ごとに進む。捕捉比較とベンチが使うのと同じファイルだ。

selectstart
BA

キー: 矢印、Z と X が B と A、Enter が Start、右 Shift が Select。または下のパッドを両手の親指で。

カートリッジが無い。自分のディスクから .nes ファイルを選ぶ。ファイルはこのブラウザから出ない。

リポジトリのベンチの node 上では、音付きのコンソールは毎秒 84.3 フレーム、実時間の 1.40 倍で走る(2026-09-07)。ページではコンソールと信号経路がそれぞれ自分のスレッドで走る。ネイティブのシェルが落ち着いた形だ: コンソールは壁時計に対してソースのレートを保ち、音もそれに従う。絵はこのブラウザがこなすレートで最新のフレームを復号し、絵が忙しい間に届いたフレームは「走ったが復号されなかった」と数える。読み出しはそのすべてを生で測り、ドリフトカウンタは実際のディスプレイなら重複・欠落させたはずの分を、ペーシング規則の通りに表示する。ブラウザが絵のスレッドに WebGPU を与える場合、絵の全体がそこで走る: NES の符号化器は一つの計算パス(ソースのセグメント表、転写されたレベル、波の規則を一行ずつ移植し、レベルとグリッドは符号化器のインスタンスから取る)、コム復号はさらに三つで、ネイティブのシェルのシェーダから表示ガンマを外したもの、すべての定数は復号器のインスタンスから。使う前に最初のフレームをバンドル自身の符号化器と復号器にも通し、読み出しは二つの符号化器がどの標本でも何ボルト違ったか、二つの復号が 255 分の何バイト違ったかを、それぞれ満たすべき許容とともに述べる。WebGPU が無いか外れた場合は wasm の経路が描き、読み出しがそう告げる。ネイティブのシェルの数字はコンソールのページに。

コンソールのバンドルは、このページの数字を測るのと同じスクリプトが記録済みコミット e8562ad からビルドし、信号経路のは e846070 から。記録は両バンドルのファイルハッシュを持つ。コンソールの表はスイッチレベルのチップから測り出したもので、そのダイデータは CC BY-NC-SA であり、それはこのページにも及ぶ: ここには売り物が無い。

コンソールの弧へ戻る