コンソールのロックアウトチップ
2026-10-02 に書いた。較正カートリッジの一枚目のボードが灰色の画面を出し、 このコンソールのロックアウトは本当に無効化されていたのか、という疑問が出た あとのことだ。カートのページは 2026-09-14 から、持ち主の言葉を頼りにそう 言ってきたが、このリポジトリの中の何も、それを測ってはいなかった。この ページは、正しいやり方での改造、その失敗のしかた、そして十二秒で疑問に 答える測定だ。
チップそのものについてのことはすべて nesdev の wiki から取り (CIC lockout chip、そのピン配置、CPU と PPU のピン配置、カートリッジのコネクタ。どれも 2026-10-02 に読んだ)、そう記してある。ピン番号は公開されているものだ。この コンソールの基板の上では、まだ一本も突き止めていない。下の手順は、テスター 無しでどれかを信じろとは誰にも言わない。
チップがすること、公開されている説明から
フロントローダーの NES には小さなマイクロコントローラ、ロックアウトチップが
載っている (このコンソールでは 3193A、基板は NES-CPU-10: wiring.md)。
ライセンスされたカートリッジにも同じ部品が載っている。コンソールの側のものは
ロックとして、カートリッジの側のものは鍵として配線されていて、
二つの違いはピン一本だけだ:
- どちらであるかはピン 4 が決める。 このピンは "is pulled to +5V inside the NES and grounded on the Cart" (NES の中では +5 V に引き上げられ、 カートの上ではグラウンドに落とされている)。
- ロックと鍵は、4 MHz のクロックを分け合いながら、二本のデータ線で流れを やり取りする。鍵が正しく答えなければ、"the lock will pull the /CPU & PPU RESET line low with a 1Hz square wave" (ロックは CPU と PPU のリセット線を 1 Hz の方形波で low に引く)。
- それをするのはロックだけだ。"It is only the lock, not the key, [that] asserts its reset output." (リセットの出力を働かせるのはロックだけで、 鍵ではない。)
| ピン | 名前 | 何であるか |
|---|---|---|
| 1 | Data Out | 相手のチップへの流れ |
| 2 | Data In | 相手からの流れ |
| 3 | Seed | |
| 4 | Lock/Key | コンソールでは +5 V (ロック)、カートリッジではグラウンド (鍵) |
| 5 | 未接続 | |
| 6 | Clk in | 4 MHz |
| 7 | Reset | チップ自身のリセット、入力: コンソールのリセットのバス |
| 8 | Gnd | |
| 9 | /Host reset | 出力、CPU と PPU のリセットのピンへ |
| 10 | Slave CIC reset | 出力、鍵のリセットへ |
| 11, 12 | Gnd (リセットの速さ A, B) | |
| 13, 14, 15 | Gnd | |
| 16 | +5 V |
このうち四本がカートリッジのコネクタに届く: ピン 34 と 35 (二本のデータ線)、 70 (鍵のリセット)、71 (クロック)。較正カートリッジでは、それらは U2 の空の パッドで終わり、何も答えない。
改造は、ピンを一本基板から離すこと
やり方は nesdev の「ピン 4 の方法」だ: "configuring the CIC in the console as a key prevents it from resetting. This can be done by disconnecting the console CIC's pin 4 from the board. Optionally, this disconnected pin can be tied to ground, but the CIC has internal pulldowns that make the pin read as 0 even if left floating." (コンソールの CIC を鍵として設定すれば、リセットを 掛けなくなる。それにはコンソールの CIC のピン 4 を基板から切り離せばよい。 切り離したピンをグラウンドにつないでもよいが、CIC の中にはプルダウンが あるので、浮かせたままでもピンは 0 と読まれる。)
丁寧にやるなら、間違ったものを切りにくくする確認と一緒に:
- 基板を出し、部品面を上にし、電源は入れない。 ロックアウトチップは CPU や PPU と同じ面にある。切るのはこの面からだ。はんだ面からだとピンは すべて鏡写しになり、そこで数えるのが、間違ったピンを切る道だ。
- ピン 4 を数えて見つけ、それからテスターで証明する。 切り欠き (または 点) を上にする: ピン 1 は左上で、番号は左側を 8 まで下り、右側を 9 から 16 まで上って戻る。ピン 4 は左側の上から四本目で、ピン 13 はチップを 挟んでその真向かいにある。何かを切る前に電源を入れると、ピン 4 は +5 V、 ピン 13 は 0 V と読める。上から四本目が +5 V と読めないなら、チップの 向きが逆か、違うチップだ。そのときは何も切らない。
- ピンを基板から離す。離すのはピンだけだ。 足を基板に近い低い位置で 切り、残った根元を外へ曲げて、元のパッドからも、ピン 3 と 5 からも 離して立たせる。あるいは、はんだを抜いて持ち上げる。どちらでも、 はんだ付けできるだけの長さの根元がチップに残る。それがあるから手順 4 が でき、全体を元に戻せる。基板の配線は切らないこと。
- 根元をグラウンドにつなぐ。 nesdev はこれを任意としている。この ページでは、それでもやる: 四十年前の部品の中のプルダウンに頼って浮いて いる入力は、ベンチでは動き、湿った日には動かない類のものだ。ピン 13 は チップの真向かいにあってグラウンドなので、パッケージの上を渡す短い線で 足りる。
- 電源を入れずに確かめる。 根元と元のパッドの間: 開いている。根元と ピン 16 (+5 V) の間: 開いている。根元とピン 8 または 13 (グラウンド) の 間: 手順 4 でつないだのなら、閉じている。
公開されている方法には、何も切らないものがもう一つある: 線を二本、ロックの ピン 7 から 74HCU04 のピン 1 へ、そのインバータのピン 2 からロックのピン 9 へ。これはロックをリセットに保ち、リセットのボタンが CPU と PPU を直接 動かせるようにする。ここでやったのはそれではない。名前を挙げるのは、余分な 線を二本見つけた人に、それが何かが分かるようにするためだけだ。
どう失敗するか
- 間違ったピン。 逆の端から数えたか、はんだ面で鏡写しにせずに数えたか。 手順 2 の読みが、そのどちらも捕まえる。
- 足は切れているが、まだ触れている。 切った足がパッドの上へ跳ね戻るか、 根元がパッドに寄りかかっている。そうなると、基板を動かすまでは動く。 手順 5 の最初の読みがこれを捕まえるのは、テスターを当てたまま基板を 少したわませたときだけだ。
- 足ではなく配線を切った。 ピン 4 は、配線の残った部分にまだつながって いる。それが何につながっているかは、切った場所しだいだ。
- 足がピン 3 かピン 5 の近くで浮いていて、フラックスの橋かひげが それらをつないでいる。
- 基板に電源が入っていると、テスターには浮いた足とグラウンドに落ちた足の 区別がつかない。 テスター自身の十メガオームが、浮いた入力をゼロへ 引いてしまうからだ。その読みが言うのは、足が +5 V ではないということ だけだ。グラウンドにつながっているかどうかは手順 5 の問いで、電源を 入れずに確かめる。
鍵の無いカートリッジが画面に見せるもの、どちらの場合も
これは道具の要らない確認で、最初にやる価値がある。
スロットに鍵が無いとき (スロットが空か、ロックアウトチップの載って いないカートリッジ。較正カートリッジがそうだ)、働いているロックは CPU と PPU をおよそ一秒に一度リセットする。PPU のリセットは "is used in the NES to clear the screen when the console is reset either by the button or the CIC" (NES では、ボタンか CIC によってコンソールがリセットされたときに画面を 消すために使われる)。だから絵はおよそその間隔で点滅し、プログラムは そのたびに最初からやり直す。
だから二つの状態は、テレビの上では違って見える:
| ロックは | 鍵の無いカートリッジが見せるもの |
|---|---|
| 生きている | およそ一秒に一度の点滅。カートリッジが何であっても |
| 無効化されている | カートリッジのすること何でも: 動くならその絵、動かないなら変わらない灰色 |
変わらない灰色の画面はロックではない。 それはプログラムが一度も 走らなかったカートリッジだ。点滅する画面はロックか、あるいは、生きている ロックの下でやはり動いていないカートリッジだ。ロックが邪魔をしなくなる までは、点滅はカートリッジについて何も言わない。
リセット線は十二秒でそれを言う
tools/lockout-check.py は、スコープのチャンネルを一つリセット線に当て、
そこから答えを読む。スロットに鍵が無いとき、この線は high のままか、
およそ一秒の方形波かのどちらかだ。
python3 tools/lockout-check.py --cart keyless --channel 1 # スロットに較正カートリッジ
python3 tools/lockout-check.py --cart none --channel 1 # スロットは空
python3 tools/lockout-check.py --cart keyless --channel 1 --pin4 2 # それに、切った足のレベルを CH2 で
python3 tools/lockout-check.py --selftest # ベンチ無し: MUTATE=1 なら赤になるはず
十二秒の記録を二つ取る:
- watch (見る)。コンソールには手を触れない。記録の間ずっと high の ままか、脈を打っているか。
- button (ボタン)。その間にリセットを一度押して離す。線は落ちて、 戻らなければならない。
| 言うこと | 意味 |
|---|---|
| DEFEATED | 鍵が無いのに high のままで、ボタンを押すと落ちた (無効化されている) |
| NOT DEFEATED | 線の上におよそ一秒の方形波がある、またはピン 4 の足がまだ +5 V にある (無効化されていない) |
| NOT SHOWN | それ以外のすべて。理由が付く: 一度も high にならなかった、一度もロジックのレベルにならなかった、high のままだが一度も落ちなかった (示されなかった) |
ボタンの記録があるのは、+5 V の電源線も十二秒間 high のままだからだ。
そこにプローブを当てたら、それが無ければ、無効化されたロックと読まれて
しまう。--cart licensed は断られる: 本物の鍵がスロットにあると、働いている
ロックも線を high に保つので、記録では二つを見分けられない。
道具には確かめられず、テスターでやるしかないこと。 前面のリセットの ボタンは CPU を動かしていない。ロック自身のリセットの入力 (ピン 7) を 動かしていて、その線もボタンを押すと落ち、しかも方形波は決して乗らない。 そこにプローブを当てると、ロックが生きていても DEFEATED と言われてしまう。 だから、読みを数に入れる前に、プローブを当てる点から CPU のリセットのピン までの導通を、電源を入れずに確かめる。道具は DEFEATED と言うたびにこの 注意を表示するが、代わりにやってはくれない。
リセット線はどこにあるか
一つのネットで、公開されている場所は三つ: ロックのピン 9、CPU のピン 3
(2A03、/RST)、PPU のピン 22 (2C02、/RST)。切り欠きを上にした 40 ピンの
チップでは、ピン 3 は左側の上から三本目、ピン 22 は右側の下から二本目だ。
はんだ面からだと、どちらも鏡写しになる。
三つのどれでもよく、プローブを当てたまま保ちやすい、いちばん大きなパッドが 正しい選択だ。プローブは 1X で (ベンチのほかの段がスコープをそう構える)、 グラウンドのクリップは基板のグラウンドへ。電源を入れる前に、選んだ点から 残りの二つへの導通を確かめる: それは道具が求めるのと同じ読みで、この基板の 上でこの三本のピンを初めて突き止めることにもなる。
このコンソールがこれまでに見せたこと
- 無効化してあると言われてきた。
build-the-cal-cart.md、cart-blanks.md、tools/nesprep.pyの中で、2026-09-14 から、持ち主の 言葉を頼りに。測ってはいない。 - 2026-10-01: 較正カートリッジの一枚目のボードは、ロックアウトチップが
載っておらず、灰色の画面を出した。変わらない灰色で、点滅はしていな
かった (持ち主の報告、2026-10-02)。上の表に照らせば、ロックは
コンソールをリセットしていない。つまり改造は、目で見るかぎり効いていて、
灰色はカートリッジの側のものだ。そのあと、二つのチップはどちらも丸ごと
読み戻せた (
cal-cart-build.md)。 - 2026-10-02: 道具の道筋の全体を、コンソールにプローブを当てずに、 スコープを相手に走らせた。十二秒を記録し、NOT SHOWN と言い (線は low の ままだった)、スコープの設定を元に戻した。証明されたのは計器であって、 コンソールについては何も分かっていない。
目では答えが出た。まだ開いていて、それを測定にするもの:
チップとそのピン 4 の写真。手順 5 のテスターの読み。リセット線に当てた
道具。その作業のための文書は
procedures/2026-10-02-is-the-lockout-defeated.md だ。
出典: https://www.nesdev.org/wiki/CIC_lockout_chip、 https://www.nesdev.org/wiki/CIC_lockout_chip_pinout、 https://www.nesdev.org/wiki/CPU_pinout、 https://www.nesdev.org/wiki/PPU_pinout、 https://www.nesdev.org/wiki/Cartridge_connector。
ビルド時に nes-bench/docs/lockout.md から取り込まれる。リポジトリが唯一の写しだ。報告書は独自の作業用語をいくつか使っている: 報告書で使われる言葉。