Skip to the content
2 layers90 × 65.8 mmFc magicon, the printed circuit board in 3D

Famicom cartridge built around one RP2350B (Waveshare Core2350B): PRG/CHR emulation, NSF player, PC-to-Famicom screen streaming. KiCad 10.

Size
90 × 65.8 mm
Copper layers
2
Thickness
1.2 mm
Parts
39
Nets
89
Pads
289
Tracks, vias
1,235, 221
Pours
66
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Sep 2026
Updated
3 Nov 2026

Overview

Fc magicon is an open-source printed circuit board by SHIMA-R7, from the SHIMA-R7/fc-magicon repository on GitHub, published under the MIT licence. It is a 2-layer board of 90 × 65.8 mm with 39 parts on 89 nets, routed with 1,235 tracks and 221 vias.

It is built around the 2SC1815. Its parts include 11 resistors, 10 connectors, 4 capacitors, 2 switches and 1 IC.

Main components

1

README

README.md

FC-MAGICON

Waveshare Core2350B(RP2350B)1枚で作るファミコン用カセット。

ツインファミコンとFC-MAGICON、ブラウン管でのカラー映像表示、ファミリーベーシックキーボード

ツインファミコン+ブラウン管での実機表示。カートリッジ・画面の接写・テスト風景を見る(写真4枚)。

  • PRG・CHR を RP2350B がリアルタイムにエミュレート(マジコン。NROM/CNROM/UNROM/MMC1/MMC3 などをファームで実装)
  • NSF 再生(バンク切り替え・WRAM 対応。拡張音源は PWM で46番に混ぜる)
  • PC→FC 画面転送(PPU の読み出しに直接応答する FC-PICO 方式)

2026-10-31の更新

  • 新基板の元配線で全編動画を再生:全1,939コマ・8fpsの進行と、FC給電だけでの起動を確認。検証記録。
  • 動画と本体音源の同時再生:ユーザー提供MIDIを矩形波2音+三角波へ変換し、動画と一緒に再生。本体音源の発音はユーザーが確認した。方式・ビルド手順・確認範囲。
  • 一時的な横縞への対策:画面切り替えの制御情報を事前生成してCPUへ高速応答する比較版で、問題の場面の横縞が再現せず、248秒の全編試験を完走。全画素の無欠損や旧基板の故障原因まで保証する結果ではない。
  • MIDI、動画、録画、楽曲を含むヘッダー・UF2は公開しない。公開ソースでは自分のMIDIを外部ファイルとして指定する。

2026-10-18時点の達成事項

  • 単独動画再生の目標達成:PC非接続のツインファミコンで、全編99秒・8fpsのカラー映像と音声を再生。ユーザーが完成を確認した。著作物である動画素材・音声・それらを含むUF2は公開しない。
  • ESP32-C6無線リモートデスクトップは、PCの映像・音声とFC入力をWi-Fi経由でやりとりします。ツインファミコン給電のみでの起動と映像転送を実機で確認しました。配線・ビルド・4:3全画面設定
  • USBリモートデスクトップでブルアカ操作に成功:FMV(Windows 11)から映像・音声を転送し、入力をPCへ反映。通常のWindowsでは動くのにブルアカでFCパッド/Nanoマウスが効かない問題は、ユーザーが送信アプリを管理者として実行して解消を確認した。この環境では送信アプリを右クリック→管理者として実行する。
  • 操作機能:SELECTで通常→中段ズーム(512×480)→最大ズーム(256×240)。FCキーボード対応。NanoのUSBシリアルによるSFCマウス移動・左右クリックも追加し、元のPico向け通信は維持した。
  • 終了動作:受信r2は送信アプリ停止時と切断/受信停止時に、音声を止めて待機画面へ戻る。
  • 配布:Windows送信アプリr2.3、FMVの使い方、Nanoマウス。送信アプリと受信ファームは別の版番号。
  • 映像崩れの切り分け:同じファームの照合は通り、最小診断ではROM読み出し3508回中不一致0。ユーザーがカセット/基板を動かすと崩れが消えることを確認し、接触状態が強く疑われる。音声・キーボードの処理だけが原因とした途中の見立ては確定していない。接触箇所と長時間安定性は引き続き確認が必要。
  • 次の段階:ESP32-C6による無線転送。現在の修正済み映像・音声との統合、電源容量、逆給電防止を確認してから進める。

達成状況と実機確認 / 今後の計画

