Shinobi Library - ストアーキュー関数

sySqEnd

ストアキュー用の物理アドレスを取得

書式

Void *sySqEnd( sqArray )
Void *sqArray

引数

sqArray   ストアキューに割当てられた仮想アドレス

戻り値

物理メモリのアドレス

解説

ストアキュー用の仮想アドレスに割当てられた物理メモリのアドレスを返します。

Shinobi2ライブラリでは、MMU がイネーブルになっているため、ストアキュー転送用の仮想アドレスを割当てています。 ストアキュー転送を行う場合には、転送を行いたい物理アドレスを sySqStart()関数に渡し、sySqInit()関数によって割当てられた対応する仮想アドレスを取得します。 その取得したアドレスに対して32バイト分のデータを書込み、PREF 命令を発行することで、ストアキュー転送が行われます。 この仮想アドレスをインクリメント操作などをして使用した後に、sySqEnd()関数に渡すと、そのアドレスに割り当たっている物理メモリのアドレスを得ることができます。


用例

    Uint32 *sqArray;
    Uint32 *dstArray;
    Uint32 *srcArray;

    testArray = (Uint32 *)DEST_ADDRESS_ALIGN32;
    srcArray =  (Uint32 *)SRC_ADDRESS_ALIGN32;

    sqArray = sySqStart(testArray);
    *sqArray++ = *srcArray++;
    *sqArray++ = *srcArray++;
    *sqArray++ = *srcArray++;
    *sqArray++ = *srcArray++;

    *sqArray++ = *srcArray++;
    *sqArray++ = *srcArray++;
    *sqArray++ = *srcArray++;
    *sqArray++ = *srcArray++;
    prefetch((int*)((int)(sqArray-8)));
    testArray = sySqEnd(sqArray);

備考

ストアキュー転送を行っている最中に他のストアキュー転送を行うプログラムに割込まれると、 ストアキューレジスタの中身が壊れるため、転送が正しく行われません。 Ninja2ライブラリおよび Kamui2ライブラリはストアキューを使用していますので、割込み内でのストアキューの使用は禁止とします。

sySqEnd
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000