CartReaderはたくさんのゲームハードに対応しているオープンソースのゲームダンパーです。
2021年末にメジャーバージョンアップがあり、Cart Reader Version 4が公開されたので作ってみました。
今回はその製作過程を公開したいと思います。
せっかくのオープンソースプロジェクトです。
この記事を読んだら作れるように書いたつもりなので、皆さんにもこの記事を読んで自作にチャレンジしてほしいです。
Cart Readerについて
改めてCart Readerについて簡単に説明します。
Cart Readerはgithub上で運営されているオープンソースのゲームソフトROM吸出し機(ダンパー)です。
大きな特徴は次の二つです。
- ハードウェアもソフトウェアもオープンソース化されており、だれでも自由に作ることができる。
- 対応しているゲームハードはFC, SFC, メガドライブ, N64,,, と多岐にわたる。
プロジェクトは誰でも簡単に作れることを目指して運営されてるっぽいです。
Wikiが充実していますし、設計は買ってきたモジュール同士をつなぎ合わせることがメインなので、難しい作業がほとんどありません。
簡単なはんだ付けができれば十分です。
では、さっそく作っていきます。
必要な材料
必要な材料はざっくりと大別すると、
- 基板類(MAIN基板と各種カートリッジ基板)
- モジュール類
- こまごました部品類
という感じでしょうか。
それぞれの説明と入手の仕方を書いていきます。
基板類
基板類はgithub上の基板設計データ(ガーバーデータ)から作ります。
といっても、JLCPCBなどの基板メーカーサイトにガーバーデータをアップロードして注文するだけの簡単な作業です。
私は今回PCBGOGOを使用しましたが、どこのメーカーでも手順はだいたい一緒です。
ガーバーデータのダウンロードから基板の注文までの手順を簡単に書いておきます。
① 基板のガーバーデータをダウンロードします。
基板のガーバーデータはリポジトリのhardwareフォルダの各ゲームハードのフォルダにzip形式でアップされています。
https://github.com/sanni/cartreader/tree/master/hardware
例えば、MAIN基板のガーバーデータはmain_pcbフォルダのmain_pcb_gerber.zipです。
私はファミコン、スーファミ、N64のゲームカートリッジの吸出しを行いたかったので、次の4つのガーバーデータを使いました。
- cartreader/hardware/main_pcb/main_pcb_gerber.zip
- cartreader/hardware/famicom_adapter/famicom_adapter_gerber.zip
- cartreader/hardware/snes_adapter/snes_adapter_gerber.zip
- cartreader/hardware/n64_adapter/n64_adapter_gerber.zip
githubのリポジトリごとダウンロードかクローンしておくのがおすすめです。あとでほかのファイルも使うので。
② 基板メーカーサイトにzipファイルをアップロードします。
ダウンロードしたzipファイルを基板メーカーサイトにアップロードします。
例えばJLCPCBだと、まずトップページの”Instant Quote”をクリックし、
“Add gerber file”をクリックし、ダウンロードしたzipファイルを選択すればアップロード完了です。
うまくアップできればこんな感じの表示になるかと思います。
③ 基板の製造条件を選択します。
アップロードが完了したら、あとは基板の製造条件を選択してカートに追加し、清算すれば基板を製造してもらえます。
製造条件は初期設定だと下記の感じかと思います。
基本的には、この初期設定からいじる必要はありません。
好みで、”PCB Color”と”Silkscreen”を変更してもよいかと思います。
設定が終わったらSave To Cartを押してカートに追加しておきましょう。
これでMAIN基板が製造準備OK状態になりました。
あとは残りの基板についても同様の作業をしていけばOKです。
これで基板の準備は完了です。
深圳から基板が来るのを待ちましょう。
モジュール類とこまごました部品類
必要なモジュール類と部品類はほぼほぼAliexpressでそろえることができます。
一覧は次の表のとおりです。
材料名 | 備考 | 商品リンク |
---|---|---|
arduino mega 2560互換マイコンモジュール | ※1 | Aliexpress |
SDカードスロット付きLCDモジュール(MKS MINI12864 V3) | Aliexpress | |
SI5351クロックジェネレータモジュール | N64/スーファミ/NP/SVでのみ必要 | Aliexpress |
18650バッテリー取り付け用モジュール | なくてもよい。一応買ったけど使ってない。 | Aliexpress |
18650バッテリー | なくてもよい。変なとこから買うと危ないのでAliexpressで買わないこと。 | |
2.54mmピッチ 40pin ソケット | カットして使用する | Aliexpress |
2.54mmピッチ 40pin ピンヘッダー | カットして使用する | Aliexpress |
オス-メスのジャンパーワイヤー | リード線でもよい | Aliexpress |
スライドスイッチ | 1,2個でいいのに50個も入ってる | Aliexpress |
SDカード | FAT32かexFATでフォーマットしておくこと。ラズパイでも使えるようにmicroSDカードが良いかも(→リンクはMicroSD to SD変換付き) | Amazon |
100nFコンデンサ(2012サイズ) | スーファミの一部カセットの吸出しに必要。→はサンプルブック | Aliexpress |
PIC12F629T-I/SN | スーファミの一部カセットの吸出しに必要。 | 秋月電子 |
1kΩ抵抗 | N64スロットに必要 | 秋月電子 |
旧版と新版のarduino mega 2560互換マイコンモジュールがあり、新版では動かないとの注記が元リポジトリに追記されていました。
見分け方の画像を元リポジトリから以下に転載させていただきます。
出典:https://github.com/sanni/cartreader/wiki/What-to-order
今回はバッテリーは無しで組み立てました。
わざわざバッテリーを搭載するメリットをそんなに感じなかったので。
USBから電源供給なので、モバイルバッテリーを使ってもいいですしね。
ひとまずPIC12F629もなしで組んでます。
ただ、実際に使った感じ、吸い出せないスーファミカセットがあったのでやっぱり必要かも。
あと、カートリッジスロットの商品リンク一覧は下の通りです。
遊びたいゲーム機に合わせて選んでください。
- ニンテンドー64(N64)
- スーパーファミコン(SFC/SNES)
- ファミコン(FC)(60 pin 2.54mm)
- ゲームボーイ系(GB/GBC/GBA)
- メガドライブ(64 pin 2.54mm)
- マスターシステム(50 pin 2.54mm)
- Nintendo Entertainment System(NES)
今回は上三つを購入しました。
必要な工具
私が実際に組み立て時に使った工具を書いときます。
基本的にははんだごて一式とニッパーがあればなんとかなると思います。
工具名 | 型番 | 備考 | 商品リンク |
---|---|---|---|
はんだごて | FX600-02 | 二本あると便利。二本目は安いのでOK | Amazon |
こて台 | 633-01 | Amazon | |
はんだ | FS402-02 | Amazon | |
ニッパー | 不明 | 今回はダイソーのやつを使用 | – |
ワイヤーストリッパー | PA-14 | ニッパーでも代用可能。(ダイソーのでは厳しいかも) | Amazon |
ピンセット | P-880 | Amazon | |
のこぎり | 4907052107489 | SFCスロットの加工に使用 | Amazon |
必要なものがそろったら早速組み立てていきましょう。
組み立て手順
材料を並べるとこんな感じです。
では、さっそく組み立てていきましょう。
Mega 2560 Proにプログラムを書き込む
まずは、Mega 2560 Proにプログラムを書き込みます。
プログラムの書き込みにはArduino IDEを使います。
持ってない方はこちらからインストールしておきましょう。
プログラムの準備
プログラム本体はリポジトリのcartreader/Cart_Reader/Cart_Reader.ino です。
まずはこのファイルをArduino IDEから開きましょう。
こんな感じで開くかと思います。
上にずらーっとタブが出てると思うので、option.hタブに移動して、次の修正をします。
HW4をアンコメント、HW1,HW2,HW3をコメントアウト
clockgen_installedをアンコメント
必要なライブラリのインストール
次のライブラリが必要です。
- SD lib: https://github.com/greiman/SdFat
- OLED lib: https://github.com/adafruit/Adafruit_SSD1306
- GFX Lib: https://github.com/adafruit/Adafruit-GFX-Library
- BusIO: https://github.com/adafruit/Adafruit_BusIO
- LCD lib: https://github.com/olikraus/u8g2
- RGB Tools lib: https://github.com/joushx/Arduino-RGB-Tools (you need to move the files from the src subdir to the root dir of the library)
- Neopixel lib: https://github.com/adafruit/Adafruit_NeoPixel
- Rotary Enc lib: https://github.com/mathertel/RotaryEncoder
- SI5351 lib: https://github.com/etherkit/Si5351Arduino
- RTC lib: https://github.com/adafruit/RTClib
Arduino IDEのスケッチ→ライブラリをインクルード→ライブラリを管理 からライブラリマネージャを開き、
必要なライブラリを各リポジトリ名で検索してインストールしてください。
IDEの書き込み設定
IDEのツールメニューからボード:Arduino Mega or Mega 2560に設定、プロセッサ: ATmega2560(Mega 2560)に設定します。
プログラムの書き込み
Mega2560をPCとUSB接続し、IDEのツール→シリアルポート からMega2560が接続されているポートを選択した後、左上の矢印アイコンを押して書き込みます。
以上で、Mega 2560にCartReaderのプログラムが書き込みできました。
SDカードの準備
FAT32かexFATでフォーマットしたSDカードを用意します。
SDカードをPCに接続し、リポジトリのsdフォルダ配下のファイルをすべてSDカードにコピペしておきます。
モジュールの改造
Mega2560とLCDモジュールにちょっとだけ改造が必要です。
Mega 2560の改造
まずは下の写真の赤で囲んだ部品(Fuse)を
外します。
このときはんだごてを二本使って、部品をつまむようにしてあてると簡単に取れます。
はんだごてが一本しかない場合ははんだを大量に盛って、部品の両端子のはんだをうまく溶かしながら外しましょう。
次に、USBコネクタ側のランドにジャンパーワイヤーをはんだ付けします。
(ジャンパーワイヤーはあらかじめ半分に切って被覆を剥いておきます。)
これでMega2560の改造は完了です。
LCDモジュールの改造
R4(下の写真の赤丸)を
はんだでショートさせます。
LCDモジュールの改造はこれだけです。
ピンヘッダーとソケットのはんだ付け
ここからひたすらピンヘッダーとソケットのはんだ付けです。
大量にはんだ付けするので、換気はしっかりとおこないましょう。
では頑張ってください。
まずはMega2560に、付属していたピンヘッダーのはんだ付け。
続いて、クロックジェネレーターモジュールのはんだ付け。
次にMAIN基板へソケットとピンヘッダー、ジャンパーワイヤーのはんだ付け。
ピンヘッダーとソケットは1×40のものを使っている場合は、ニッパーで必要な長さに切って使いましょう。
上の写真の右下のピンヘッダーはLCDモジュールのコネクタ接続用ですが、2列あるのでずれに注意しながらつけましょう。
↓のようにあらかじめコネクタにピンヘッダーを挿した状態ではんだ付けするとずれないですよ。
あとは、モジュールとMAIN基板を接続していけば、CartReader本体の完成です。
まずは、ジャンパーワイヤーをモジュールと接続して、
すべてのモジュールをがっしゃーん。
バッテリーモジュールが取りつかない場合の接続は下の写真のようになります。
バッテリーモジュール用のジャンパーワイヤーと写真左上端のソケットの一番左に接続してあります。
これでCart Reader本体は完成です。
ひとまずお疲れ様です。
続いて、各スロット部を組み立てていきましょう。
スロット部の組み立て
ファミコン用とN64用についてはひたすらはんだ付けするだけです。
N64用1Kと書いてるとこに1kΩ抵抗をつけます。
完成品はそれぞれこんな感じ。
ニンテンドー64用アダプタ
SFC用については、スロット部品がそのままだと写真のように基板と干渉して取り付けられないので、加工が必要です。
まずは下の写真の赤線部をのこぎりなどで切り落とします。
あとはちょっと凸部が残るので、赤線のようにニッパーで切り落とします。
これで基板に取り付けられるようになります。
あとは、スライドスイッチとスロット部品、ピンヘッダーをはんだ付けすれば完成です。
これでスロット部の組み立ても終わりです。
お疲れさまでした!!
これでCartReaderの組み立てはすべて完了です。
使い方
今回はバッテリーなしなので、USBケーブルから直接電源を供給してあげます。
ここでは一例としてN64ソフト「ゼルダの伝説 ムジュラの仮面」をダンプしてみます。
N64スロットをCartReader本体に差し込み、カートリッジを上から挿し、USBケーブルを接続して電源を入れます。
メニューからNintendo 64→Game Cartridge →カートリッジの情報の表示画面 → Read Rom と選択することで、カートリッジのダンプができます。
このダンプしたファイルを使えば、PCやラズパイでゲームを遊べるようになります。
SFCカートリッジの吸出しについて
SFCのソフトには吸い出せるゲームと吸い出せないゲームがありました。例えば、上の写真の星のカービィ 3は吸い出せなかったです。
おそらく、PIC12F629を実装して特殊チップ(SA1)に対応させることができれば吸い出せるのかな。
-> 端子をエタノールと綿棒でよく清掃すると吸いだせました。接触不良だった模様です。
FCカートリッジの吸出しについて
カートリッジの情報(PRG, CHR, Mapper, RAM)をこういったサイト調べてから、それをもとにCartReaderを設定し、吸出しを行う必要があります。
詳しくは本家wiklを見ていただくのがいいかと思います。
スロットの交換について
ほかのゲーム機のカートリッジをダンプしたいときは、スロットを交換する必要があるのですが、抜くのがめちゃくちゃ固いです。
抜くときにはこのようにドライバーなどを差し込んで、テコの要領でちょっとずつ抜くようにしてください。
遊んでみる
さっそく吸い出したゲームで遊んでみたいと思います。
エミュレーターはRecalboxを使用します。
RecalboxはRaspberry PIで動作するエミュレーターです。
これについてはまた別の記事で紹介できたらいいなと思います。
遊ぶ方法は簡単です。
Recalboxのイメージが入ったSDカードのそれぞれのゲームハード用のフォルダに、先ほど吸い出したファイルをコピペするだけです。
例えばSFCのソフトだと、”SNES”っていうフォルダに吸い出したファイルを親フォルダごとコピペすればOKです。
すると、Recalboxのメニュー上で先ほど吸い出したゲームが選択できます。
これを選ぶと、ちゃんとゲームが遊べました。
写ってるコントローラーは純正のSFCコントローラーをUSB化したものです。
思い出のコントローラーで思い出のゲームを遊べるのは最高でした。
USB化基板はこっちで紹介してるんで、よかったら見ていってください。
最後に
今回は、オープンソースなゲームダンパー CartReader Version 4を作ってみました。
製作難易度はそんなに高くなかったので、電子工作入門としてもいい題材かなと思います。
でもはんだ付けするピンの数がめちゃくちゃ多かったので、はんだ付け嫌いになるかもしれないなあ。
オープンソースなだけあって、ネットで検索すると完成品を販売してる人や製作代行してる人なんかも見つかるかと思います。
とはいえ、繰り返しになりますが、せっかくのオープンソースプロジェクトです。
ぜひ皆さんにも一度、自作にチャレンジしてほしいところです。
今回はこれで終わります。
コメント