English
FAQプログラム全般
戻る進む
FAQ/プログラム全般

バックアップ



未フォーマット状態でなく壊れたバックアップファイルはどう対応するの?

Q)
ユーザーのカートリッジRAM(パワーメモリー)の取り扱いによっては(例えば、 電源ON時の抜き差しなど)、マルチプレイヤーの「保存データ管理」画面 において、ファイルの名前やコメント・使用量の値の個所に不定な文字や数値が 表示される事があります。

このとき、未フォーマット状態ではなく(アプリケーションからは 未フォーマットと認識されない)、かつ壊れたファイルの存在する状態に なります。

上記のようなカートリッジRAMに対してデータの記録を実行すると、BUP_Write() 関数内で停止してしまいます。

比較のため、他のアプリケーション(SBLの同名の関数を同手順で呼び出して作成 した)のデータ記録処理を動作させてみたのですが、正常に実行されていました。 BUP_Write()関数の内部処理等で、ライブラリによる差異があるのでしょうか。

A)
まず、バックアップライブラリ用に用意するバッファが何処に配置されるか によって変わってくると思います。

バックアップデータが壊れているということは、バックアップデータに 含まれている、データのサイズ情報なども変わっている可能性があります。
バックアップのRead/Write時にそのバッファをオーバしてしまうような事態が 起こり得ます。
それがシステムの使用している重要な領域であったりした場合 ことによってはハングアップすることも考えられます。

そもそも確かにユーザの使い方によっては、この様な状態になる事は充分 考えられますが、こうなるともうアプリケーション側では手出しの出来ない 状態となってしまいます。


バックアップ管理画面とアプリケーションの返すサイズが違う。

Q)
本体の内蔵バックアップメモリは32kバイト(512ブロック)とあります。
しかし、バックアップデータ管理画面を見ると初期化された状態でも、空 き容量は 461ブロックと表示されます。
これは、ユーザーが使用できるバックアップ領域は461ブロック(約29Kバイト) という事なのでしょうか。また、それは何故なのでしょうか。

4096バイトの連続したデータの場合、作成基準にある使用量の式で 計算した場合、使用量は(4096+32)/64=65ブロックとなるはずですが、 実際バックアップRAMに書き込んで"BUP_Dir"や"BUP_Stat"で調べてみると 使用ブロック量は72ブロックとなります。
また、バックアップデータ管理画面の方では、計算式通り65ブロックとして 表示されます。この相違は何故起こるのでしょうか。

1つのバックアップデータで、本体内蔵バックアップRAMを容量限界まで 使用しても構わないのでしょうか。
それとも、モラルとしてある程度の容量は空けておかなくてはならないので しょうか。

A)
バックアップライブラリの関数Bup_Statにて取得した空きブロック数と、実際に 利用できるブロック数としての差異は、将来の拡張に備えてリザーブエリアとし て確保している領域があるために生じています。この為に実際に使用できる 容量は若干少なくなっています。

バックアップRAMへのアクセスを行う場合、Bup_Statで取得された構造体BupStat に示されるブロック単位で書き込みが可能かどうかを確認し、参照して行って ください。


容量の単位の「ブロック」の計算方法が良く分かりません。

Q)
容量の単位の「ブロック」の仕様が良くわかりません。
Developer's Information STN-9 の内容から計算した値と、 ライブラリが返してくる値とが、一致しないのですが?

A)
両者の値が一致しないのは、使用目的が異なる為です。
目的別に正しい方を使用してください。

Developer's Information STN-9 で説明している「消費量[ブロック]」は、
'ユーザ'に使用量を通知する為の便宜的な値です。

 (使用量) = ( [使用しているバイト数] + 32 ) / 64 の切り上げ

という計算式を用います。

この計算式は、本体 BOOT-ROM のバックアップ管理画面で表示される消費量 の計算式と同一で、本体・カートリッジ・FDの全てに共通です。 厳密な意味の消費量とは異なる為、残り容量のチェック等には 使用できません。

また、ライブラリ関数での「block」はデバイス毎にサイズが異なり、 次のようになっています。

総ブロック数
totalblock
1ブロックの容量
blocksize
(バイト単位)
本体内蔵RAM(現行)51264
パワーメモリー(旧型)1024512
パワーメモリー(新型)2048256

※上記の値は、全てをセーブデータの領域として使用できる訳では ありません。

バックアップ残り容量チェックは、どのようにすべきでしょうか?

Q)
バックアップ残り容量チェックは、どのようにすべきでしょうか?

