報告書で使われる言葉
ノートと較正カートリッジの計画と報告は、作業をしている当人たちが、作業の最中に、互いに向けて書いたものだ。私たちはそれをそのままこのサイトに取り込む。報告を書き直すことは、報告がいつのまにか本当でなくなる道だからだ。だから報告には、私たちの間の略語が残っている。このページはその略語を、報告が使う意味のとおりに、一語ずつ説明する。
作業の確かめ方
ゴールデン(golden)。 記録済みのリファレンス走行。同じチップを模擬する他の人のシミュレータの出力をファイルに保存したもので、私たちの走行はそれを厳密に再生しなければならない。「ゴールデンに合わせた」とは、私たちの走行と記録を一歩ずつ比べて一致したという意味だ。走行スタンプに REQUIRE_GOLDEN=1 とあれば、その走行では記録が必須で、無いときに飛ばされることはなかった。
オラクル(oracle)。 照らし合わせる独立したもの全般: リファレンスのシミュレータ、blargg のような公開テスト ROM、規格自身の表。テレビの絵の段のように「外部のオラクルがない」と報告が言うときは、比べる本物が何もなかったので、その段は自分で述べた数式に照らして確かめた、という意味だ。
ゲート(gate)。 マイルストーンが通らなければならない検査。作業の前に計画へ書き込まれ、どこまで近ければ合格かも一緒に書かれる。報告は、どのゲートが閉じ、どれがまだ開いているかを述べる。
ミューテーション(mutation)と MUTATE=1。 テストが捕まえなければならない妨害。MUTATE=1 を設定すると、名指しした一つのもの(間違ったバイト、表から抜いた一項目、元に戻した古い規則)がわざと壊され、それを守るテストは赤にならなければならない。妨害の下でもまだ通るテストは何も試していなかったことになる。だから各報告は、いくつのテストが赤になったかを書く。
セルフカウント(self-counts)。 文書自身の数字を確かめること。スキャナが文書の述べる数字をすべて見つけ、コードや走行が実際に言うことと比べる。だから報告は、それが記述するものから離れていけない。
ピン留め(pinned)。 足元で変わらないよう、正確な版に固定すること: ハッシュで固定したデータファイル、タグで固定したライブラリ。「一度合わせてピン留めした」タイミングは、記録に対して一度だけ測って書き留め、その後は二度と調整していない。
名指しで拒む(refused by name)。 当てはまらないもの(NES の信号には使えないフィルタ、そのチップに無いピンを駆動するテスト)を求められたとき、コードはもっともらしくて間違った数字を出す代わりに、断ってその理由を言う。
走行スタンプ(run stamp)。 報告の冒頭の一行で、いつ、どのコミットで、どの道具で走らせたかを書く。以下のすべての数字を、それを印字した走行までたどれるようにするためだ。
模型は何でできているか
ラング(rung)とラダー(ladder)。 チップについては、ラングは同じチップを走らせる一つのやり方で、ラダーはそれを順に並べた全体だ。ラング 0 はトランジスタごとに模擬したチップで、遅いが、それが真実だ。上のラングはより速い版で(ラング 3 が高速コア)、どれも何かがそれに頼る前にラング 0 と照らし合わされる。信号経路では、ラングはデコーダのフィルタを指す: ラング A はノッチフィルタ、ラング B は 2 ラインコム(NES の信号には使えないので拒まれる)、ラング C は NES のために作られた 3 ラインコム、ラング D はフレームをまたぐコムで、測定によって訂正された。ntsc-crt 自身の報告では、「ラダー」はそのマイルストーンの並び、M0 から M5 も指す。
書き下ろし(authored)と実測(measured)。 実測は何かから読み取ったもの: トランジスタレベルのチップ、スコープ、記録。書き下ろしは、まだ何も測れなかったので、データシートや回路図や wiki から私たち自身が書いたもの。報告は書き下ろしの値すべてに書き下ろしと札を付ける。私たちの選択を、ハードウェアについての事実と取り違えないためだ。
ワールド(world)。 テスト用の場面: チップが電源投入から走らせる、決まったメモリ内容とレジスタ書き込みの組。絵のチップなら、標準ワールド、スプライトワールド、スクロールワールドがある。模様がわざと雑音のように見えるのは、一つの間違ったドットに隠れる場所を与えないためだ。
ハーネス(harness)。 チップの報告では、チップが中で走る模擬の周囲: メモリと、本物の CPU のようにレジスタ書き込みを送り込むバス。ベンチの文書では、ハーネスは普通の意味で、コンソールの中の配線の束を指す。
フィクスチャ(fixture)。 テストが再生する、記録済みの台本つき走行の一本。何を試すかにちなんで名付けられる(止められた CPU、走行途中のリセット)。
ダイバージェンス(divergence)。 私たちの模型がリファレンスと意図して異なる箇所で、理由と差の大きさとともに書き留められる。信号経路の一覧がその一つだ。
ロックステップ(lockstep)。 二つのチップを同じ入力で並べて一歩ずつ走らせ、比べながら進むこと: 食い違うまでトランジスタレベルのチップとその高速版を、あるいは共有するピンを通して一つのチップと別のチップを。高速チップの誤りはこうして見つかった。
マイルストーンの文字
各リポジトリは、それぞれ自分の文字でマイルストーンに番号を振る。計画はマイルストーンの作業の前に、報告はその後に書かれる。
| N | コンソール全体: 規約(N0)、高速 2A03(N3)、糊、コンソール、その絵、音、窓(N4 から N8) |
| A | 2A03、NES の CPU と音のチップ、トランジスタレベル |
| P | 2C02、絵のチップ、トランジスタレベルから高速版まで |
| M | ntsc-crt、コンソールとテレビの間のコンポジット信号 |
| B | ベンチ、実機と模型に同じコントローラ入力を与える場所 |
| C | 較正カートリッジ |
このページが扱わないもの
チップ内部の信号やレジスタの名前(pal_d、$2002、OAM)はチップ自身のもので、nesdev wiki が私たちよりはるかに上手に説明している。報告の中のコード識別子やファイルパスはリポジトリを指し、コードが言うとおりの意味を持つ。ここに無い作業用の言葉を報告が使っていたら、それはこのページの穴なので、知らせてもらえるとうれしい。