2026-10-13時点の経過(以下の未確認事項の一部は、その後上記まで進展)

  • 実機確認:NEWファミコンで診断画像、F1 Race、スーパーマリオブラザーズが動作。SMB1はユーザーが1-2までプレイし問題なし。MMC3のマリオ3は遊べる段階まで進んだが、下部表示の化けが残る。
  • リモート表示:実機でPC画面の灰色・全画面表示を確認。高画質カラー・動画・音声の同時動作はまだ実機未確認。
  • オフライン検証:MMC3のIRQテストと同一入力3,900フレームの比較、カラー動画の連続表示、実際のC音声リングを使った通信負荷試験を追加。エミュから描画位置を得る試験は、実機の成功を保証しない。
  • 修正:MMC3リロード要求の世代管理、リモートのタイル番号保持、12ドットカーソル、マウス感度半減、音声を映像の間に送れる任意の分割プロトコル。
  • 未解決:実機のPPU位置検出・応答期限、タイル圧縮の画質低下と8フレームNT更新中の混在、実機のMMC3 IRQ/CHR更新、カラー・音声・動画の安定性。
  • 検証記録:MMC3、動画・音声、PVの30秒検証。ゲームROMや動画素材は公開しない。
  • 先例を参考にした最適化:PCのカラー変換を画素同一のまま平均26.9ms→14.8msへ短縮。ネームテーブル/CHRアドレスだけからの位置検出もエミュで確認(実機のDMA経路への接続はまだ)。同じPVを再検証済み。
  • 未書込みの実験版:分割受信・小カーソルのUF2。remote_pc.py --chunked はこの新受信ファーム専用。従来プロトコルは引き続き使用できる。

カートリッジの外観

光沢ラベルを貼ったFC-MAGICONカートリッジ。Core2350B2、スイッチ、音量調整とUSBフラットケーブル

光沢ラベルを貼ったカートリッジ。開口部からCore2350B2や各操作部へアクセスできる。実機写真の一覧。

基板と既存機能

  • 基板 rev0.2 の設計が完了(2層、DRC エラー0・未接続0)。発注済み(2026-10-10 ユーザー確認)。
  • 発注後の保護対策: 対策・後付け回路・検証手順。保護版ファームは firmware/out-protected/。現物での電源・バス波形検証は未実施。
  • ファームウェア: 動作確認用の bus_test(CPU バスでテスト ROM を返して音を鳴らす)と chr_test(PPU に CHR を返して画面に格子模様を出す)、 マジコン本体の magicon(.nes を動かす。NROM/MMC1/UxROM/CNROM/MMC3/AxROM、PRG + CHR 384KB まで)を作成、ビルド済み。各モードの実機確認範囲は上記を参照。firmware/
  • rev0.1 からの変更: USB の予備ランド(J6)、拡張音源の音量用の半固定抵抗 VR1(KOA KVSF637AC104)を追加、 電源・音声の配線を太くした(+5V 0.8mm、VBUS 0.6mm、GND 0.5mm、+3V3 0.4mm、音声 0.4mm)、J5 の 12〜14番を GND に。
  • ガーバー: kicad/FC-MAGICON_gerber_r0.2.zip(発注の指定は下の「基板の発注」)
  • 仕様書: docs/hardware_spec.pdf(rev0.2)
正面(部品面、本体の手前)背面
frontback

oblique

ファイル

