2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Tang-Nano-9Kで動くNESのCHR.ROMのDRAM化し、大容量カートリッジが動くようにする

Posted at

目的

 fpganesのPRG.ROMをDRAM化する事により、Tang-Nano-9Kの 内蔵RAM容量以上のカートリッジを動作させることは成功した。
 しかし、CHR.RAMは内蔵RAMでの動作であり、RAMとして使える32KB以下でないと動作しないと言う問題が有った。
 手持ちのカートリッジで動作するのは極わずか。之では寂しいな。
 ◆◆◆ そうだ、PPUもDRAM化しよう ◆◆◆
 手持ちでは最大容量の、星のカービィを動作させたいな。

実施内容

 Tang-Nano-9Kの内蔵DRAM容量は8MB、之を2分割して使用出来る事は判って居た。
 今までは面倒なので、単一で使用していたが。
 今回はこれを2分割する、ライブラリを交換するだけなのでこれは簡単。
 次に、現行のPRG.ROMを、片方の4MBの部分で動作させる。
 次に、残った4MBの部分で、CHR.ROMを動かせば完成となる。

 と、書けば簡単だが問題点が有る。
  ※だから、手を付けなかったのだが。
 DRAMのアクセス速度が足りない。
 データをキャッシュする等を試みたが上手く行かない、全て徒労に終わった。
 そこでDRAMのスビートアップを検討。今はPLLの都合で128MHzで動作させている。
 DRAMのアクセスを166MHzに上げれば間に合うのだが、そのクロックが供給できない。
 そこで、NESメインクロック21.6MHzの8倍の、172.8MHzで動作させることにした。
 オーバースペックだが104%であり、問題無いだろう。
  ※仕様外の動作であり、動かない個体がある場合はご容赦の程。
 波形で確認したが、リード完了直前にDRAMからのデータが到着している。

 これで出来上がりと思ったら、CHR.ROMが書き換わるという問題点を発見。
 之は何のことは無い、CHR.ROMと同じ番地(8000-FFFF)のレジスタアクセスで、書き換わっていたと言うお粗末の一席。
 該当エリアを書き込み禁止にしたら、大部分のカートリッジが動作するようになった。
  ※そんな所にレジスタが有るなんて、思わなかったよ。

参照資料

 ※格納位置は前回と同じ。
 ※通信速度を従来の4倍に上げたので、ロードが失敗する場合は速度を下げてください。
 「fpganes Tang-Nano-9K バージョン
 「fpganes Tang-Nano-9K ローダー
 「fpganes Tang-Nano-9K モニター

機能概説

 元々のfpganesはRAMリソースとして、基板PARAMに集約してアクセスしていた。
 之を PRG.ROM PRG.RAM CHR.ROM CHR.RAM に再び分離。
 PRG.RAM CHR.RAM は各2KBなので内蔵RAMを割り当て。
 PRG.ROM CHR.ROM はDRAMを割り当てたので、4MB使えるようになる。
 メモリ信号は合成される前のものを取り出し、DRAMに与えている(つもり)。
  ※途中から信号を取り出したものだからぐちゃぐちゃ、要らない信号の整理が必要だが。
 カートリッジによっては追加のRAM(6000-7FFF)が必要なものが有るが、CPU側のDRAMを割り当てた。
  ※RAMの交換が出来ないので、連続して遊ぶと可笑しくなるかも。
   RAMのSAVE,CLEAR,LOAD機能が必要なのだろう。
 マッパーなどの一部は「NESTang」から頂いた。
 元のプログラムからなにかしら良くなったのだろうが、改善点の確認はして居ない。
  ※良くなって居る筈という、希望的観測です。

PRG.ROMリードタイミング(psr_mt00で動作開始、ps_mdo0で読出し完了)
image.png
CHR.ROMリードタイミング(psram1_csで動作開始、ps_mdo1で読出し完了)
image.png

動作検証

 手持ちのカートリッジは、全て起動とキー操作可能な事は確認した。
 星のカービー(PRG:512KB,CHR:256KB)も元気に飛び回っている。
  ※最後まで行きつける保証は無いよ。
 だからと言って、全てが動くと思わない様に。
 カートリッジにはメモリ拡張の為に、マッパーと呼ばれる回路を搭載している。
 fpganesが理解出来るマッパーは限られており、登録されていないマッパーでは動作しない。
  ※マッパー云々の前に、NES-TN9の動作タイミングを疑うべきかな。
  ※比較的新しめの数字の大きいマッパーは、まず動かないだろう。
 NES-TN9は少々無理なタイミングで動作させている、動かないと言って文句言わないでね。

50.fc_cart.jpg

感想

 Tang-Nano-9Kでも出来るものだ、出来る子なんだなと一寸感心。
 でも、内蔵DRAMにダイレクトアクセスが出来たらもっと良かったのだけど。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?