Shinobiライブラリ - メモリーカード関数

buSaveExecFile

実行ファイルのセーブ

書式

Sint32 buSaveExecFile( drive, *fname, *buf, nblock, *time, flag ) 
Sint32 drive 
const char *fname 
const void *buf 
Uint32 nblock 
BUS_TIME *time 
Sint32 flag 

引数

drive   拡張ソケットの番号
*fname   ファイル名
*buf   読み込みアドレス
nblock   読み込むプロック数
*time   タイムスタンプ
flag   フラグ

戻り値

BUD_ERR_OK   処理要求を受けつけた
BUD_ERR_BUSY   処理中のため要求を受けつけられなかった

解説

実行ファイルをセーブします。

拡張ソケットの番号driveには次の値が指定できます。

 BUD_DRIVE_A1   ポートAの拡張ソケット1 
 BUD_DRIVE_A2   ポートAの拡張ソケット2 
 BUD_DRIVE_B1   ポートBの拡張ソケット1 
 BUD_DRIVE_B2   ポートBの拡張ソケット2 
 BUD_DRIVE_C1   ポートCの拡張ソケット1 
 BUD_DRIVE_C2   ポートCの拡張ソケット2 
 BUD_DRIVE_D1   ポートDの拡張ソケット1 
 BUD_DRIVE_D2   ポートDの拡張ソケット2 

通常のアプリケーションであればこの関数でファイルを丸ごとセーブします。 実行ファイルが存在する場合、および同名ファイルが存在する場合はエラーとなります。

フラグflagにはファイルの属性を指定します。

 BUD_FLAG_VERIFY   ベリファイあり 
 BUD_FLAG_COPY(n)   コピーフラグ(nはコピーフラグ値) 


用例

Sint32 ret;
Sint32 blocks, flag;
BUS_TIME time;
SYS_RTC_DATE rtc;
/* セーブするデータ(512*10バイト) */
extern char SaveData[];

/* ファイルサイズは10ブロック */
blocks = 10;

/* ベリファイを行う | コピーフラグをFFHに設定する */
flag = BUD_FLAG_VERIFY | BUD_FLAG_COPY(0xff);

syRtcGetDate( &rtc );

/* タイムスタンプの設定 */
time = ( BUS_TIME )rtc;

ret = buSaveExecFile(BUD_DRIVE_A1, "SAVEDATA",
		SaveData, blocks, &time, flag);
if (ret != BUD_ERR_OK) return NG;
while (buStat(BUD_DRIVE_A1) == BUD_STAT_BUSY) {
	:
}
if (buGetLastError(BUD_DRIVE_A1) != BUD_ERR_OK){
	return NG;
} else {
	return OK;
}

備考

ベリファイエラーが発生した場合でも、ファイルはセーブされています。 buStat関数によるこの関数の完了ステータスは

 BUD_ERR_OK   正常終了 
 BUD_ERR_UNFORMAT   フォーマットされていない 
 BUD_ERR_NO_DISK   メモリーカードがない 
 BUD_ERR_DISK_FULL   実行ファイルはすでに存在する 
 BUD_ERR_FILE_EXIST   同名ファイルが存在する 

セーブには、(セーブブロック数×5 Int)かかります。(他のドライブの状態等によっては、多少時間は変動します。) また bufには必ず、4バイト境界でアドレスを与えるようにしてください。


buSaveExecFile
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998,1999