EZ-Flash 3in1 Expansion Pack でDS上からGBAを起動する

3in1ExpansionPack - Nintendo DS マジコンWiki
俺用メモ。 3in1 Expansion Pack = 3in1Ep。
あくまでメモなので、NDSGBAの内部的技術についての記述にはいろんな書籍やネット上の記事などから予測・予想した部分が多数含まれています。正直俺にはよく解ってない部分が多いです。
もし、この記事を読んで参考にしようとする方(居ないだろうけど)は、そこらへんにご注意を。

3in1Epのメモリ領域について

「3in1」の名のとおり、振動パック・拡張メモリ・GBAフラッシュカートリッジの3つ(さらにEz5用の領域)の機能があるが、GBA起動に関する部分にのみまとめてみた。

  • NOR flash
    • 256Mbit = 32MB。
    • フラッシュメモリの不揮発メモリ(EEPROM)。
    • 一般的にGBAのROMイメージを書き込むのはココだが書換回数に限度がある。
    • 電源を落としてもROMイメージが保存されている。
    • 一旦この領域に書き込めば、次回から通常のGBAカートリッジとして認識される。
      • Slot1を抜いて普通に起動すれば、メニューで「GBAカートリッジ」と表示される。
    • (PSRAMに比べて)アクセス速度は速いが書き込み速度は遅い。
  • PSRAM
    • 128Mbit = 16MB。
    • DSブラウザの拡張メモリとして使われる揮発メモリ(DRAM)。
    • DRAMなので書換回数の限度はない。
    • ワークエリア前提の設計なのでバッテリバックアップなどは無し。
    • 3in1ExpToolsを使用すれば、この領域にROMイメージを書き込んで起動できる。
      • もちろん電源を落としたら再度ツールで書き込む必要がある。
    • (NOR flashに比べて)アクセス速度は遅いが書き込み速度が速い。
  • SRAM
    • 4Mbit = 512KB
    • セーブファイルが展開される揮発メモリ。
    • バッテリ(キャパシタ?)にてデータ保持されている。

GBAローダプログラムについて

自分が試したローダについてのみ記述。

どちらも、

  1. Slot1の(マジコン)カートリッジから起動し、
  2. (マジコン)カートリッジに書き込まれているGBAのROMイメージをSlot2の3in1Epへ書き込んだ後、
  3. 書き込まれた3in1Ep内のROMイメージをキックする。

という、手順を行うものである。

なんでわざわざこんなまわりくどい手順が必要かというと、

  • Slot1(DSカートリッジ側)からGBAモードで起動することができない。
    • Slot1から起動されると、DSモードになるため。
    • Slot1からGBAイメージを起動すると、GBAモードで起動するための情報(BIOS?)が取得できないっぽい。*1
  • GBAモードで起動するためには、実行イメージがSlot2(GBAカートリッジ側)に存在する必要がある。

ただし、

  • Slot1から起動した実行プログラムはSlot2の実行イメージを起動することができる。
    • 直接起動というより、『実行権をSlot2に移す』といった感じか?
  • Slot1から起動した実行プログラムはSlot2のROMエリアにアクセスできるっぽい。
    • DSのソフトでは、Slot2に挿さったGBAカートリッジと連携するものがある。
    • これはつまり、DSモードで起動してもSlot2のROMを読み込んでいるということ。

である(俺の勝手な予想含む、あしからず)ため、逆に「DSカートリッジ側から起動するGBAローダ」が実現できる、ということ。

ここら辺りは、DSの構造をもっと理解する必要があるなぁ(homebrew関連サイトに載ってたような気がする)。

gbaldr v0.1 final (cory1492氏作製)

シンプルな転送ツール。dldi対応。

  • 長所
    • *.GBA、*.SAVは混在していてもOK。
      • ファイルリストで、*.GBA/*.SAV/両方でフィルタリングしてくれる。
    • SCDSoneからの起動は速い。
  • 短所
    • このバージョンでは、NOR領域へのGBAイメージの書き込みと、SRAMのSAVEファイルの管理のみ。
      • 後述の3in1ExpPackToolのようにPSRAMへの書き込み・起動に対応したバージョンがあるらしい(未試用)
3in1ExpPackTool v1.9 (Rudolph(皇帝)氏作製)

多機能転送ツール。dldi対応。

  • 長所
    • NOR flashへのGBAイメージの書き込み、SRAMの管理だけでなく、PSRAMへの書き込み・起動に対応している。
    • SRAMの管理が充実。
      • ROMイメージ起動時に、「ファイル名.GBA」と同名の「ファイル名.SAV」をSRAMに自動でロードしてくれる。
      • すでにSAVEファイルが格納されている場合には、他のカートリッジを起動する際、「ファイル名.SAV」ファイルへ書き出してくれる。
        • SRAM上に読み込んだ際のSAVEファイル名を保存しているっぽい。
      • 複数のSAVEファイルをまとめてSRAMで管理できるらしい。
        • 複数のSAVEファイルが収まったSRAM領域を、丸ごと退避&復旧できる。
        • 手持ちのGBAカートリッジはSAVEサイズが512Mbitのゲームが多い(複数保存する余裕が無い)ので、この機能の恩恵に預かっているかどうか良く解っていない。
  • 短所
    • 起動が遅め。
    • *.GBAと*.SAVの管理場所が決まっている。
      • \GBA → ROMイメージ
      • \GBA\SAVE → SAVEファイル
    • ROMイメージの「ファイル名.GBA」と、SAVEファイルの「ファイル名.SAV」でそろえる必要がある。

その他・独り言

  • 今回、GBA起動をしたかった大きな動機が『bitGenerationsシリーズを1本にまとめたい』というものだった。
    • NORflash領域は書換限度があるため、起動毎にSlot2に書き込むような場合だと、PSRAMを使ったほうが得策である、かと。
    • GBAのFlashCartのように、Pogoshellで1本のROMイメージに統合することも試したが、bitGenerationsシリーズを全部突っ込んだらバカでかくなってしまい、NORflashに収まらなくなってしまった。
      • bitGanerationsは、1本16MB × 6本*2 = 96MB。
  • セーブ領域にEEPROMを仕様するGBAカートリッジの場合、EZ ClientやGBATAといったツールでSRAMを使うようパッチを当てる必要がある。
    • ・・・のだが、俺が実機から吸い出したGBAカートリッジのSAVEファイルでは、なぜか読み書きできなかった。
      • GBA SP + Boot Cable USB + devman_usb_v335.exe
      • 手持ちのカートリッジでEEPROMだったのはDOOM2、ファランクス、RARIUS-R、V-RALLY 3。

そんなこんなで、

現状は3in1ExpPackToolで運用してます。セーブがEEPROMのカートリッジについては、とりあえずスルーする方向で。最近あまり遊んでないからいいや、と。

というか、本当はbitGenerationsはGB microでやりたいんですよね。
今手持ちのFlash2Advance(256Mbit)じゃ余裕で足らないし。外部メモリを使用するGBA用FlashCartはGBA本体から壮大にはみ出るタイプが多いし。EZ4あたりが良さそうだけど、DSのマジコンが出始めてから通販でも見かけなくなってますな。
手に入ったら試してみたいところです。

*1:GBAやDS(NESもそうらしい)は、本体とカートリッジ間で認証を取って、成功したら起動する仕組みになっている。なので、この認証機構がクラックされるまではFlashCartが出てこなかった、という事らしい

*2:シリーズ制覇まであとカラリスだけ・・・。