パス内容
kicad/gen_schematic.py回路図の生成スクリプト(python gen_schematic.py → FC-MAGICON.kicad_sch)
kicad/gen_footprints.pyカセット端子と半固定抵抗(KOA KVSF637A)のフットプリントを生成
kicad/build_pcb.py基板の部品配置(place)、配線の取り込みと GND ベタ(import)、一部の配線のやり直し(reroute)
kicad/route.pyFreerouting で自動配線(線幅のクラスを付ける)
kicad/add_part.py / sync_nets.py / hand_route.py配線済みの基板に部品を足す / パッドのネットを回路図に合わせる / 1本だけ手で引く
kicad/export_gerbers.ps1DRC がエラー 0 のときだけガーバーを出して zip にする
kicad/bom.py, print_bom.ps1部品表(bom.csv)の作成と印刷
kicad/print_core2350b_pinmap.ps1, print_fit_check.ps1Core2350B のピン照合シート、実寸の現物合わせシートの印刷
kicad/check_nets.py, drc_summary.py回路図の簡易チェック、DRC レポートの集計
3d/基板の STEP(FC-MAGICON_r0.2_parts.step 部品あり / _board.step 基板だけ / FC-MAGICON.step 部品あり版を Autodesk で読み込んで書き出し直したもの)。make_models.py → export_step.py(KiCad の Python)で作り直す。原点は基板の左上、Y は上向き(基板は Y 0〜-65.8)
kicad/print_part_guide.ps1部品案内図(表・裏、原寸)の印刷
case/label/カセット表面のシール(make_label.py → label.png、print_label.ps1 で A4 に印刷)。99 x 60.6mm、ケースの穴(J3/J5/J6/VR1/SW/Core2350B2)は原寸。L 判の光沢紙にきれいに刷る時は make_label.py --px 48 --out label_print.png → powershell.exe -File print_label_photo.ps1(光沢紙・写真品質)
case/*.pyケースの元データ(下記)の寸法を調べたスクリプトと、基板の部品の占有範囲(parts.json)
docs/ハードウェア仕様書(build_spec.py と kicad/gen_spec_tables.py で作る)

KiCad 10、Freerouting 2.4.1 を使用。KiCad の Python(pcbnew)で実行するスクリプトと、ふつうの Python で実行するスクリプトがある(各ファイルの先頭に記載)。

ライセンス

独自コードはMIT(LICENSE)。第三者のエミュレーターや検証用パッチはそれぞれのライセンスに従う。第三者コードと検証コアを参照。外形の参考にしたデータ(下記「カセット外形の参考データ」)はこのリポジトリに含めていない。

ピン割り当て

GPIO信号カセット端子備考
0-7CPU D0-D743,42,41,40,39,38,37,36
8-22CPU A0-A1413,12,11,10,9,8,7,6,5,4,3,2,33,34,35A0から連続
23/ROMSEL44
24CPU R/W14
25M232
26-33PPU AD0-AD726,27,28,29,60,59,58,57/RD直前はアドレス下位、その後データ
34-38PPU A8-A1251,52,53,54,5526-38で13ビット連続
39(基板上LED)—バスに使わない
40PPU /RD17U2(74LVC245)経由
41PPU /WR47U2経由
42PPU A1356U2経由
43CIRAM A10 出力18JP1を閉じたとき
44拡張音源 PWM46へ混ぜる
45/IRQ 駆動15Q1(NPN)でオープンコレクタ
46本体5V検出30,31 を分圧Highになるまでバスに出力しない
  • PIO の32本窓: CPU 用ブロックは GPIO0-31、PPU 用ブロックは GPIO16-47。
  • GPIO0-38 は 5V トレラント。GPIO40-47 は ADC 兼用で 5V 非トレラント。
  • PPU A0-A7(19-25, 50番)はつながない。
  • CIRAM /CE(48)は /A13(49)に直結(R1 0Ω)。
  • ミラーリング: JP1(MCU)/ JP2(A10=垂直)/ JP3(A11=水平)のどれか1つだけ閉じる。

テスト用のランド(2.54mmピッチ、ピンヘッダー・ソケットどちらも可)

基板は規格(56.8mm)より 9mm 高い(90 × 65.8mm)。

J4: カセット60ピン全部(2x30) — 差し込み部のすぐ上(2026-09-26、2層に収めるため上辺から移動) 各列がカセット端子の真上にあり、端子から J4 まではほぼ真上への短い配線。上の列 = 31〜60番、下の列 = 1〜30番。 部品面(本体の手前)から見て左端が 1/31番、右端が 30/60番(シルクに列番号あり)。 RP2350 では使わない PPU A0-A7(19〜25番、50番)も出している。

J5: 基板内部の信号(2x8) — 上辺 部品面から見て左端が 1/2番。奇数番 = 下の列、偶数番 = 上の列。

ピン信号ピン信号
1PPU /RD(3.3V、U2の後)2PPU /WR(3.3V)
3PPU A13(3.3V)4CIRAM A10(GPIO43の出力)
5拡張音源 PWM(GPIO44)6PWM の RC フィルタの後
7/IRQ 駆動(GPIO45)8本体5V検出(GPIO46)
9+3.3V10VBUS(モジュールの電源)
11CIRAM A10(18番へ行く線)12ライン出力(47kの前)
13Q1 ベース14ライン出力(100Ωの後)
15GND16GND

TP1〜TP5(/RD、D0、M2、/ROMSEL、GND)はオシロのプローブ用。

基板発注前に確認すること

  1. カセット端子の電源・音声・制御ピン。 → 2026-09-26 ユーザーが麻雀カセット・本体で確認、問題なし。 信号線51本はダンパー(../FC)で実機確認済み。 1,16(GND)・30,31(+5V)・15(/IRQ)・18(CIRAM A10)・45,46(音声)・47(/WR)・48(CIRAM /CE)・49(/A13)は nesdev の資料によるので、麻雀カセットと本体で導通を確認する。
  2. 45/46 の向き。 → 2026-09-26 確認済み。 本体(HVC-CPU-07)で、どちらが 2A03 の音声回路につながっているか確認する。
  3. 本体の /IRQ プルアップの有無。 → 2026-09-26 確認済み。 無ければ R6(10k)を実装する。
  4. Core2350B のヘッダー配置 → 2026-09-26 に照合シート(kicad/print_core2350b_pinmap.ps1)で、実物のシルクと全ピン一致を確認した。 25.4mm角、外周2列、2.54mmピッチ。左・下・右・上がそれぞれ P1・P3・P4・P2。
  5. カセットの基板厚とエッジの寸法 → 参考データ(下記)から、厚み 1.2mm・差し込み部 78.4 × 10.7mm。 正確に作るのはスロットに刺さる部分だけでよい。残りの外形は自由にし、ケースは3Dプリント(Bambu P1S)で作る。
  6. 試作での実測。 PPU の /RD が下がってからデータを返すまでの時間。仮配線はせず、この基板(TP1〜TP5)で測る方針に変更。

基板の発注(JLCPCB)

kicad/FC-MAGICON_gerber_r0.1.zip をアップロードする(kicad/export_gerbers.ps1 で作り直せる。DRC にエラーがあると止まる)。

項目指定
層数2
厚み1.2mm(ファミコンのスロットに合わせる。1.6mm は入らない)
金メッキ端子Gold Fingers: Yes
面取り差し込み側 45°(finger chamfer)
表面処理金メッキ端子と組み合わせられるもの(発注画面で ENIG 指定が必要か確認する)
数量5枚(最小)
  • 外形は 90 × 65.8mm。差し込み部(78.4 × 10.7mm)の両脇は切り欠き。
  • 端子部のレジストは、端子の上端から 0.6mm 上で止めてある(付け根側の配線はレジストで覆う)。

カセット外形の参考データ(ref/)

出典ライセンス中身
Gumball2415/NES-Famicom-Cartridge-DimensionsTAPR OHL 1.0HVC-TGROM-01 / HVC-CNROM-256K-01 の外形(KiCad)と FreeCAD 3Dモデル(.FCStd、STEP書き出し可)
Keitark/fc-rom-vomitterハード: CC BY-SA 4.060ピンのエッジのフットプリントと、実際に製造したファミコン用基板
  • 標準のファミコン基板: 幅 90.0mm × 高さ 56.8mm(差し込み部 78.4 × 10.7mm を含む)、厚み 1.2mm、ピッチ 2.54mm。
  • 市販カセットは 1〜30番がラベル面(本体の手前)。この基板は部品面(F.Cu)を手前に向けたので、F.Cu = 1〜30番、B.Cu = 31〜60番。
  • ピン配置は fc-rom-vomitter の表とも一致した(30/31=+5V、1/16=GND、45=本体からの音声、46=本体へ戻す音声、48/49=/A13)。
  • ファイルをそのまま流用する場合は、元のライセンスに従うこと。寸法(事実)を参照して自作するならその限りではない。

ケース(3Dプリント)の元データ

printables 860420「Nintendo Famicom Cartridge Shell」(CC BY 4.0)。 これは masible/famicom-everdrive-n8-shell-with-usb(hadessuk、CC BY)を 標準の基板向けにしたリミックスで、さらに元は Blackchamber の Thingiverse 117607(CC BY)。 改変版を公開するときは、この3つの作者の表記を残す。

注意

  • USB だけで給電しているときに本体のバスへ出力すると、電源の入っていない本体に電流が逆流する。 ファームは FC_5V_SENSE が High になるまで、全ピンを入力にしておく。
  • RP2350 のエラッタ E9 に注意。バスのピンでは内部プルダウンを使わない。
  • Q1 の 2SC1815 は、平らな面から見て E-C-B。

Parts

39
QtyValueFootprintReferences
20Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R7
247kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR8, R10
1/ROMSELTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP4
1100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR11
1100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR5
1100nCapacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mmC2
110k DNPResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR6
110nCapacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mmC3
110uCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC1
110u (+ to SOUND_OUT)Capacitor_THT:CP_Radial_D5.0mm_P2.00mmC4
115kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR2
11N4001Diode_THT:D_DO-41_SOD81_P7.62mm_HorizontalD1
11kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR9
122kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR3
12SC1815Package_TO_SOT_THT:TO-92_Inline_WideQ1
14.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR4
174LVC245 (5V->3.3V)Package_DIP:DIP-20_W7.62mmU2
1BOOTSELButton_Switch_THT:SW_PUSH_6mmSW1
1Cart breakout 2x30Connector_PinHeader_2.54mm:PinHeader_2x30_P2.54mm_VerticalJ4
1Core2350B P1Connector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalP1
1Core2350B P2Connector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalP2
1Core2350B P3Connector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalP3
1Core2350B P4Connector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalP4
1Debug 2x8Connector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalJ5
1Famicom cart edge 60pFC-MAGICON:FC_Cart_Edge_60J1
1GNDTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP5
1H (A11)Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP3
1KVSF637AC104FC-MAGICON:KOA_SF6_637AVR1
1LINE OUT 3.5mmFC-MAGICON:PJ-324MJ2
1M2TestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP3
1MCUJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1
1PPU_/RDTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP1
1PPU_D0TestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP2
1RESETButton_Switch_THT:SW_PUSH_6mmSW2
1SWDConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1USB spare landConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ6
1V (A10)Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP2

Similar boards

  • 2 layers357.8 × 124.5 mmVic2020mainboard, the printed circuit board in 3D

    Vic2020mainboard

    danwerner21/vic2020

    A Vic-20 clone created with [almost] all readily available parts

    142 parts78
  • 2 layers110 × 48 mmJack pedal, the printed circuit board in 3D

    Jack pedal

    GuitarML/GuitarPedalPCBs

    Collection of KiCad circuit board designs for guitar pedals you can build yourself.

    86 parts62MIT
  • 2 layers310 × 229.8 mmNeoGeoAES-3.5, the printed circuit board in 3D

    NeoGeoAES-3.5

    Board-Folk/NeoGeoAES-3.5

    NeoGeo AES 3.5 Schematics and PCB

    320 parts47
  • 2 layers123.2 × 77.5 mmFMSoundGenerator, the printed circuit board in 3D

    FMSoundGenerator

    captainys/FM

    Code for Fujitsu FM-7 and FM TOWNS series computers

    58 parts27
  • 2 layers172.1 × 143.5 mmAcCCS, the printed circuit board in 3D

    AcCCS

    IdahoLabResearch/AcCCS

    A collection of tools and scripts used to communicate and emulate Electric Vehicle Communication Controllers (EVCC) and Supply Equipment Communication Controllers (SECC).

    111 parts19MIT
  • 2 layers170.5 × 128.5 mmToolbox v2.1, the printed circuit board in 3D

    Toolbox v2.1

    StudioKAT/Toolbox

    主な機能: - オーディオ/CVミキサー(加算・減算) - CVへのオフセット追加(5V/10V)・極性反転 - 1:3 バッファード・マルチプル - 2:2 ユニティミキサー - 3:1 アベレージミキサー(各チャンネルのゲイン = 1/3) - SIGNセクション:インバーター / 半波整流 / 全波整流 - LOGICセクション:アナログOR / アナログAND - S&Hセクション:サンプル&ホールド / ホワイトノイズ出力…

    340 parts15
  • 2 layers60.8 × 99.9 mmReSeed, the printed circuit board in 3D

    ReSeed

    SukkoPera/ReSeed

    Sounds from C64 now for Plus/4!

    59 parts15
  • 2 layers100 × 88.9 mmGen2, the printed circuit board in 3D

    Gen2

    Alignof/Juggernaut

    疑似時限爆弾解除競技

    41 parts10MIT

Questions

How big is the Fc magicon PCB?

It measures 90 × 65.8 mm and has 2 copper layers, 1.2 mm thick.

What parts does the Fc magicon use?

39 parts, built around the 2SC1815. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Fc magicon KiCad files?

From the SHIMA-R7/fc-magicon repository on GitHub, at the commit this page was made from: the board is kicad/FC-MAGICON.kicad_pcb and its schematic kicad/FC-MAGICON.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fc magicon design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).