Appearance
魔界島カートリッジ換装手順(図解)— HVC-UNROM-02 に AIドパガキを入れる
対象: issue #7 / #34 STEP 5 以降 / ドナー: 魔界島 CAP-MZ(基板 HVC-UNROM-02、PRG: CAP-MZ-0 RP231024D 28 ピン 1Mbit マスク ROM、CHR-RAM 搭載) 換装チップ: SST39SF040(DIP-32・512KB)/ 書き込む ROM: 最終版 build/aidopagaki-devNN.nes(UNROM、PRG 128KB、CHR-RAM)
NROM テスト基板(#34)とは配線が違う
NROM 基板では「下端を揃えて 4 本はみ出し、全部 +5V」で済んだが、UNROM ではソケット 22 番がバンク信号 A16 なので、フラッシュの /OE(24 番)と A17(30 番)も曲げて、A16 をフラッシュ 2 番へ引き回す必要がある。曲げるのは 6 本、ジャンパも 6 本。
全体の流れ

| STEP | 作業 | 担当 |
|---|---|---|
| 1 | PRG マスク ROM「CAP-MZ-0」を外す | あなた |
| 2 | 28P 丸ピンソケットをはんだ付け | あなた |
| 3 | フラッシュに最終版 ROM を焼く(Arduino Mega ライター) | 共同 |
| 4 | 6 本の足を上に曲げ、2 ピンずらしてソケットに挿す | あなた |
| 5 | ジャンパ 6 本(+5V ×2 / GND ×3 / A16 ×1) | あなた |
| 6 | 導通チェック → ファミコンで起動 | あなた |
原理(根拠)
- 任天堂の 28 ピン 128KB PRG マスク ROM のピン配置は、同社 32 ピン配置の 3〜30 番ピンをそのまま取り出したもの(NESdev Wiki – Mask ROM pinout)。
- したがって SST39SF040(JEDEC 標準 32 ピン)を 2 ピンずらして(フラッシュ 3 番 → ソケット 1 番)挿すと、大半の信号が自然に一致する。
- 不一致は 2 箇所:
- ソケット 22 番 = 基板の A16(バンクラッチ 74HC161 の出力)だが、その位置に来るフラッシュ 24 番は /OE → 24 番を曲げて GND へ、A16 はフラッシュ 2 番へ配線
- ソケット 28 番 = +5V だが、その位置に来るフラッシュ 30 番は A17 → 30 番を曲げて GND へ(ROM はフラッシュの下半分 0〜128KB に書く)
ソケット(基板側 28 穴)の信号 — 検証済み対応表
| 穴 | 信号 | 穴 | 信号 |
|---|---|---|---|
| 1 | A15 | 28 | +5V |
| 2 | A12 | 27 | A14 |
| 3 | A7 | 26 | A13 |
| 4 | A6 | 25 | A8 |
| 5 | A5 | 24 | A9 |
| 6 | A4 | 23 | A11 |
| 7 | A3 | 22 | A16(ラッチ出力) |
| 8 | A2 | 21 | A10 |
| 9 | A1 | 20 | /CE(/ROMSEL) |
| 10 | A0 | 19 | D7 |
| 11 | D0 | 18 | D6 |
| 12 | D1 | 17 | D5 |
| 13 | D2 | 16 | D4 |
| 14 | GND | 15 | D3 |
STEP 1: PRG マスク ROM を外す(足切り工法)

- 外す前に基板をスマホで撮影(チップの切り欠き・● 印の向きを記録)
- 精密ニッパーで CAP-MZ-0 の全 28 本の足をチップ本体の根元で切断(基板側に足を残す)
- 残った足をはんだごてで温めつつピンセットで 1 本ずつ抜く
- 吸取線+吸取器でスルーホール 28 穴のはんだを除去(光にかざして貫通確認)
- CHR-RAM・74HC161・74HC32 には触らない
図の部品配置はイメージ。実物は チップの刻印「CAP-MZ-0」と基板シルクで確認すること(エッジコネクタに近い側の 28 ピン品)。
STEP 2: ソケット取り付け
- 丸ピンソケット 28P・600mil(秋月 102841)を切り欠きを基板シルクの向きに合わせてはんだ付け
- はんだブリッジ・スルーホールの未充填がないか目視
STEP 3: フラッシュに最終版 ROM を焼く(挿す前に)
ライターの配線・セットアップ・トラブルシュートは フラッシュライター(Mega)。NROM テストのときと同じライターで、今回は本編 ROM を --ines で書く。
bash
PORT=/dev/tty.usbmodem* # ls /dev/tty.usbmodem* で確認
python3 tools/flashnes.py --port $PORT id # 0xBF 0xB7 なら配線 OK
python3 tools/flashnes.py --port $PORT write build/aidopagaki-dev36.nes --ines # 消去→書込→ベリファイ--inesで iNES ヘッダを外し PRG 128KB をアドレス 0 から書く。A17 = A18 = GND(STEP 5)なので、実機はこの 128KB を読む- 512KB 全域を繰り返し書く必要はない(NROM テストとの違い。バンクは 74HC161 → A14〜A16 で切り替わる)
- 所要時間は 128KB で 10 分前後(約 240B/s)。途中で配線・ケーブルに触れない
- 使う
.nesは 最終版の配布 ROM(build/aidopagaki-devNN.nes、131,088 バイト)。どのコミットのビルドかは issue に記録する
STEP 4: 6 本の足を上に曲げ、2 ピンずらして挿す

曲げる(ソケットに挿さない)ピン: 1, 2, 24, 30, 31, 32 の 6 本
- 1・2・31・32 はソケットの上にはみ出す 2 段。24・30 は途中の足なので、根元から外側・上向きに 1 回で曲げる(往復させると折れる)
- 残り 26 本を「フラッシュ 3 番 → ソケット 1 番」「フラッシュ 16 番(GND)→ ソケット 14 番(GND)」の位置関係で挿す。切り欠きの向きは元のマスク ROM と同じ
- ⚠ 24 番・30 番を曲げ忘れると、/OE が A16 に、A17 が +5V に繋がり、バンク切替が壊れる/空き領域を読む
- ⚠ ノッチ逆挿しは通電した瞬間に壊れる。SST39SF040 には半月ノッチが無いロットがある(端寄りの ● が pin 1 側)
STEP 5: ジャンパ 6 本

| フラッシュピン | 信号 | 接続先 | 備考 |
|---|---|---|---|
| 32 | VDD | ソケット 28 番パッド(+5V) | 必須: 電源 |
| 31 | /WE | +5V(32 番と共通でよい) | 必須: 実機での誤書き込み防止 |
| 30 | A17 | GND(ソケット 14 番パッド) | 曲げる。ROM は下半分 |
| 24 | /OE | GND(同上) | 曲げる。常時出力有効 |
| 2 | A16 | ソケット 22 番パッド(基板 A16) | 曲げる。バンク信号を引き回す |
| 1 | A18 | GND | はみ出し。アドレス固定 |
配線のしかた — 基板にもソケットにもはんだしない
ソケットを付ける前に線を仕込む必要はない
ジャンパの相手(ソケット 22 番・28 番)は、フラッシュの 24 番・30 番を曲げるので空き穴になる。そこへ線の先を挿せば信号が取れる。ソケットと基板の間に線を挟む/基板裏のソケットピンから引き回す、のどちらも不要。
| 取りたい信号 | 取り方 |
|---|---|
| +5V(ソケット 28) | 曲げた 30 番で空いた 28 番の穴に線の先を挿す |
| A16(ソケット 22) | 曲げた 24 番で空いた 22 番の穴に線の先を挿す |
| GND(ソケット 14) | 挿さっている フラッシュ 16 番の足(= ソケット 14 = GND)の肩にはんだ。穴を使わない |
- 丸ピンソケットは 0.4〜0.6mm の線をしっかり掴む。UEW(0.3mm 前後)は細くて抜けやすいので、すずめっき線(0.5mm)かピンヘッダの切れ端に UEW をはんだして、その先を穴に挿す
- はんだ付けは「フラッシュの足 ⇔ 線」だけ。ソケットにも基板にも触らないので、配線ごとチップを抜けば書き直しに持っていけるし、失敗しても基板は無傷
- +5V の 2 本(32・31)はまとめて 1 本にして 28 番へ、GND の 3 本(30・24・1)はまとめて 16 番の足へ、A16(2 番)だけは単独で 22 番へ
- 線はフラッシュの上を這わせ、カートリッジの殻に当たらない高さに。曲げた足と隣の足(3・23・25・29)に触れないこと
どうしてもソケット側に固定したい場合は、ソケットを付ける前に基板の 22・28・14 番のスルーホールへ線を通しておき、ソケットのピンと一緒にはんだする(線は 0.3mm UEW を横へ逃がす)。ただし後から直せないので、まずは上の「穴に挿す」方式を推奨。
STEP 6: 導通チェック → 実機起動

通電前にテスターで:
- 32 番 ⇔ ソケット 28 番(基板裏のソケットピンで測る)、31 番 ⇔ +5V が導通
- 30 番・24 番・1 番 ⇔ ソケット 14 番(GND)が導通
- 2 番 ⇔ ソケット 22 番が導通
- 22 番(/CE)⇔ ソケット 20 番が導通(挿し位置ズレの検出)
- 曲げた足と隣の足(3・23・25・29)が非導通、+5V ⇔ GND が非導通
全部 OK ならファミコンに挿して電源 ON。タイトルの一枚絵とメニューが出れば完成。START でゲームが始まり、10 秒放置でプロローグに入る。
起動しないときの順番
- ノッチの向き
- 32・31 番の +5V
- 22 番(/CE)⇔ ソケット 20 番
- 2 番 ⇔ ソケット 22 番の A16
- 24・30 番が GND
- ソケットのはんだ・スルーホール貫通
「画面は出るが曲が進むと止まる/絵が化ける」は A16 配線(4・5)を疑う。UNROM は曲データ・シーンコードをバンク切替で読むため、A16 が浮いていると特定の場面で壊れる。
ミラーリング設定の確認
基板の V/H はんだパッド(CHR-RAM 脇)が V(垂直ミラーリング)側にブリッジされていることを確認。H 側なら V 側へ付け替える(本作は固定 1 画面でミラーリングに依存しないが、ROM ヘッダは vertical 指定のため合わせておく)。
参考
- 図の再生成:
uv run --with pillow python tools/gen_makaijima_guide.py(docs/hardware/makaijima/) - NROM ドナー基板で「外す→焼く→載せる→動く」を先に検証した手順: 実機 ROM 化ガイド(#34)
- NESdev Wiki – Mask ROM pinout(28 = 32 ピンのサブセットの一次情報)
- NES ROM Pinouts (Drk)
- ライターの使い方: フラッシュライター(Mega)