BAKUTEN工房 では『家電のケンちゃん』『BEEP ゲームグッズ通販』で 委託販売 を行っています

NES DOOMを作成してファミコン実機で動かしてみた

ファミコン
スポンサーリンク
スポンサーリンク

一年ぐらい前にリリースされていたNES DOOM

GitHub - rasteri/PiPU: Project to use a Raspberry Pi as a NES graphics accelerator
ProjecttouseaRaspberryPiasaNESgraphicsaccelerator-GitHub-rasteri/PiPU:ProjecttouseaRaspberryPiasaNESgraphicsaccelerator

 

作成説明動画もYouTubeにあります

 

2020.12.24更新 FC DOOM基板の頒布を開始しました。

FCカセットにラズパイ載せてDOOMがヌルヌル動いちゃう基板
今回のキット「FC DOOM基板」はお好みに応じて「基板全部むき出し」「ラズパイだけむき出し」「基板全部ケース内蔵」の3パターン作成できるようになっています。

 

Norix(Twitter@norix_v)さんのNES DOOMに関する解説書(PDF)です。

NES DOOM的技術の解説

 

前に見たときは凄いなぁと思ってましたが作成までには至らず…

今回部材も揃ったのでNES向けでしたがファミコン用に作成してみました。

サイトの説明どおりに進めていきます。

作成に必要な物は…

1:MAP#00(マッパー0)のカセット

2:Raspberry Pi 3 Model A+

3:microSDカード(8GB以上)

4:FX2LP CY7C68013A USB Development Board

※この基板には2種類あってJ1,J2とジャンパが2つある基板を使用します。

5:miniUSBケーブル

6:UV-EPROM(27C256等)

7:ROMライタ(TL866CSやTOP3100等)

8:EPROMイレーサー(またはそれに代わる機器)

Raspberry Pi 3 Model A+ と FX2LP CY7C68013A USB Development Board はAmazonで購入出来ます。

※FX2LP CY7C68013Aは海外発送のようで1ヶ月ぐらいかかる場合もあります…

RaspberryPi3 Model A+ (ラズベリーパイスリーモデルエープラス): マイコン関連 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作RaspberryPi3 Model A+ (ラズベリーパイスリーモデルエープラス)秋月電子通商電子部品通信販売
秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作TOSHIBA マイクロSDカード(microSDHC)EXCERIA 16GB 100MB/s秋月電子通商電子部品通信販売
Amazon.co.jp
Bitly

eabyで購入するならこちら

CY7C68013A-56 EZ-USB FX2LP USB2.0 開発ボード ロジック アナライザー EEPROM M36 | eBay
Findmanygreatnew&usedoptionsandgetthebestdealsforCY7C68013A-56EZ-USBFX2LPUSB2.0開発ボードロジックアナライザーEEPROMM36atthebestonlinepricesateBay!Freeshippingformanyproducts!

 

MAP#00のカセットは何でもいいですが、PRGROMが32KBの方が加工が少なくて楽です。

※現在NesCartDBのサイトにつながらないのでリンクはINTERNET ARCHIVEになっています。

http://bootgod.dyndns.org:7777/search.php?ines=0

 

UV-EPROMを1個準備してください。

UV-EPROMは27C256等で問題ありませんが、書き込まれた内容を消去する必要があります。

ROMイレーサー等が必要ですが紫外線をあてれば消去は可能なので方法は検索してみてください。

aitendoにお安いROMイレーサーがあるようです。

ロムイレーサー
●概要●仕様・機能紫外線消去式、10分ほどでROMのデータを6〜8個まとめて消去できる、小型・軽量で持ち運びにも便利、引き出しの寸法:95x57x10mm、動作電源:AC100V、表記価格:1

 

ピンアサインはこちらを参考に…

これらのデバイスを書き込むためのROMライタも必要です。

 

 

