mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
358 lines
12 KiB
C
358 lines
12 KiB
C
//====================================================================
|
||
// 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>
|
||
|
||
|
||
|
||
//======================================================================
|
||
// クリア & コピー
|
||
//======================================================================
|
||
|
||
//----------------------------------------------------------------------
|
||
// CPU 16bitクリア
|
||
//
|
||
//・CPUにて16bitデータでクリアします。
|
||
//
|
||
//・引数:
|
||
// data クリアデータ
|
||
// destp デスティネーションアドレス
|
||
// size クリアサイズ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void UTL_CpuClear16(u32 data, void *destp, s32 size);
|
||
|
||
//----------------------------------------------------------------------
|
||
// CPU 16bitコピー
|
||
//
|
||
//・CPUにて16bit幅でコピーします。
|
||
//
|
||
//・引数:
|
||
// srcp ソースアドレス
|
||
// destp デスティネーションアドレス
|
||
// size 転送サイズ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void UTL_CpuCopy16(const void *srcp, void *destp, s32 size);
|
||
|
||
//----------------------------------------------------------------------
|
||
// CPU 32bitクリア
|
||
//
|
||
//・CPUにて32bitデータでクリアします。
|
||
//
|
||
//・引数:
|
||
// data クリアデータ
|
||
// destp デスティネーションアドレス
|
||
// size クリアサイズ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void UTL_CpuClear32(u32 data, void *destp, s32 size);
|
||
|
||
//----------------------------------------------------------------------
|
||
// CPU 32bitコピー
|
||
//
|
||
//・CPUにて32bit幅でコピーします。
|
||
//
|
||
//・引数:
|
||
// srcp ソースアドレス
|
||
// destp デスティネーションアドレス
|
||
// size 転送サイズ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void UTL_CpuCopy32(const void *srcp, void *destp, s32 size);
|
||
|
||
//----------------------------------------------------------------------
|
||
// CPU 高速クリア
|
||
//
|
||
//・CPUにて32bitデータで高速にクリアします。
|
||
//・オーバーフローしない範囲では32Byte単位の複数ストア命令が使用されます。
|
||
//
|
||
//・引数:
|
||
// data クリアデータ
|
||
// destp デスティネーションアドレス
|
||
// size クリアサイズ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void UTL_CpuClearFast(u32 data, void *destp, s32 size);
|
||
|
||
//----------------------------------------------------------------------
|
||
// CPU 高速コピー
|
||
//
|
||
//・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 次ノードデータへのオフセット - 1(2Byte単位)
|
||
// 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
|
||
|