テレビの絵の段
M3 報告、作業の後に書かれたもの。
走行スタンプ: 2026-09-01、このリポジトリの 4 番目のコミット、rustc 1.97.1、
cargo test --workspace 53 テスト緑、clippy 綺麗、MUTATE=1 で 30 が赤になる。
M5 はこれらの計数を check-self-counts の走査の下に置く。
閉じたもの
ntsc-crt: LinearRgbFrame から DisplayFrame へ、規格が定めた順序で五つの
段、それぞれ省略可能: ビーム、走査線、蛍光体の残光、マスク、ジオメトリ。この
クレートは模型であり、そう述べている: 数値パラメータはすべて書き下ろしで
(CrtParams::authored、そう札が付いている)、どれ一つもどこかの管の実測として
示されていない。格子がピクセルになるのはビームの段で、フレームは自分の再標本化
比を述べる (samples_per_pixel)。出力は 256 x 240 の整数倍、これはシェルの
規則だ。NES の 8/7 のピクセルアスペクトは意図的に適用せず、そう記録してある。
各段の事実、それぞれ解析的なテストが押さえている (規格: 模型には外部のオラクル が存在しないので、各段は自分が宣言した数式に照らして押さえられ、その宣言は対象 から読み返すのではなくテストに打ち込まれる):
- ビーム: インパルスを通すと、宣言どおりのガウシアン (sigma 4.0 標本) が 列ごとに 1e-5 の内側で出てくる。フレーム上の比は 2048 / (256 x scale)。
- 走査線: 各列の垂直方向の断面は、宣言どおりの sigma(v) = 0.30 x scale x (1 + 0.6 v) のガウシアン、v はそのピクセルの輝度だ: ブルームと電流の関係は 模型のパラメータであり、明るい列は測れるだけ幅が広い。
- 残光: チャンネルごとに max(励起, 前の値 x 減衰)、減衰は exp(-dt/tau)、 tau は書き下ろし (12, 20, 8 ms: P22 に近い順序、青が一番速い)、dt は元の フレーム周期で、決して壁時計ではない。下向きの段差は宣言された定数で 4 フレームかけて 1e-6 まで減衰する。上向きの段差は即時。リセットで消える。
- マスク: アパーチャグリルの三つ組を整数ピッチで敷き詰める。正確な値を 2 周期にわたって主張する。ピッチ 0 は名指しで拒む。
- ジオメトリ: 樽型 (source = centre + d(1 + k r^2)) と角の丸め、既定では
切ってある。書き下ろしの k = 0.03 では、フレーム全体の角は管から外れて曲がり、
中央の 224 x 224 の窓は点いたままだ (
window_visible、シェルの「必ず見える」 不変条件は、ゲートが再利用するライブラリ関数だ)。
ゲート
tests/gate.rs: 記録済みのドットストリームのゴールデン (規格が名付けた
Even/OddShort の色循環の組) を、符号化、ラング A の復号、scale 2 での五段
すべてに通す。マスクとジオメトリは入れる: 整数の寸法を主張し、224 x 224 の窓が
どのフレームでも点いていること、ドリフト統計を数えること (60.0988 Hz の元に
対する 60 Hz の刻み二つは綺麗な統計を示す。長時間のうなり周波数の計数は
ntsc-wasm の歩調のテストの側だ)、そして二フレームの走行全体が蛍光体のリセット
後の再生でビット単位で決定的であること。これが「残光は元の周期で進む」が
買うものだ。
examples/play-golden.rs は、連れ合いのシェルの代わりに立つリファレンスの
プレイヤーだ: ゴールデン (色循環の組と縞) を走行スタンプ付きで
goldens/dotstream-m3.bin に記録し、記録されたバイト列から再生し、四枚の
表示フレームをその横に PPM として書き、ドリフト統計を印字する。フレームは規格の
とおり説明用であって検証ではない。一枚を 768 x 720 (scale 3、マスクピッチ 1、
樽型オン) で目で見たところ、曲がって角が丸められ走査線の入った管の中で、十二本の
色相の帯が色相環を巡って進んでいた。
MUTATE
規格はこのマイルストーンの妨害を名指ししている: ビーム幅と、時定数一つ。
MUTATE=1 は対象 (tests/stages.rs) にその両方を当て、ビームのインパルスの
テストと減衰のテストが赤になる。対象を自分自身のパラメータと構成上比べるだけの
テスト (ブルーム、マスク) は、緑のままだと名指しされている。
持ち越し
- M4: 捕捉の側 (同期とバーストのロック、再標本化、合成捕捉の往復): 規格自身の 順序のゲートは満たしてあり、復号は M1/M2 以来ほかの二つの源に対しても通って いる。
- M5: 文書化と、docs/ 内のすべての数字のセルフカウント。
- 規格 v0.3 の待ち行列は変わらず: 全フレームのレート、ラング D、7.2 節の equiband の引用。
- 実時間での復号は名指しされた最適化のまま (M2 の表)。CRT の各段は scale 3 で
五段すべてを入れてネイティブのリリースビルドで 52.7 ms/フレームを計測して
いるので (
examples/crt-bench.rs、同じ Ryzen 5 5600X)、表示のスケールでは 復号と並んで最適化の一覧に入る。どちらも、正しさのマイルストーンの非目標だ。
ビルド時に ntsc-crt/docs/m3-report.md から取り込んだもの。リポジトリが唯一の写しだ。報告は独自の作業用の言葉をいくつか使う: 報告書で使われる言葉。