6502tinymachines

メイン基板の糊

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

走行スタンプ: 2026-09-05、rustc 1.97.1、nes-bus v0.1.1。cargo test --workspace: 16 テストが緑、テストファイルは五つ、部品ごとに一つ。ここには halfphi を通るものが何も無く、ダイから測ったものも何も無い。コンソールのスケッチ (第 3 節、N4) が求めているのはまさにそれだ: 各部品を数行で、データシートに押さえ、書き下ろしと札を付け、自前の小さなテストを添える。このクレートは crates/nes-glue だ。

部品

部品NES-001 での配線何に押さえたか
U3、74LS139A 側: 1G = A15、1A = A13、1B = A14。よって 1Y0 が /RAM CS ($0000..$1FFF)、1Y1 が /PPU CS ($2000..$3FFF)。B 側: 2G は接地、2A = M2、2B = A15。よって 2Y3 が /ROMSEL = not (A15 and M2)SN74LS139A の機能表を一行ずつ、二つの窓を 256 バイトページすべてにわたって、そして M2 の項: A15 が高で M2 が低のとき、カートリッジを選択してはならない
U8、74LS373LE = PPU ALE、D = AD0..AD7、/OE は接地。Q はカートリッジ端での PPU A0..A7高の間は透過、立ち下がりから保持。そして 2C02 のハーネスの立ち上がりエッジ標本と結果が違う唯一の場合 (パルスの内側で AD が動く) を示し、データシートは立ち下がりの値を保つ
U1 と U4、TMM2115CPU の WRAM は /RAM CS の後ろにあり、この部品に無い線のぶんだけ 4 回ミラーされる。PPU の CIRAM はカートリッジの /CIRAM CE と CIRAM A10 の後ろアドレス線 11 本、/CS と /WE はデータシートの言うとおり、電源投入時の充填は見て明らかにデータではないもの。-12 等級の 120 ns アクセス時間は記録され、使われていない
U9 と U10、74LS368/OE1 と /OE2 で有効化。D0 は各ポートのデータ線を反転したもの、D3 と D4 (ポート 1) と D1..D4 (ポート 2) は拡張ポートから反転。駆動されていないビットはどれもバス自身の値であり、取り込んで回して返すもので、決して発明しない
コントローラ、4021ポートの反対側OUT0 が高の間は読み込み続け、その立ち下がりでラッチし (そのときのボタンの状態)、A B Select Start Up Down Left Right を 1 回の読み出しごとに 1 ビット送り出し、8 回目の読み出しより先では線が低を示す (D0 = 1)。文書どおり
74HC04PPU A13 を反転してカートリッジのピン 58 へ反転
リセット鎖RST_PB と CIC のリセット出力が /RESET へボタンが押されている間はアサート。電源が良好になった後とボタンが離れた後は HOLD_MASTER_CYCLES のあいだ保持

テストが教えたこと

六つの部品のうち二つは最初の書き下ろしが間違っていて、テストがそう言った。コードに対してではなくデータシートに対してテストを書く意味はそこにある:

  • コントローラはストローブの立ち下がりでラッチする。 最初の草稿は OUT0 の立ち上がりでレジスタを読み込んでいた。それではストローブが高の間に押されたボタンが取りこぼされる。4021 は並列/直列入力が高の間は連続して読み込み、その入力が落ちるときに抱えているものを保つ。そして 8 回目の読み出しより先ではポートの線は低に座るので、CPU は D0 に 1 を読む。最初の草稿はそれを離されたボタンとしていた。nesdev のページが主張の出どころで、モジュールのコメントは今、線がどの水準を示すかとその理由を述べている。
  • 生の A12 監視は 1 行につき 8 回の立ち上がりを見る。 PPU の実測フェッチ日程 (P3 計画の位置: 背景はパターンテーブル 0 から、スプライトはドット 257..320 でテーブル 1 から、各スプライトのパターン対の前にゴミのネームテーブル取得が二つ) からなる合成の 1 行の上では、A12 はスプライトごとに立ち上がる。ゴミの取得が、その間でラッチの立ち下がり二つぶん A12 を低にするからだ。MMC3 が 1 行に 1 回と数えるのは、低の期間が短い立ち上がりを濾すからだ (M2 の立ち下がり 3 回以上、ドットで約 9 個と述べられている)。A12Watcher はそのフィルタをラッチの立ち下がり数で抱えていて、テストは両方の計数、生の 8 x 240 と濾した後の 240 を押さえる。だからフィルタの理由は文ではなく数字だ。

書き下ろして札を付け、ベンチを待っているもの

  • reset::HOLD_MASTER_CYCLES は仮置きだ: マスタクロックで約 50 ms、ロックアウトの握手にかかる範囲の内側の丸い数字。スケッチの第 5 節がこれを置き換える捕捉を名指している (電源投入時の CPU_RST、RST_PB、CIC_RST と PWR_LED、1 MSa/s、長い記録)。テストはこの数字をその札に釘付けしているので、変更には新しい札か、両方を退役させる捕捉が付いてくる。
  • sram::ACCESS_TIME_NS_GRADE_12 は何にも使われていないデータシートの転記だ。誰かが競合を模型にするなら、そこがこれの行き先になる。
  • コントローラの 9 回目の読み出しの水準と、拡張線の待機水準は nesdev の主張であって、測定ではない。

持ち越し

  • バス調停、値としてのオープンバス、マスタクロック、そして二つのチップの位相合わせは N5 のものだ: このクレートは水準を受け取って水準を返すだけで、チップを一つも知らない。
  • カートリッジ自身の $6000..$7FFF の解読と、NROM を超えるマッパーは、スケッチの言うとおり範囲外だ。

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