レトロフリークカートリッジアダプタ活用テクニック(2)SFメモリカセットの吸出し


公式情報だとレトロフリークはSFメモリカセット未対応のはずだが・・・?できるんだな、これが


このページについて・概要
このページでは前回、ウルトラコア吸出しに成功後、次にSFメモリカセット認識→吸出しについて 調査を行った内容を記しています。そのような能書きに興味はねえ!すぐ吸出しを実際にやってみたい!という方は こちらをどうぞ。
別のプラットフォームでSFメモリカセットの吸出し&書き換えを行いたいと思う方には、本ページの内容が参考になると思います。


RFCAとスーファミカセット
SFメモリカセットの前に、まず普通のスーファミカセットをRFCAで吸出しできることを確認することにしました。
RFCAは通常のスーファミカセットやSFメモリカセットを挿すと、正しく「スーファミのゲームが接続されている」を認識するようです。

ただしスーファミではメガドラとは異なり、
・24bitのアドレスバスが「バンク(MSB8bit)」と「オフセット(LSB16bit)」と分けられている
→ただし呼び名の違いだけで、それほどカセット読み書き操作には影響はない

・ゲームによってLoROM、HiROMの違いがある
→ROMファイルの同一アドレスが、実機スーファミからアクセスされる時、異なるアドレスになる

という違いがあることが今回初めてわかり、勉強しました。へぇー。
勉強にはこちらのfullsnes.txtを参考にさせてもらいました。

メガドライブでは、RFCAに接続されたカセットの「特定アドレスの読み取り」コマンドを使用していましたが、今回のスーファミカセットでは「特定アドレスの書き込み」コマンドも必要になると考えられました。 というのも、SFメモリアセットなどでは「n番目のゲームに切り替える」などの操作をカセットに対して行うと思われたためです。
書き込みコマンドの調査は、レトロフリーク実機にバックアップSRAM付きのスーファミカセットを接続したうえで、例によってレトロフリーク<->RFCA間のシリアル通信をキャプチャして調査しました。


SFメモリカセットにアクセスするには・・・?RFCAには「クロック出力コマンド」があった
RFCAを使っての、通常のスーファミカセットの吸出しは特に問題なく行えそうでしたので、次にSFメモリカセットの吸出しをやってみようと思ったのですが、これが当初、全くアクセスができませんでした。
fullsnes.txtには「SFメモリカセットにはMENU PROGRAMが書き込まれている」「アドレス0x2400にコマンドを書き込む」などの記載があるのですが、よくわからん・・・?

この頃、ネットで、arduinoでSFメモリカセットの吸出しを行える吸出し機の記事を見つけ、調べたところ、どうもスーファミカセットに対してクロックを供給している・・・?
どうも、スーファミカセット内部に特殊なマイコンやコプロセッサーが入っているカセットは、吸出し可能な状態にするには外部からクロックを与えてやらなければならないようでした。
これが判った時、いやあ・・・RFCAではそんな機能、ねえかもなあ・・・?公式情報で非対応って言ってるしねえ・・・?と思いました。

RFCAのケースを開け、内部を見てみると、一応、スーファミカセットにクロックを供給するはずのピンはカセットの1番ピン「MCK 21M」(fullsnes.txtの表記)で、どうもRFCA内のマイコンのどっかに配線はされているようでした。
何らかの方法で、クロック供給自体はできるのかな??と思えました。


1番ピンを外に引き出し、ロジアナで内容を見てみます

スーファミカセットへのクロック供給が必要なのは、いわゆる「3本足カセット」で、SFメモリカセット以外にも、SA-1が搭載されているカセットも該当します。 たまたま手持ちのカセットに「実況おしゃべりパロディウス」があったのですが、あれ・・・?これ、レトロフリークで吸い出せてるじゃん?

というわけで1番ピンをロジアナで見ながら、実況おしゃべりパロディウスを抜いたり挿したりしつつレトロフリークとRFCA間のやり取りを見てみると・・・ あるコマンドがレトロフリークから発行されると、1番ピンにクロック波形のようにH/Lが連続で変化し続けるようになることがわかりました。
これだ!RFCAにはクロック出力コマンドがあったんだ!?

コマンド発行と同時にクロックが出力されている!?
見にくいかもしれませんが、「D4_****」となっているオレンジ色の線が、左だとHに張り付き、右はHLHL..になっています



RFCAの「クロック出力コマンド」は、CIC0〜CIC3ピンでも何かやってる(未調査)
なお、あまり詳細には調べていませんが、このクロック出力コマンドは、カセットに対してクロックを供給する以外にも「CICピン」(fullsnens.txtで言うとCIC0〜CIC3、24,55,25,56ピン)の入出力にもかかわるようです。

というのも、SFメモリカセット調査の一環で、これら4本のピンを隠した状態にしたカセットを挿し、RFCAに対してクロック出力コマンドを発行すると、RFCAは、通常は「設定に成功した」を意味すると思われる応答データを返すところ、恐らく「設定に失敗したよ」と思われる、通常と異なるデータを返すためです。
なんだか知らんが、高度なことをやってるのかなあ・・・?


SFメモリカセット基板の表と裏の、CIC0〜CIC3ピンをマスキングテープで隠す



RFCAでは、SFメモリカセットのコマンド0x8nに対応できない?->HIROM:ALLのみで良い
スーファミカセットへのクロック出力コマンドが判明し、やっとSFメモリカセットへアクセスできるかと思われたのですが、まだ不審な点がありました。

実機スーファミにSFメモリカセットを挿した場合の挙動ですが、まずMENU PROGRAMがスーファミからアクセス可能状態となり、そこで収録されたゲーム一覧をメニュー画面上で 選ばせる、のような動きをするはずです。
このため、RFCAから

1.SFメモリカセットを起動状態にし、コマンド0x80(0番目に収録されたゲーム、すなわちMENU PROGRAM)に切り替える
2.MENU PROGRAMから収録ゲーム一覧の情報を得て、任意のゲームにコマンド0x8nで切り替える(n:ゲーム番号)
3.2で選んだゲームの吸出し

という操作をすべきと思ったのですが、どうもうまくいきません。1の0x80コマンド送付は成功するようなのですが、2の0x8nコマンドが効果が無いようでした。
コマンド0x8nを受けたSFメモリカセットは、自分自身のゲームを切り替えた後、スーファミ本体に対してリセットをかけ、そこでスーファミ本体にリセットがかかると、次回起動時に切り替わったゲーム(もしくはMENU PROGRAM)が起動する・・・という一連の動きに対して、RFCAがハード的に対応できないせいかもしれません。例えば、リセットを受けたら特定ピンをHやLにする、など。

このコマンド0x8nの挙動が不審なためにしばらくハマったのですが、最終的には、SFメモリカセットの吸出し/書き換えには、コマンド0x80及び0x8nに対応する必要はない、という結論に至りました。
fullsnes.txtでいうと「HIROM:ALL」状態にすれば、SFメモリカセット内のMENU PROGRAMも、収録ゲームも吸出しを行うことができます。
先人の吸出し機の実装に引き摺られ、惑わされてしまいました・・・。


SFメモリカセット吸出しのまとめ
これらさえ押さえておけば、SFメモリカセットからのゲーム吸出しは行えるでしょう。
次は10年来の悲願の、SFメモリカセットの書き換えです。マップ情報とは?隠しセクターとは?


参考にさせて頂いたサイト、情報
nocash先生のfullsnes.txt
sanni先生のcart reader


(2020/01/12)



トップへ戻る