準備が出来たらまずUV-EPROMにROMイメージを書き込みます
GitHub - rasteri/PiPU: Project to use a Raspberry Pi as a NES graphics accelerator
ProjecttouseaRaspberryPiasaNESgraphicsaccelerator-GitHub-rasteri/PiPU:ProjecttouseaRaspberryPiasaNESgraphicsaccelerator

こちらのサイトから PiPU-v0.1.zip をダウンロードします。

PiPU-v0.1.zip を解凍してromフォルダに入ってる DOOMNTSC.nes.prg.bin がそれです。

 

ROMライタで書き込みが終わったら用意したMAP#00基板にハンダ付けします。

MAP#00基板のROMはすべて取り外してください。

PRGROMが32KB以外の16KBの基板はPRGROMの27pinVCCにつながっているのでカットします。

カットしたPRGROMの27pinからエッジコネクタの35pin(CPU A14)に配線します。

PRGROMが32KBの場合はカットなど加工せずそのままUV-EPROMをハンダ付けしてください。

 

※ICソケットを付けてますがテストの為です、そのままハンダ付けしてください。

 

ハンダ付けが終わったら実機で動作確認します(基板の前後を間違えないように)

画面が真っ黒で音楽がずっと鳴ってれば問題ないです。


 

Raspberry Pi 3 Model A+に使用するSDカードイメージを作成します

ダウンロードした PiPU-v0.1.zip を解凍して、osフォルダに入ってる sdcard.img.gz がそれです。

sdcard.img.gz を解凍すると sdcard.img がSDカードイメージです。

SDカードイメージをSDカードへ書き込むために USBWriter を使います。

ダウンロードはこちらから…

USBWriter
DownloadUSBWriterforfree.USBWriterletsyouwriteanimagefiletoanUSBdriveonWindows.USBWriteristinyWindowstoolthatletsyouwriteanimagefiledirectlytoanUSBdrive.Itrequi...

 

ダウンロードした USBWriter-1.3.zip を解凍して USBWriter.exe を実行します。

Source file で sdcard.img を選択、Target device でSDカードを選択して Write で書き込み開始です。

書き込みが終わったmicroSDカードをRaspberry Pi 3 Model A+に挿してまずは完了です。

 

FX2LP CY7C68013A(以下 CY7C68013A) に書き込みします

FX2LP開発キット CY3684Setup.exe をダウンロードします

※GoogleChromeではうまくダウンロードできないかもですEdge等を使ってみてください。

https://www.cypress.com/file/135301

CY3684Setup.exe を実行してインストールします。

 

CY7C68013A の基板上に JP2 がありますがこれが EEPROMの有効無効ジャンパです。

JP2 をショートさせるとEEPROMを無効にします(外すとEEPROM有効です)

JP2 をショートさせたままPCにminiUSBケーブルで接続します。

※LEDが点かない場合は基板上の電源スイッチを押してください。

CY7C68013A のドライバーをインストールしますがドライバーの場所は

C:\ Cycles \ USB \ CY3684_EZ-USB_FX2LP_DVK \ 1.1 \ Drivers

にありますのでドライバーの場所を指定します。

ドライバーのインストールが終わったら USB ControlCenter を起動します。

C:\ Cycles \ USB \ CY3684_EZ-USB_FX2LP_DVK \ 1.1 \ Windows Applications \ Application Source files \ c_sharp \ controlcenter \ bin \ Release \ CyControl.exe

にインストールされていますので CyControl.exe を実行します。

CY7C68013A のドライバーがインストールされていれば画像のような表示になります。

表示が違う場合はドライバーを再インストールしてください。

Vend_Ax.hex を CY7C68013A に書き込みます。

ダウンロードした PiPU-v0.1.zip を解凍してfx2フォルダに入ってる Vend_Ax.hex がそれです。

Program->FX2->RAM で Vend_Ax.hex を選択します。

選択後に書き込みが始まり左下に Programming Succeeded と表示されれば完了です。

 

次に slave.iic を CY7C68013A に書き込みます。

CY7C68013A の電源は切らずにそのまま JP2 のジャンパを外してEEPROMを有効にします。

