Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- headerbuf レコードヘッダ(HVQM2Record構造体)を格納するバッファ
- * bodybuf レコードのデータ本体を格納するバッファ
- * type 要求レコードタイプ
- * stream 現在のHVQM2レコードアドレス
- * mb PIマネージャに送るI/Oメッセージブロックリクエスト
- * mq PIマネージャからDMA完了通知を受け取るメッセージキュー
- *
- * 説明:
- * ROM内のHVQM2データアドレス stream から、次の type 型のレコードを
- * 見つけて、そのレコードヘッダを headerbuf に、データ本体を bodybuf
- * に読み込みます。type には、音声レコードを読み込むには HVQM2_AUDIO
- * を、画像レコードを読み込むには HVQM2_VIDEO を指定してください。
- *
- * このファンクションは、音声レコードの読み込みと画像レコードの読
- * み込みをそれぞれ別スレッドで並列に行うことを想定しています。し
- * たがって、PIマネージャに送るI/Oメッセージブロックリクエスト mb
- * と、このファンクション内でDMA完了メッセージを受け取るためのメッ
- * セージキュー mq は、音声レコード読み込み用のものと画像レコード
- * 読み込み用のものをそれぞれ別個に予め準備しておく必要があります。
- *
- * 音声レコードの読み込みは、画像レコードの読み込みに優先して行わ
- * れます。
- *
- * stream は2バイト整列でなければなりません。headerbuf および
- * bodybuf はR4300データキャッシュラインサイズに合わせて16バイト整
- * 列にしてください。
- *
- * bodybuf は必要十分な容量を確保してください。
- *
- * 戻り値:
- * 次のレコードアドレス
- */
- u8 *
- get_record( HVQM2Record *headerbuf, void *bodybuf, u16 type, u8 *stream, OSIoMesg *mb, OSMesgQueue *mq )
- {
- u16 record_type;
- u32 record_size;
- s32 pri;
- pri = (type == HVQM2_AUDIO) ? OS_MESG_PRI_HIGH : OS_MESG_PRI_NORMAL;
- for ( ; ; ) {
- romcpy( headerbuf, stream, sizeof(HVQM2Record), pri, mb, mq );
- stream += sizeof(HVQM2Record);
- record_type = load16( headerbuf->type );
- record_size = load32( headerbuf->size );
- if ( record_type == type ) break;
- stream += record_size;
- }
- if ( record_size > 0 ) {
- romcpy( bodybuf, stream, record_size, pri, mb, mq );
- stream += record_size;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement