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

MMC5 フラッシュカートリッジ作成

kazzo/tuna
スポンサーリンク
スポンサーリンク

今まで色々なマッパーのフラッシュカートリッジを作成してきましたが、MMC5(マッパー5)はまだ作成していませんでした。MM5に対応した自作ゲームやハックロムもほとんどなかったので作成してなかったわけですが…

8Mbitのflashrom(MBM29F080 TSOP 40pin)の在庫が発見できたので作成してみることにしました。

MMC5にはの4種類の基板があり、詳細はこちら

unagi flashmemory cartridge hiki - MMC5

 

今回はETROMを使用して、さらにW-RAM-0を64kbitから256Kbitへ変更すれば互換性もアップ。

ETROMの基板を使用しているゲームは現時点で判明している光栄のゲーム5本

1:信長の野望 戦国群雄伝

2:維新の嵐

3:水滸伝

4:ランペルール [ETROM-02]

5:大航海時代 [ETROM-02]

MMC5は最大で PRGROM:8Mbit CHRROM:8Mbit まで対応しているので、最大容量で作成。

作成方法は他のフラッシュカートリッジとほとんど変わりませんのでピンアサインと写真だけ載せておきます。 たぶん作る人はそんなにいないと思うので、過去記事をみて作成の参考にしてください(^-^;;

もちろんAM29F040B(4Mbit)のflashromでも作成できます。

■SRAM(W-RAM-0)を64kbit→256kbitへ交換

wram0-01.jpg    wram0-02.jpg

64kbitのSRAMを取り外し SRAMの256kbit(64256等)はスーパーファミコンのバッテリーバックアップカセットについてますのでそれから拝借。

s-256SRAM02.jpg 1pinと26pinを折り曲げて、あとはそのまま基板へハンダ付けします。

s-256SRAM01.jpg    wram0-03.jpg

SRAMの1pinをWRAM A14へ、26pinをWRAM A13 へ配線すれば完成!

8MbitのflashromはほとんどがTSOPタイプなので変換基板が必要です。

ハンダ付けの方法や変換基板の入手先等は過去の記事で…
 

MASKROM-PIN.png    mmc5-flash01.jpg

各種ROM・基板側ピンアサインと作成例

※青い部品はセラミックコンデンサ(0.1μF) 画面にノイズが出て安定しなかったので VCC-GND間に取り付け。

せっかくなのでCHRROMに最大容量を使用していて、KZ-Sさんが公開されている ファミコン版AIR をkazzo+anagoで書き込んでみたけれど、残念ながら動作せず。

 

さて次はめっさつさんが沙羅曼蛇を弄られているようなので、VRC3のフラッシュカートリッジでも作成しようかな。

VRC3 「沙羅曼蛇」専用 フラッシュカートリッジ作成
めっさつさんが沙羅曼蛇を弄られているということで作成することに(^-^ 追記: 沙羅曼蛇AC NEXT 0.4☆ 公開 しかし、現在作成中の沙羅曼蛇はPRGROM:4Mbit(512Kbyte)という事実が発覚し、色々と調べてみるとVRC3...

コメント



  1. すみませんMMC5とは、プログラムロム(P-ROM)も1Mバイトまで対応していたのですか?
    資料とかを読むと512kまでばかりと書いていたもので、これが本当ならうれしいです。
    PROMとCROMで2Mバイトもいけるじゃありませんか!



  2. >akaneさん

    ファミコンのプログラム等を作られているのですか??

    MMC5はPRG,CHRとも8Mbit(1Mbyte)まで対応してますので大容量ですね(^-^

    メタルスレイダーグローリーでさえ(PRG:4Mbit CHR:4Mbit)ですから。
    実際に最大容量まで使用されているゲームはありませんが、しっかりと配線はありますので
    接続すれば使用できるようになりますよ。



  3. 返信のほうありがとうございます。
    8K*64個のバンクで合計512KBのアクセスが限界と聞いてまして。エミュレーターでの実験による切り替えでもそんな風に出てましたのでがっかりしていたのですよ。
    もしかしたら、実機では1Mバイトアクセスできるボードがあるんでしょうか。そうだとしたらエミュレーター側も対応してくれるといいのですがと思っております。


    一年前のプログラムですが、こんな感じです。時間があるときお試しください。
    (´・ω・)つhttp://www1.axfc.net/uploader/Sc/so/238374



  4. >akaneさん

    あ、このプログラムはすでに試してますw
    確か一度リセットしないと、実機でちゃんと表示されなかったと思います。

    バンク切り替え等の詳しいことはわかりませんが、MMC5のチップが制御してます。
    それとファミコン版AIRデモ(PRG:64Kbyte CHR:1Mbyte)はエミュでも動いてますよ
    VirtuaNESのみですが。



  5. ちょっと話は違うのですがkazzoでMDC5のカートリッジ(AM29F040B)書き込めますか?
    書き込もうとすると1ブロック(0x2000?)書いた時点でコンペアエラーになるので
    書き込めてないような気がします。
    以前作ったW29C040のカートリッジは問題なく書けますし、MBM29F016で最上位ビットを
    つぶしたカートリッジも書けました。
    配線が間違ってるのかなと思い3個程作ってみましたが症状同じ。
    W29C040のカートリッジと見比べても配線は同じなんですけどねぇ。わからん。
    MDC5は開発中止ということでどこに聞いていいかわからずここに書いてしまいました。
    ホンコンで無いとだめなのかな?そんな事ないですよね。



  6. >zaksさん

    スクリプトはmmc5.afを使われてますか?
    MDC5に書き込む場合はmmc5.afのスクリプトで問題なく書き込めています。
    古いスクリプトを使われているのでしたら、最新のスクリプトで試してみてください。

    MDC5用でスクリプトを作成するならこんな感じで。mdc5.af

    /*
    MDC5書き込みスクリプト

    SRAM 初期化
    ST + SEL を押しながら電源を入れて SEL を押す

    disk side change
    下記の入力があったら disk を交換したとする
    SEL + A,A,A: change side A
    SEL + B,B,B: change side B
    SEL + ST,ST,ST: swap disk 前編/後編

    */
    board <- {
    mappernum = 5,
    cpu_rom = {
    size_base = 2 * mega, size_max = 8 * mega,
    banksize = 0x2000
    },
    cpu_ram = {
    size_base = 0x2000, size_max = 0x8000,
    banksize = 0x2000
    },
    ppu_rom = {
    size_base = 2 * mega, size_max = 8 * mega,
    banksize = 0x0800
    },
    ppu_ramfind = true, vram_mirrorfind = false
    };
    function program_initalize(d, cpu_banksize, ppu_banksize)
    {
    cpu_command(d, 0x0000, 0x8000, cpu_banksize);
    cpu_command(d, 0x2aaa, 0xa000, cpu_banksize);
    cpu_command(d, 0x5555, 0xc000, 0x4000);
    cpu_write(d, 0x5100, 3);
    cpu_write(d, 0x5113, 0);
    cpu_write(d, 0x5114, 0x80);
    cpu_write(d, 0x5115, 0x81);
    cpu_write(d, 0x5116, 0x82);
    }
    function cpu_transfer(d, start, end, cpu_banksize)
    {
    for(local i = start; i < end – 1; i += 1){
    cpu_write(d, 0x5114, 0x80 | i);
    cpu_program(d, 0x8000, cpu_banksize);
    }
    //$e000- は書き込みが安定しないので末尾 page として $7f を指定する。
    cpu_write(d, 0x5114, 0x80 | 0x7f);
    cpu_program(d, 0x8000, cpu_banksize);
    }

    function ppu_transfer(d, start, end, ppu_banksize)
    {}



  7. アドバイスありがとうございます。
    スクリプトはmmc5.afを使っていました。今回のmdc5.afでも症状変わらずでした。
    AM29F040B以外のMDC5カートリッジは書き換えできるだけに謎が深まります。

    とりあえず放置してnamcot163でも作ってみますw



  8. 試しにAM29F040Bの31ピン(/WE)の接続を外したら書き込みできました。なんでだ!?
    kazzoはキットで購入したので私の作り方が悪いのかもしれませんね。



  9. >zaksさん

    /WEを外して書き込めるわけはないんですけど…何ででしょうねw
    キットで購入されたのであれば、細かい部品が多いので半田不良の
    可能性もありそうですね。

  10. はじめまして。ばくてんさん。楽しく拝見させていただいております。
    バンク切り替えのある、カートリッジの/WEを使用して、ROMに書き込んでいるようですが、実動作させるときには、バンク切り替えの時の/WE信号と、ROMの/WEが競合しとうさしないものがあるようです。
    書き込んだ後には、ROM側の/WEをプルアップするか、オープンにすると動作するようですね。
    もし、既出でしたら、申し訳ございません。
    宜しくお願い申し上げます

    • 書き込んだ後には、ROM側の/WEをプルアップするか、オープンにすると動作するようですね。
      →失礼いたしました
      書き込んだ後には、ROM側の/WEを外し、プルアップするか、オープンにすると動作するようですね。でしたね

  11. コメントありがとうございます。
    MMC5での不具合があるのはいくつかあるようですが、すべては調べ切れていないので動作報告は助かります。MMC5以外にも切替が必要なMAP#があるようなので同じような原因かもしれませんね。

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