ダウンロードした PiPU-v0.1.zip を解凍してfx2フォルダに入ってる slave.iic がそれです。

Program->FX2->64KB EEPROM で slave.iic を選択します。

選択後に書き込みが始まり左下に Programming Succeeded と表示されれば完了です。

基板上の電源スイッチを切って再度入れてください。

書き換えが成功していれば画像のような表示になります。

JP2 のジャンパはこの後は外したままで使用します。

これで CY7C68013A の準備は完了です。

 

CY7C68013A と MAP#00基板の配線を行います

サイトにも記載されていますが…以下抜粋

Note that a number of FX2 boards I’ve ordered have had slightly wrong pin labelling – RDY0 and RDY1 were swapped. I would advise double-checking these pins are connected to the correct pins on the FX2 chip itself. RDY0 should be pin 8 and RDY1 should be pin 9.

RDY1 と RDY0 のシルク表示とチップまでの配線が違う場合があるようです。

本来は RDY0 が  CY7C68013Aチップの 8pinRDY1 が 9pin につながっているようです。

テスターなどでチェックして、もし逆であれば以下の RDY1 と RDY0 の配線を入れ替えてください。

※私がAmazonで購入した CY7C68013A は配線が違っていました。

FX2LP CY7C68013A pinCHRROM pin 
GND, PA414pinGND
PA1, PA2, PA5, RDY0(RDY1)22pinPPU /RD
RDY1(RDY0)エッジコネクタ47pinPPU /WR
PB011pinPPU D0
PB112pinPPU D1
PB213pinPPU D2
PB315pinPPU D3
PB416pinPPU D4
PB517pinPPU D5
PB618pinPPU D6
PB719pinPPU D7

上記を参考に CHRROM と CY7C68013A を配線します。

CY7C68013A の RDY1(RDY0) だけはMAP#00基板のエッジコネクタ47pinに配線してください。

 

MAP#00基板のエッジコネクタ48pin49pinがつながっているのでパターンカットします。

次に48pinVCC(+5V)へ配線します。

 

Raspberry Pi 3 Model A+ に電源を配線します

MAP#00基板から VCC(+5V) と GND を Raspberry Pi に配線します。

 

 

miniUSBケーブルで Raspberry Pi と CY7C68013A を接続します。

最後に配線に問題が無いか確認して実機で動作確認。

 

 

最初は画面が真っ黒で音楽が鳴り始め10秒ほどで画面が出てくれば完成です!!

効果音とかが無くBGMだけで寂しいですが…ファミコン実機でヌルヌル動くの凄いですよ。

ケースにおさめたいけど何がいいかなぁ…と思案中です。

コメント

  1. これ fake じゃなくて本当に動きますか?
    アドレスバスすらつながっていなくてどうやって適切なデータを出力するタイミングをとっているのかとか、本体側のパッド入力をどこでどうやって受け渡しているのかとか不明なので fake っぽく思ったのですが。

    • コメントありがとうございます。
      どういう仕組みか私も疑問だらけですけどちゃんと操作もできますし実機で動きますよ。疑問だったら製作者に聞いてみてはどうでしょう?
      あとfakeだったら製作記事書かないですし…是非作って試してください。

      • なんだか失礼な言い方になってしまったようでスミマセンでした。

        rasteriさんの動画をみてみながらもう一度考えてみたんですが、データバスはPPUへの出力だけじゃなくPPUからの入力もしてるような感じでした。
        NMIのタイミングでパッド入力のデータをスプライトデータか何かの形でPPUへ渡すことで、タイミングの基準もわかるような気がしてきました。

        CY7C68013Aの配送が数ヶ月先の可能性があるのとPi3AはもってないのでPi3Bで代用する予定(そもそも日本のファミコンのカートリッジには3Aでも全然入らないでしょうし)だったりしますが制作に挑戦してみようと思います。

        有益な情報ありがとうございました。

タイトルとURLをコピーしました