ntr_bootrom/trunk/IrisMainp/include/IrisUTL.h

358 lines
12 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//====================================================================
// IrisUTL.h
// ユーティリティライブラリ
//
// Copyright (C) 2003 NINTENDO Co.,Ltd.
//====================================================================
#ifndef _IRIS_UTL_H
#define _IRIS_UTL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <IrisTarget.h>
#include <IrisTypes.h>
//======================================================================
// クリア コピー
//======================================================================
//----------------------------------------------------------------------
// 16bitクリア
//
//・CPUにて16bitデータでクリアします。
//
//・引数:
// data クリアデータ
// destp デスティネーションアドレス
// size クリアサイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_CpuClear16(u32 data, void *destp, s32 size);
//----------------------------------------------------------------------
// 16bitコピー
//
//・CPUにて16bit幅でコピーします。
//
//・引数:
// srcp ソースアドレス
// destp デスティネーションアドレス
// size 転送サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_CpuCopy16(const void *srcp, void *destp, s32 size);
//----------------------------------------------------------------------
// 32bitクリア
//
//・CPUにて32bitデータでクリアします。
//
//・引数:
// data クリアデータ
// destp デスティネーションアドレス
// size クリアサイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_CpuClear32(u32 data, void *destp, s32 size);
//----------------------------------------------------------------------
// 32bitコピー
//
//・CPUにて32bit幅でコピーします。
//
//・引数:
// srcp ソースアドレス
// destp デスティネーションアドレス
// size 転送サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_CpuCopy32(const void *srcp, void *destp, s32 size);
//----------------------------------------------------------------------
// 高速クリア
//
//・CPUにて32bitデータで高速にクリアします。
//・オーバーフローしない範囲では32Byte単位の複数ストア命令が使用されます。
//
//・引数:
// data クリアデータ
// destp デスティネーションアドレス
// size クリアサイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_CpuClearFast(u32 data, void *destp, s32 size);
//----------------------------------------------------------------------
// 高速コピー
//
//・CPUにて32bit幅で高速にコピーします。
//・オーバーフローしない範囲では32Byte単位の複数ロードストア命令が使用されます。
//
//・引数:
// srcp ソースアドレス
// destp デスティネーションアドレス
// size 転送サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_CpuCopyFast(const void *srcp, void *destp, s32 size);
//----------------------------------------------------------------------
// データのスワップ(ワード/バイト)
//
//・setDataとdestpが指す先のデータをスワップします。
//・プロセッサ間やモジュール間で共有リソースを排他制御するための
// スピンロック等を実現することができます。
//
//・引数:
// setData セットするデータ
// destp スワップ先のポインタ
//
//・戻り値:スワップ先へ直前に格納されていた値
//
//※但し、メインメモリに対してはキャッシュ経由でなければ
// バイトアクセスはできないことに注意して下さい。
// ですので、メインメモリ上では基本的に UTL_SwapWord() を使用して下さい。
//----------------------------------------------------------------------
s32 UTL_SwapWord(u32 setData, volatile u32 *destp);
u8 UTL_SwapByte(u32 setData, volatile u8 *destp);
//======================================================================
// 圧縮データ展開
//======================================================================
//----------------------------------------------------------------------
// Bit圧縮データ展開
//
//・0固定のビットを詰めたデータを展開します。
//・ソースアドレスにメインメモリを指定する場合は
// データキャッシュを有効にする必要があります。
//・デスティネーションアドレスは4Byte境界に合わせて下さい。
//
//・引数:
// void *srcp ソースアドレス
// void *destp デスティネーションアドレス
// UnPackBitsParam *paramp UnPackBitsParam構造体データのアドレス
//
//・UnPackBitsParam構造体
// u16 srcNum ソースデータ・バイト数
// u8 srcBitNum 1ソースデータ・ビット数
// u8 destBitNum 1デスティネーションデータ・ビット数
// u32 destOffset:31 ソースデータに加算するオフセット数
// destOffset0_On:1 0のデータにオフセットを加算するか否かのフラグ
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_UnPackBits(const void *srcp, void *destp, UnPackBitsParam *paramp);
//----------------------------------------------------------------------
// LZ77圧縮データ8bit展開
//
//・LZ77圧縮データを展開し、8bit単位で書き込みます。
//・ソースアドレス、デスティネーションアドレスともに、メインメモリを
// 指定する場合はデータキャッシュを有効にする必要があります。
//・VRAMに直接展開することはできません。
//・圧縮データのサイズが4の倍数にならなかった場合は
// 出来るだけ0で詰めて調整して下さい。
//・ソースアドレスは4Byte境界に合わせて下さい。
//
//・引数:
// void *srcp ソースアドレス
// void *destp デスティネーションアドレス
//
//・データヘッダ
// u32 :4 予約
// compType:4 圧縮タイプ( = 1
// destSize:24 展開後のデータサイズ
//
//・フラグデータフォーマット
// u8 flags 圧縮/無圧縮フラグ
// 0, 1 = (無圧縮データ, 圧縮データ)
//・コードデータフォーマットBig Endian
// u16 length:4 展開データ長 - 3一致長3Byte以上時のみ圧縮
// offset:12 一致データオフセット - 1
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_UnCompLZ77Byte(const void *srcp, void *destp);
//----------------------------------------------------------------------
// LZ77圧縮データ16bit展開
//
//・LZ77圧縮データを展開し、16bit単位で書き込みます。
//・データTCMやメインメモリにも展開できますが、UTL_UnCompLZ77Byte()
// より低速です。
//・ソースアドレスにメインメモリを指定する場合は
// データキャッシュを有効にする必要があります。
//・圧縮データは一致文字列を2Byte以前より検索したものにして下さい。
//・圧縮データのサイズが4の倍数にならなかった場合は
// 出来るだけ0で詰めて調整して下さい。
//・ソースアドレスは4Byte境界に合わせて下さい。
//
//・引数:
// void *srcp ソースアドレス
// void *destp デスティネーションアドレス
//
//・データヘッダ
// u32 :4 予約
// compType:4 圧縮タイプ( = 1
// destSize:24 展開後のデータサイズ
//
//・フラグデータフォーマット
// u8 flags 圧縮/無圧縮フラグ
// 0, 1 = (無圧縮データ, 圧縮データ)
//・コードデータフォーマットBig Endian
// u16 length:4 展開データ長 - 3一致長3Byte以上時のみ圧縮
// offset:12 一致データオフセット( >= 2 - 1
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_UnCompLZ77Short(const void *srcp, void *destp);
//----------------------------------------------------------------------
// ハフマン圧縮データ展開
//
//・ハフマン圧縮データを展開し、32bit単位で書き込みます。
//・ソースアドレスにメインメモリを指定する場合は
// データキャッシュを有効にする必要があります。
//・圧縮データのサイズが4の倍数にならなかった場合は
// 出来るだけ0で詰めて調整して下さい。
//・ソースアドレスは4Byte境界に合わせて下さい。
//
//・引数:
// void *srcp ソースアドレス
// void *destp デスティネーションアドレス
//
//・データヘッダ
// u32 bitSize:4 1データ・ビットサイズ(通常 4|8
// compType:4 圧縮タイプ( = 2
// destSize:24 展開後のデータサイズ
//
//・ツリーテーブル
// u8 treeSize ツリーテーブルサイズ/2 - 1
// TreeNodeData nodeRoot ルートノード
//
// TreeNodeData nodeLeft ルート左ノード
// TreeNodeData nodeRight ルート右ノード
//
// TreeNodeData nodeLeftLeft 左左ノード
// TreeNodeData nodeLeftRight 左右ノード
//
// TreeNodeData nodeRightLeft 右左ノード
// TreeNodeData nodeRightRight 右右ノード
//
// ・
// ・
//
// この後に圧縮データ本体
//
//・TreeNodeData構造体
// u8 nodeNextOffset:6 次ノードデータへのオフセット - 12Byte単位
// rightEndFlag:1 右ノード終了フラグ
// leftEndzflag:1 左ノード終了フラグ
// 終了フラグがセットされている場合
// 次ノードにデータがある
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_UnCompHuffman(const void *srcp, void *destp);
//----------------------------------------------------------------------
// ランレングス圧縮データ8bit展開
//
//・ランレングス圧縮データを展開し、8bit単位で書き込みます。
//・ソースアドレス、デスティネーションアドレスともに、メインメモリを
// 指定する場合はデータキャッシュを有効にする必要があります。
//・VRAMに直接展開することはできません。
//・圧縮データのサイズが4の倍数にならなかった場合は
// 出来るだけ0で詰めて調整して下さい。
//・ソースアドレスは4Byte境界に合わせて下さい。
//
//・引数:
// void *srcp ソースアドレス
// void *destp デスティネーションアドレス
//
//・データヘッダ
// u32 :4 予約
// compType:4 圧縮タイプ( = 3
// destSize:24 展開後のデータサイズ
//
//・フラグデータフォーマット
// u8 length:7 展開データ長 - 1無圧縮時
// 展開データ長 - 3連続長3Byte以上時のみ圧縮
// flag:1 0, 1 = (無圧縮データ, 圧縮データ)
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_UnCompRLByte(const void *srcp, void *destp);
//----------------------------------------------------------------------
// ランレングス圧縮データ16bit展開
//
//・ランレングス圧縮データを展開し、16bit単位で書き込みます。
//・データTCMやメインメモリにも展開できますが、UTL_UnCompRLByte()
// より低速です。
//・ソースアドレスにメインメモリを指定する場合は
// データキャッシュを有効にする必要があります。
//・圧縮データのサイズが4の倍数にならなかった場合は
// 出来るだけ0で詰めて調整して下さい。
//・ソースアドレスは4Byte境界に合わせて下さい。
//
//・引数:
// void *srcp ソースアドレス
// void *destp デスティネーションアドレス
//
//・データヘッダ
// u32 :4 予約
// compType:4 圧縮タイプ( = 3
// destSize:24 展開後のデータサイズ
//
//・フラグデータフォーマット
// u8 length:7 展開データ長 - 1無圧縮時
// 展開データ長 - 3連続長3Byte以上時のみ圧縮
// flag:1 0, 1 = (無圧縮データ, 圧縮データ)
//
//・戻り値:なし
//----------------------------------------------------------------------
void UTL_UnCompRLShort(const void *srcp, void *destp);
#ifdef __cplusplus
}
#endif
#endif // _IRIS_UTL_H