一年ぐらい前にリリースされていたNES DOOM
作成説明動画もYouTubeにあります
2020.12.24更新 FC DOOM基板の頒布を開始しました。
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ヶ月ぐらいかかる場合もあります…
eabyで購入するならこちら
MAP#00のカセットは何でもいいですが、PRGROMが32KBの方が加工が少なくて楽です。
※現在NesCartDBのサイトにつながらないのでリンクはINTERNET ARCHIVEになっています。
UV-EPROMを1個準備してください。
UV-EPROMは27C256等で問題ありませんが、書き込まれた内容を消去する必要があります。
ROMイレーサー等が必要ですが紫外線をあてれば消去は可能なので方法は検索してみてください。
aitendoにお安いROMイレーサーがあるようです。
これらのデバイスを書き込むためのROMライタも必要です。
こちらのサイトから PiPU-v0.1.zip をダウンロードします。
PiPU-v0.1.zip を解凍してromフォルダに入ってる DOOMNTSC.nes.prg.bin がそれです。
ROMライタで書き込みが終わったら用意したMAP#00基板にハンダ付けします。
MAP#00基板のROMはすべて取り外してください。
PRGROMが32KB以外の16KBの基板はPRGROMの27pinがVCCにつながっているのでカットします。
カットしたPRGROMの27pinからエッジコネクタの35pin(CPU A14)に配線します。
PRGROMが32KBの場合はカットなど加工せずそのままUV-EPROMをハンダ付けしてください。
※ICソケットを付けてますがテストの為です、そのままハンダ付けしてください。
ハンダ付けが終わったら実機で動作確認します(基板の前後を間違えないように)
画面が真っ黒で音楽がずっと鳴ってれば問題ないです。
ダウンロードした PiPU-v0.1.zip を解凍して、osフォルダに入ってる sdcard.img.gz がそれです。
sdcard.img.gz を解凍すると sdcard.img がSDカードイメージです。
SDカードイメージをSDカードへ書き込むために USBWriter を使います。
ダウンロードはこちらから…
ダウンロードした USBWriter-1.3.zip を解凍して USBWriter.exe を実行します。
Source file で sdcard.img を選択、Target device でSDカードを選択して Write で書き込み開始です。
書き込みが終わったmicroSDカードをRaspberry Pi 3 Model A+に挿してまずは完了です。
FX2LP開発キット CY3684Setup.exe をダウンロードします
※GoogleChromeではうまくダウンロードできないかもですEdge等を使ってみてください。
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 の準備は完了です。
サイトにも記載されていますが…以下抜粋
RDY1 と RDY0 のシルク表示とチップまでの配線が違う場合があるようです。
本来は RDY0 が CY7C68013Aチップの 8pin で RDY1 が 9pin につながっているようです。
テスターなどでチェックして、もし逆であれば以下の RDY1 と RDY0 の配線を入れ替えてください。
※私がAmazonで購入した CY7C68013A は配線が違っていました。
FX2LP CY7C68013A pin | CHRROM pin | |
GND, PA4 | 14pin | GND |
PA1, PA2, PA5, RDY0(RDY1) | 22pin | PPU /RD |
RDY1(RDY0) | エッジコネクタ47pin | PPU /WR |
PB0 | 11pin | PPU D0 |
PB1 | 12pin | PPU D1 |
PB2 | 13pin | PPU D2 |
PB3 | 15pin | PPU D3 |
PB4 | 16pin | PPU D4 |
PB5 | 17pin | PPU D5 |
PB6 | 18pin | PPU D6 |
PB7 | 19pin | PPU D7 |
上記を参考に CHRROM と CY7C68013A を配線します。
CY7C68013A の RDY1(RDY0) だけはMAP#00基板のエッジコネクタ47pinに配線してください。
MAP#00基板のエッジコネクタ48pinと49pinがつながっているのでパターンカットします。
MAP#00基板から VCC(+5V) と GND を Raspberry Pi に配線します。
miniUSBケーブルで Raspberry Pi と CY7C68013A を接続します。
最後に配線に問題が無いか確認して実機で動作確認。
最初は画面が真っ黒で音楽が鳴り始め10秒ほどで画面が出てくれば完成です!!
効果音とかが無くBGMだけで寂しいですが…ファミコン実機でヌルヌル動くの凄いですよ。
ケースにおさめたいけど何がいいかなぁ…と思案中です。
コメント
これ fake じゃなくて本当に動きますか?
アドレスバスすらつながっていなくてどうやって適切なデータを出力するタイミングをとっているのかとか、本体側のパッド入力をどこでどうやって受け渡しているのかとか不明なので fake っぽく思ったのですが。
コメントありがとうございます。
どういう仕組みか私も疑問だらけですけどちゃんと操作もできますし実機で動きますよ。疑問だったら製作者に聞いてみてはどうでしょう?
あとfakeだったら製作記事書かないですし…是非作って試してください。
なんだか失礼な言い方になってしまったようでスミマセンでした。
rasteriさんの動画をみてみながらもう一度考えてみたんですが、データバスはPPUへの出力だけじゃなくPPUからの入力もしてるような感じでした。
NMIのタイミングでパッド入力のデータをスプライトデータか何かの形でPPUへ渡すことで、タイミングの基準もわかるような気がしてきました。
CY7C68013Aの配送が数ヶ月先の可能性があるのとPi3AはもってないのでPi3Bで代用する予定(そもそも日本のファミコンのカートリッジには3Aでも全然入らないでしょうし)だったりしますが制作に挑戦してみようと思います。
有益な情報ありがとうございました。