6502tinymachines

ベンチの台本

一つのテキストファイルが、ヘッド上の走行 (head/headd.py、tools/bench.py run が送る) を駆動し、同じ言葉のまま模型 (nes-console の pad-log が AT 行を 取る) も駆動する。1 行は一つの語とその引数で、# からはコメント。ラッチ番号は 最後の RESET からのコンソールのコントローラストローブの数で、ゼロから始まる。 ブリッジのログと模型のログが共有しているのがこの番号だ。

行ヘッドでは模型では
RESETブリッジのカウンタをゼロにし、それからリセットリレーをパルスするコンソールはラッチゼロで電源が入る (pad-log)。bench-script は CPU の /RESET をヘッドと同じ半秒だけ保持して放す。温間リセットだ
POWER ON / POWER OFF電源リレー何もしない
MODE PASS / MODE INJECTブリッジに渡される: 元のパッドのバイトか、台本のバイトか模型は手元にパッドを持たない: INJECT が唯一のモード
SET hhいま保持するバイト (ビット 0 = A、立っていれば押下)最初から保持するバイト
AT n hhラッチ n から先は hh を保持する。ラッチ n-1 の後に書くので、ラッチ n の時点でレジスタに入っているコントローラの予定表。ラッチ n の前のストローブの立ち上がりで適用される
TRIG nブリッジがラッチ n でトリガ線を上げる (DS1054Z に EXT 入力は無いので、線には専用のチャネルが要る。2026-10-24 にリードが動いてからはそれが無い: scope-leads.md)。ARM は数秒かかるので、その後に置くこと何もしない (模型は n のフレームを直接描く)
ARM name [channels] [scale] [offset] [source] [s/div] [depth]スコープを単発撮りに設定する: チャネルは 3 または 1,2,4、トリガはチャネルから (CH3、コントローラのストローブで、フレームに一度。リードの今の配置は scope-leads.md のとおり。DS1054Z に EXT 入力は無く、古い既定値だった EXT は名指しで拒まれる)、時間軸とメモリ深度 (1 チャネルか 2 チャネルで 12 M 点、それより多いと最大 6 M)。捕捉は name.u8 (1 チャネル) か name-chN.u8 (複数) で、レートとトリガのサンプルを書いた name.toml が隣に並ぶ何もしない
CAPTURE仕掛けたトリガを待って記録を読む (トリガを過ぎた WAIT もこれをやる)何もしない
WAIT nブリッジが最後の RESET からラッチ n を記録するまで待つ (ヘッドはブリッジの # reset で自分のカウントを消す。2026-09-18 より前は前のセッションのものを持ち越していて、RESET の後の WAIT が即座に返ることがあった。open-items.md)ポール n まで走らせる (bench-script は、ブリッジと同じく、各 RESET から数える)
WAIT s S秒何もしない

計画が書いているとおりの B1 の台本:

POWER ON
WAIT 2 S
MODE INJECT
SET 00
RESET
AT 120 08          # Start, ポール 120 から
AT 122 00
ARM game-t300 1,3 0.2 -0.5 CH1   # 映像を CH3 に 200 mV/div で、その隣の CH1 にトリガ線を
TRIG 300
WAIT 320
CAPTURE

この台本は 2026-10-24 より前のリード (トリガ線が CH1、映像が CH3) に合わせて 書いてある。今の配置 (scope-leads.md) では映像が CH1 にあり、トリガ線を運ぶ ものは何も無い。CH3 で構えると、スコープを構えた後の最初のストローブで撮れる。 それは ARM が戻った後のどこかのフレームで、選んだラッチではない: ラッチ 300 ちょうどで撮るには、トリガ線がまたプローブを持つのを待つことになる。

ヘッドは走行を runs/<stamp>/ に書き (script.txt、演奏した行をそのまま並べた head.log、ブリッジが印字した行をすべて収めた bridge.log、そして捕捉)、 bench.py がそれを取ってくる。compare-logs.py は同じ台本について bridge.log と pad-log の出力を差分する。

B2 の台本、電源投入が一回 (tools/b2-align.py sweep はこれを N 回演奏して 各走行を分類する):

POWER OFF
WAIT 3 S
ARM align 1,2,4 1.0 -2.0 CH4 0.0005 1200000   # マスタクロック、M2、ALE。描画が始まる ALE の最初の立ち上がりでトリガ
POWER ON
CAPTURE
POWER OFF

ビルド時に nes-bench/docs/script.md から取り込んでいる。写しはリポジトリの一つだけだ。報告には私たちの間の言葉がいくつか残っている: 報告書で使われる言葉。