ブートスティック(SMS)

ご使用にあたってはゲームソフトメーカの著作権侵害の無いようにお願いいたします

<Super Memory Stick(SMS)とは?>

SMSはGBAの通信ポートに接続して、ゲームのセーブデータをバックアップするための装置です。
使い方はゲームカセットをGBAに挿入して、SMSを通信ポートに接続します。電源ONと同時にSTARTとSELECTボタンを押します。このようにすると、カセットのゲームが起動せずに通信ポート経由でSMSのメニュープログラムが起動します。
このメニュー画面を操作することで、ゲームカセットのセーブデータをバックアップ・リストアすることが出来ます。SMSには4Mと8Mの2種類が発売されていて価格も安価です。SMSの中に自作ゲームを書き込んで持ち歩けたら結構便利です。


ブートスティック(SMS)はパーツショップでも購入できます

内部構造は基板にボンディングされた謎のCPU、4/8MbitのATMEL製のシリアルフラッシュ、そして7.3728MHzのクリスタルというとてもコンパクトな作りになっています。


<SMSの解析>

SMSの構成から判断すると、SMSのメニュープログラムもシリアルフラッシュに書き込まれていると考えられます。この予め書き込まれているSMSメニュープログラムの代わりにユーザプログラムを書き込むことが出来れば目的が達成できます。
実際にこの手のことを解析するにはロジアナを使用する以外に方法はありません。

実際にカメレオンUSBロジアナを繋いで調べてみました。SMSはGBAをマルチプレイモードでブートした後に、32bitシリアル転送モードを使用してフラッシュメモリーのアクセスを行っていることが判明しました。後はアクセスするためのコマンドプロトコルを調べればOKという段階までたどり着きました。

カメレオンUSBロジアナはパラレルバスの内容を16進数表示できるアナライズ機能はありますが、シリアル通信を16進数表示出来る機能がありません。これが無いとプロトコルの解析は困難なので、とりあえずその部分を外付けで作ってと思っていました。ところが他にもいろいろやることが多く、SMSはそのまま放置プレイと化してしまったのです。(ほぼ半年前)

放置プレイになってしまったSMSが何故ゆえに復活したかと言いますと、実はお恥ずかしい話があります。
懇意にしていただいているゲームラボ編集部からGBA関連の特集を組むので、何かねたを提供して欲しいといわれていました。手持ちにサムスンのフラッシュメモリーとCygnalの超小型マイコンがあったので、これを組み合わせてGBA-SPに組み込めるフラッシュ付きブートチップを作ろうと考えていました。GBA−SPは非常に高密度な内部設計のため、サンハヤトのフレキシブル感光基板を使用する予定でした。自分でもなかなか面白そうな企画だと自負していました。
ところが、手持ちのCygnalマイコンはI/Oの数が少ないため、フラッシュメモリの一部のピンとGBAの通信ポートを共有する必要が生じました。これが問題になったのです。GBAはGBとの互換性を維持するために、GBのゲームカセットを挿入するとGBモードで動作します。このときGBAの通信ポートもGBモードとなり、5Vの電圧がかかります。Cygnalのマイコンは5V耐圧を持つのですが、フラッシュメモリーはNGでした。最悪GBのカセットを使用するとブートチップが壊れてしまうということになりかねません。
このことが判明したのは原稿の締め切りの2日前でした。ゲーラボ編集部では既に紙面を空けて待っているので、いまさらごめんなさいは出来ません。何か替わりの原稿を書かねば、、、。と非常にあせっておりました。
そんな折、何気にインターネットを検索していると、なんと海外でSMSの解析に成功したというHPを発見しました。ソースコードも公開されていました。私が必要としていたコマンドプロトコルが全て判明したのです。


<Super Memory Stick Manager>

どのような方法でSMSのフラッシュを書き換えたらよいでしょうか?
F2Aなどのフラッシュカセットに書き換えるためのプログラムと実行させたいユーザプログラムを書き込んで、SMSのフラッシュを書き換える方法もあります。
しかし、この方法は手順が複雑になりますし、フラッシュカセットが無いと実現できません。そして可能ならばSMS全体のバックアップや、ユーザプログラムを書き換えた後でも元の状態に戻したりもしたいです。

そこでブートケーブルUSBを使用した専用ツール(smsman.exe)を作成することにしました。
smsman.exeを使用することで、ブートケーブルUSBとSMSがあればファームの吸出しからプログラムの書き込みまで、自由に行うことが可能になります。
SMSもブートケーブルもGBAの通信ポートを使用しますので、当然ですがブートケーブルとSMSの差し替えが発生します。

GBAの内部RAMは256Kbyte(2Mbit)あります。基本的に起動できるのはこの領域で実行できるプログラムに限ります。従って市販されているGBAのゲームを吸い出してSMSに書き込んでも絶対に動きません。

SMSは4/8Mbitの容量がありますので、4Mで2本、8Mで4本のプログラムをSMSに書き込むことが出来ます。起動するプログラムを選択するためにローダーを作成しました。SMSからはまず最初にこのローダーが起動され、起動時に押されていたボタンによってロードするプログラムを切り替えます。

ローダーを書き込んだSMSを挿入して電源をONするとこの画面が表示される

これがsmsman.exeのメニュー画面です。ブートケーブルUSBをGBAとPCに接続し、GBAをONして、smsman.exeを起動します。

ファームウエアの「吸出し」でSMSのファームウエアを吸い出します。
ファームウエアの「書き込み」でSMSにファームウエアを書き込みます。
「データを含む」にチェックを入れることでSMS全体に対して吸出し・書き込みを行います。

(注意)SMS購入直後にファームウエアの吸出しを行ってください。
このとき吸い出したーファームウエアが無いと、後でSMSを従来のセーブデータ保存用として使用することが出来なくなります。

ユーザプログラムの「ローダー書き込み」はSMSに専用ローダーを書き込みます。
ユーザプログラムの「プログラム書き込み」は選択した1-4の位置にユーザプログラムを書き込みます。
(4Mの場合は1か2、8Mの場合は1から4を選択します。)

ボタンをクリックしますと、処理が開始されます。
ブートケーブルやSMSの抜き差しに関しては、GBAの画面の指示に従ってください。


<スクリーンショット>

パズルゲーム(game.gba)とファミコンエミュレータ(PocketNes + DigDug)


<ダウンロード>

smsman.exe Super Memory Stick Manager
game.gba サンプルゲーム(パズル)
glib.gba  サンプルプログラム