実験ノート
印刷用: 図面一式「NES controller-port bridge, v1b」TM-NESB-001 版 P (PDF、英語)、組み上がった v1b、写真の上に検査箇所を書き出したもの (PNG)。
docs/lab-log.jsonl から tools/lab-notebook.py が生成する。あのファイルには、
各ステップを試すたびに tools/bringup.py が追記する。中身は一つも手で打たれて
いない。失敗したものも含めて、すべての試行が載る。三回かかったステップこそ、
ノートの取っておく価値のある部分だからだ。
組むのは v1b、Arduino UNO の上のブリッジで、すべて 5 V (bench-v1b-uno.md)。
ステップとその検査は tools/bringup.py の中にあり、あれは記録であると同時に
手順でもある: 走らせれば組み立てを順に歩き、停留点ごとに測る。
どれもハードウェアに触れる前に、道具は代役に対して予行してある。2026-09-08 に 6 回の試行。それらは印を付けてログに入っており、以下では数えていない。
組み立てはどこまで来たか
試した 8 ステップのうち 8 が成立。試行は 21 回。
| ステップ | 何を証明するか | 試行 | 状態 |
|---|---|---|---|
| 0.1 | スコープが応答し、自分が何かを言う | 2 | 成立 |
| 0.2 | ワークステーションがシリアルポートを開ける | 2 | 成立 |
| 0.3 | ブリッジのファームウェアが UNO に載っていて STATUS に答える | 2 | 成立 |
| 1.1 | コントローラのハーネスの色と、ポートのピンの対応 | 1 | 成立 |
| 1.2 | コンソールの電源を入れたときのポートのアイドルレベル | 1 | 成立 |
| 2.1 | 純正パッドのポートにスコープを当て、ゲームを走らせる | 3 | 成立 |
| 5.1 | 二つの半分をつなぎ、ゲームでラッチあたり 8 クロック | 7 | 成立 |
| 6.1 | トリガがスコープに届く | 3 | 成立 |
計器
0.1 スコープが応答し、自分が何かを言う
試行 1、2026-09-08 11:07:20: 成立。DS1054Z、ファームウェア 00.04.05.SP2
試行 2、2026-09-08 12:41:12: 成立。DS1054Z、ファームウェア 00.04.05.SP2
0.2 ワークステーションがシリアルポートを開ける
試行 1、2026-09-08 11:07:24: 成立しなかった。/dev/ttyACM* も /dev/ttyUSB* も無い: UNO は挿さっているか。
写真は未撮影: docs/lab/00-uno-bare.jpg。
試行 2、2026-09-08 12:41:14: 成立。socket://:6545 が開く
写真は未撮影: docs/lab/00-uno-bare.jpg。
0.3 ブリッジのファームウェアが UNO に載っていて STATUS に答える
試行 1、2026-09-08 12:41:15: 成立。# mode pass latch 482 clocks 0 held 00
試行 2、2026-09-08 12:43:11: 成立。# mode pass latch 0 clocks 0 held 00
ハーネス
1.1 コントローラのハーネスの色と、ポートのピンの対応
答えるもの: wiring.md のポート表は、このステップがこの基板の上で確認するまでは、公表されたピン配置にすぎない。
2026-09-08 13:26:56: 成立。7 本中 7 本を対応付けた。ポートのハウジングに成形されたピン番号から読んだ。番号付けはハウジング自身のもので、それを試すのはステップ 1.2 の +5V の読みだ
方法: ポートのハウジングに成形されたピン番号から読む。
| ポートのピン | 信号 | 線 |
|---|---|---|
| 1 | GND | 茶 |
| 2 | CLK | 赤 |
| 3 | OUT0 | 橙 |
| 4 | D0 | 黄 |
| 5 | D3 | 白 |
| 6 | D4 | 青 |
| 7 | +5V | 紫 |


