# CTRDG_WriteAndVerifyAgbFlashAsync

## 構文

      #include <nitro/ctrdg.h>

      void CTRDG_WriteAndVerifyAgbFlashAsync(u16 sec_num, u8* src, u32 verifysize, CTRDG_TASK_FUNC callback);

## 引数

sec_num | 対象セクタNo
src | 書き込み元アドレス
verifysize | ベリファイサイズ（byte）
callback | WriteAndVerify処理終了時に呼び出されるコールバック関数

## 返り値

なし。

## 説明

本関数は、内部で非同期に `CTRDG_WriteAgbFlashSector( )`で書き込みを行った後 `CTRDG_VerifyAgbFlash( )`で verifysize バイト分ベリファイを行います。
エラーの場合は最大で CTRDG_AGB_FLASH_RETRY_MAX (AgbFlash.h で定義）回リトライを行います。
本ルーチンの呼び出し後に返ってくるコールバック関数の引数である構造体 CTRDGTaskInfo のメンバ result を参照することで、 WriteAndVerify処理に成功したのかを知ることができます。
WriteAndVerify処理に成功した場合は 0 、失敗した場合は 0 以外で、ベリファイエラー時はデバイス側エラーアドレスです。
※本関数では、ライトエラー時は 32bit 中の 16bit でエラーコードを返しますが、ベリファイエラー時は 32bit のデバイス側エラーアドレスを返しますので、エラーコード確認の際はご注意下さい。

アクセスサイクルの設定は関数内で行いますので、事前に行う必要はありません。
また、この関数ではタイムアウト測定用にチックを使用しますので事前に `OS_InitTick( )`を呼んでおく必要があります。

※この関数内では一定期間全ての割り込みが禁止され、カートリッジバスがロックされますので注意して下さい。
特に、本関数コール時はダイレクトサウンドおよびＶ・Ｈブランク同期、表示同期、カートリッジリクエスト等の特定のタイミングで自動起動するＤＭＡは使用しないで下さい。

また IS-NITRO-DEBUGGER 1.66 以前のバージョンでは AGB バックアップデバイスに正常にアクセスすることはできませんので、注意してください。

    /* コールバック関数 */
    typedef u32 (*CTRDG_TASK_FUNC) (struct CTRDGiTaskInfo_tag *);

## 参照

`CTRDG_WriteAgbFlashSector, CTRDG_VerifyAgbFlash, CTRDG_WriteAndVerifyAgbFlash
`

## 履歴

2006/05/25 IS-NITRO-DEBUGGER 1.66 以前のバージョンでは AGB バックアップデバイスに正常にアクセスできないことを追記
2006/04/07 初版