6502tinymachines

スイッチのレベルの 2A03、リファレンスに厳密に一致

A0 の報告。作業の後に書かれた。

走行スタンプ: 2026-09-02、rustc 1.97.1、halfphi v0.1.3 (このマイルストーンのためにリリースした。下の発見を参照)。REQUIRE_NETLIST=1 REQUIRE_GOLDEN=1 を付けた cargo test --workspace --release: 3 テストが緑 (計数、収束、ゴールデン)。MUTATE=1 は赤になる: 電源ゲートの手当てを切ると、ステップ 0 でゴールデンから食い違う。

閉じたもの

  • ネットリスト: Quietust の Visual 2A03。ピン留めした sha256 で取得した 8 ファイル (最初に取得した 2026-09-02 に記録)。本物のパーサ二つが一致する: 20,001 個の id 空間の中で、5,577 個の定義済みノードにわたって導通トランジスタ 10,946 個、名前は 2,021 個、レールの綴りは 2C02 と同じく gnd/pwr。
  • 電源投入は手助け無しで収束する。非収束の整定はゼロ。
  • ノードのゴールデンは、601 状態にわたって全ノードでビット厳密に再生し、免除一覧を一つも持たない。一族の中で、例外なしに再生した最初のチップだ (6502 はレール符号化の但し書きを、2C02 はリセット無しラッチ 9 個を抱えている)。単位は MASTER の半ステップ、clk_in の 1 回のトグルだ。÷12 の clk0 は分周器が作る出力であり、ゴールデンの生成器は macros.js の initChip を、バスを駆動しない状態で一文ずつ言い直したものだ。

発見: halfphi の駆動順序、ついに運動させられた

最初の再生は、ちょうど 8 ノードで食い違った。どれも 601 状態すべてで反転していて、うち二つには名前がある: so と c_so (examples/a0-diverge-probe.rs)。原因は、一族が文書にしながら一度も見たことのなかった場合だった: Stats::contested_groups は、この計数が作られて以来どのチップでもゼロだったのに、2A03 では電源投入から 3 になる。Quietust の init は so ノードを低に駆動するが、そのグループはレイアウトのプルアップを抱えている。リファレンスはそうしたグループを、駆動された種 (低) から外へ歩いた最初の一致で解決し、halfphi の古い PullDown < PullUp の順序は最大値で解決していた。

halfphi 0.1.3 は二つを入れ替える: PullDown が PullUp を上回る。外部の駆動が空乏負荷に勝つということで、これは物理的な読みでもあり、リファレンスで観測された読みでもある。入れ替えると再生はビット厳密になり、食い違うノードはゼロだ。この入れ替えが他のどこでも観測できないことは証明されている: contested は 6502、6800、Z80 でゼロ (0.1.3 以降の halfphi の chips テストで宣言されている)、そして 6502 ワークスペースの全 117 テストは、ゴールデン必須のまま、リリースを切る前に緑を再証明した (ダイジェスト d1c6947ca960e9eb、あちらではタグ v0.1.3、6502 リポジトリでは halfphi-v0.1.3)。2C02 のテスト群は、自分のリポジトリで 0.1.3 のピンに対して緑を再証明する。

  • 電源ゲートの一族が、もっと大きくなって再発する: トランジスタ 100 個が電源レールでゲートされていて (2C02: 38、Z80: 32)、シリコンでは永久に導通している。power_on がそう設定し、上の MUTATE の赤が効いていることを証明している。接地でゲートされた 67 個は、どちらの模型でも永久にオフだ。

処理速度

静止状態で 114,740 MASTER 半ステップ/s、3 回の最良 (examples/bench.rs)、バスは駆動しない。2C02 の 50,457 より速いのは、MASTER の半ステップがこのチップのより少ない部分しか動かさないからだ: ÷12 が、ティックごとにコアの大半を止めたままにする。実時間は 42.95 M MASTER 半ステップ/s なので、ラング 0 は 374 倍遅く、それがラダーのある理由だ。

持ち越し

  • 電源ゲートの手当てを halfphi へ昇格させるのは、意図的に見送った。 スケッチは「再発したら昇格」と言っていた。再発はした。しかし halfphi に畳み込むと Z80 の記録済みの基準値が変わる (あちらでは電源ゲートのトランジスタ 32 個がオフとして文書化されていて、収束もそれをオフにして測られた) ので、この昇格は 0.1.3 への便乗ではなく、5 チップ全体にわたる自前の実測付きの変更を求めている。
  • A1/A2 (ダイのページ) はラダーの後だ。コンソールのスケッチ v0.2 の決定記録のとおり。それらが載せるはずだったプローブは N3 の成果物になった。
  • A3 (最初の音: wiki のミキサー表に対する AD1/AD2 のタップ) が、このリポジトリでは次だ。
  • ハーネス (メモリ、24 エッジ式のレジスタプロトコル、DMA) とそれを通したゴールデンは、v6502-pins のラング 3 に対するピンのロックステップのゲートと一緒に着く。コンソールのスケッチの言う「規約を通したチップ対チップ」だ。

ビルド時に 2a03/docs/a0-report.md から取り込まれる。写しはリポジトリの一つだけだ。報告は独自の作業用の言葉をいくつか使う: 報告書で使われる言葉。