写真は未撮影: docs/lab/01-board-header.jpg。
1.2 コンソールの電源を入れたときのポートのアイドルレベル
2026-09-09 21:33:50: 成立。電源 5.0 V、OUT0 のアイドルは 0.091、CLK のアイドルは 5.002、D0 は None。スコープの CH4/CH1/CH2、1x、グランドは黄色のリード線で読んだ。D0 は読んでいない
| 電源のリード線 | 5 V |
| OUT0 のアイドル | 0.091 V |
| CLK のアイドル | 5.002 V |
写真は未撮影: docs/lab/01-meter-on-port.jpg。
実物自身のタイミング
2.1 純正パッドのポートにスコープを当て、ゲームを走らせる
答えるもの: wiring.md の書き下ろし「ラッチは数 us 高、クロックは数百 ns 低、クロックの間はおよそ 7 us、1 秒に 60 ポーリング」。
試行 1、2026-09-09 21:06:59: 成立しなかった。ラッチのチャネルが平ら (255 のうち 76 から 77): プローブは当たっているか、コンソールは動いているか。
写真は未撮影: docs/lab/02-probes-on-port.jpg。
写真は未撮影: docs/lab/02-scope-screen.jpg。
試行 2、2026-09-09 21:14:12: 成立。ラッチ高 3.32 us、クロック低 0.600 us、クロック周期 10.62 us、60.10 ポーリング/s、15 ラッチにわたってラッチあたり 8 クロック
| ラッチのパルス、高 | 3.32 us |
| クロックのパルス、低 | 0.6 us |
| クロックの間 | 10.62 us |
| ポーリングの間 | 16.639 ms |
| 1 秒あたりのポーリング | 60.1 |
| 記録の中のラッチ | 15 |
| ポーリングあたりのクロック | 8 |
ポーリングあたりのクロック数: 14 ポーリングで 8 クロック。
写真は未撮影: docs/lab/02-probes-on-port.jpg。
写真は未撮影: docs/lab/02-scope-screen.jpg。
試行 3、2026-09-09 21:24:27: 成立。ラッチ高 3.32 us、クロック低 0.580 us、クロック周期 10.62 us、60.10 ポーリング/s、15 ラッチにわたってラッチあたり 8 クロック
| ラッチのパルス、高 | 3.32 us |
| クロックのパルス、低 | 0.58 us |
| クロックの間 | 10.62 us |
| ポーリングの間 | 16.639 ms |
| 1 秒あたりのポーリング | 60.1 |
| 記録の中のラッチ | 15 |
| ポーリングあたりのクロック | 8 |
ポーリングあたりのクロック数: 14 ポーリングで 8 クロック。
写真は未撮影: docs/lab/02-probes-on-port.jpg。
写真は未撮影: docs/lab/02-scope-screen.jpg。
つないだ
5.1 二つの半分をつなぎ、ゲームでラッチあたり 8 クロック
答えるもの: 計画の B0 ゲート 1。実物が答えることのできる最初のものだ。
試行 1、2026-09-15 15:52:06: 成立しなかった。20 s で 1203 ポーリング (60.1/s)、ポーリングあたりのクロック数 {0: 18, 1: 37, 2: 29, 3: 28, 4: 12, 5: 4, 6: 12, 7: 32, 8: 826, 9: 40, 10: 35, 11: 10, 12: 16, 13: 37, 14: 35, 15: 27, 16: 5} <- 377 ポーリングが 8 クロックではなかった
| 1 秒あたりのポーリング | 60.15 |
| 記録したポーリング | 1203 |
| 8 クロックのポーリング | 0.687 |
ポーリングあたりのクロック数: 0 クロックが 18 ポーリング、1 クロックが 37 ポーリング、2 クロックが 29 ポーリング、3 クロックが 28 ポーリング、4 クロックが 12 ポーリング、5 クロックが 4 ポーリング、6 クロックが 12 ポーリング、7 クロックが 32 ポーリング、8 クロックが 826 ポーリング、9 クロックが 40 ポーリング、10 クロックが 35 ポーリング、11 クロックが 10 ポーリング、12 クロックが 16 ポーリング、13 クロックが 37 ポーリング、14 クロックが 35 ポーリング、15 クロックが 27 ポーリング、16 クロックが 5 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
試行 2、2026-09-15 17:48:58: 成立しなかった。20 s で 1202 ポーリング (60.1/s)、ポーリングあたりのクロック数 {0: 7, 8: 1188, 16: 7} <- 14 ポーリングが 8 クロックではなかった
| 1 秒あたりのポーリング | 60.1 |
| 記録したポーリング | 1202 |
| 8 クロックのポーリング | 0.988 |
ポーリングあたりのクロック数: 0 クロックが 7 ポーリング、8 クロックが 1188 ポーリング、16 クロックが 7 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
試行 3、2026-09-15 17:49:58: 成立しなかった。20 s で 1202 ポーリング (60.1/s)、ポーリングあたりのクロック数 {0: 2, 8: 1198, 16: 2} <- 4 ポーリングが 8 クロックではなかった
| 1 秒あたりのポーリング | 60.1 |
| 記録したポーリング | 1202 |
| 8 クロックのポーリング | 0.997 |
ポーリングあたりのクロック数: 0 クロックが 2 ポーリング、8 クロックが 1198 ポーリング、16 クロックが 2 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
試行 4、2026-09-15 17:50:23: 成立。20 s で 1203 ポーリング (60.1/s)、ポーリングあたりのクロック数 {8: 1203} <- B0 ゲート 1 が成立
| 1 秒あたりのポーリング | 60.15 |
| 記録したポーリング | 1203 |
| 8 クロックのポーリング | 1 |
ポーリングあたりのクロック数: 8 クロックが 1203 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
試行 5、2026-09-15 17:51:24: 成立。20 s で 1202 ポーリング (60.1/s)、ポーリングあたりのクロック数 {8: 1202} <- B0 ゲート 1 が成立
| 1 秒あたりのポーリング | 60.1 |
| 記録したポーリング | 1202 |
| 8 クロックのポーリング | 1 |
ポーリングあたりのクロック数: 8 クロックが 1202 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
試行 6、2026-09-15 17:51:49: 成立。20 s で 1203 ポーリング (60.1/s)、ポーリングあたりのクロック数 {8: 1203} <- B0 ゲート 1 が成立
| 1 秒あたりのポーリング | 60.15 |
| 記録したポーリング | 1203 |
| 8 クロックのポーリング | 1 |
ポーリングあたりのクロック数: 8 クロックが 1203 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
試行 7、2026-09-15 17:52:14: 成立。20 s で 1202 ポーリング (60.1/s)、ポーリングあたりのクロック数 {8: 1202} <- B0 ゲート 1 が成立
| 1 秒あたりのポーリング | 60.1 |
| 記録したポーリング | 1202 |
| 8 クロックのポーリング | 1 |
ポーリングあたりのクロック数: 8 クロックが 1202 ポーリング。
写真は未撮影: docs/lab/05-bridge-joined.jpg。
写真は未撮影: docs/lab/05-console-running.jpg。
ヘッドの手
6.1 トリガがスコープに届く
試行 1、2026-09-15 15:52:46: 成立しなかった。スコープがトリガしなかった: 抵抗、BNC、EXT TRIG のレベル (1.5 V、立ち上がり) を確認する
写真は未撮影: docs/lab/06-trigger-cable.jpg。
試行 2、2026-09-15 17:38:35: 成立。TRIG 20 が CH1 でスコープを止めた
写真は未撮影: docs/lab/06-trigger-cable.jpg。
試行 3、2026-09-15 21:14:18: 成立。TRIG 20 が CH1 でスコープを止めた
写真は未撮影: docs/lab/06-trigger-cable.jpg。
ビルド時に nes-bench/docs/lab-notebook.md から取り込まれる。リポジトリが唯一の写しだ。報告書は独自の作業用語をいくつか使っている: 報告書で使われる言葉。