A)
最初に、既にセーブデータが存在しているかのチェックを行います。
次のディレクトリ情報取得関数BUP_dir()を使用してください。

書 式
Sint32 BUP_Dir(device, filename, NUM, dir)
[入 力]
Uint32 device :装置番号 (0:内蔵メモリ 1:カートリッジ)
Uint8 *filename :ファイル名(11文字以内のASCII文字列)
Uint16 NUM :ディレクトリ情報構造体の確保数
[出 力]
BupDir dir[NUM] :ステータス情報
[関数値]
ファイル名の一致件数
(一致件数がNUMを超えた場合は、符号反転した値となる)
[説 明]
ファイル名を前方一致で検索して、一致した件数を関数値に返します。
複数のセーブデータを使用するアプリケーションの場合、 末尾の数字以外が共通のファイル名ならば全て検索されます。
また、一致件数が NUM以下ならば、それぞれのファイルの ディレクトリ情報を dir[NUM]に取得します。

もしも全てのデバイスで一致件数が0の場合は、セーブデータが 存在していません。
その場合は、新規にセーブ可能かどうかのチェックを行います。 次のステータス取得関数 BUP_Stat()を使用してください。

[書 式]
Sint32 BUP_Stat(device, datasize, stat)
[入 力]
Uint32 device :装置番号 (0:内蔵メモリ 1:カートリッジ)
Uint32 datasize :セーブデータのサイズ(バイト単位)
[出 力] BupStat *stat :ステータス情報
[関数値]
装置状態
(0:取得成功 BUP_NON:未接続 BUP_UNFORMAT:未フォーマット)
[説明]
セーブ可能なファイル数を知ることが出来ます。
装置番号とデータサイズを指定して関数を呼び出してください。
関数値が 0 ならば、ステータス情報が正常に取得されています。
stat.datanum を参照してセーブ可能なファイル数を取得してください。
[注意事項]
取得したステータス情報のうち、次の情報は使用しないでください。
理由は、正しく残り容量をチェック出来ないからです。

 stat.blocksize :1block のサイズ(バイト単位)
 stat.freeblock :未使用 block 数
 stat.freesize :未使用容量(バイト単位)

ただし、 stat.freesize だけは、セーブするファイル数が 1つの場合のみ、使用しても問題ありません。
(セーブするデータのバイトサイズとの比較が可能)


セーブする際の'言語種類'には何を設定するのですか?

Q)
セーブする際の'言語種類'には何を設定するのですか?

A)
ここで言う言語種類とは、セーブファイルのコメント情報の言語です。 セーブデータのファイル名は、ASCIIコードしか使用できませんが、 コメント情報には、カタカナ等が使用できます。

もしもコメントの内容を日本語で記述する場合は、'言語種類'には、 BUP_JAPANESE を指定してください。

その他の言語の場合は、次のうちのどれかを使用してください。

BUP_ENGLISH :英語
BUP_FRANCAIS :フランス語
BUP_DEUTSCH :ドイツ語
BUP_ESPANOL :スペイン語
BUP_ITALIANO :イタリア語

ファイル名・コメント情報に使用できる文字については、 「バックアップ作成基準」を御参照ください。


バックアップ用のカートリッジの接続チェック方法は?

Q)
バックアップ用のカートリッジの接続チェック方法は?

A)
バックアップライブラリを初期化した際に、チェック可能です。

      BUP_Init( addr, workbuff, conf)
        Uint32 *addr           :ライブラリ展開領域
        Uint32 workbuff[2078]  :ライブラリワーク領域
        BupConfig conf[3]      :接続デバイス情報
                               conf[0]  内蔵RAM
                               conf[1]  カートリッジRAM
                               conf[2]  FDD(現在は使用不可)

BUP_Init()を実行してから、接続デバイス情報 conf[1] を参照します。
カートリッジが未接続の時→ conf[1].unit_id が 0になります。
カートリッジが接続の時→ conf[1].unit_id が 2になります。


バックアップRAMが未初期化状態等に対するバグチェックはどうすればいいの?

Q)
バックアップRAMが未初期化状態等に対するバグチェックは どのようにすれば良いのですか?

A)
本体RAMを未初期にするには、電池を外した状態で本体の電源 を入れるのが、簡単な方法です。
カートリッジの未初期化状態やファイルの破損状態については、 現在専用のツールを準備中です。


戻る進む
FAQプログラム全般
Copyright SEGA ENTERPRISES, LTD,. 1997