# メモリインターフェイス(MI) API 機能一覧

### 初期化

MI_Init |  | MI ライブラリの初期化を行います。

### CPUによるメモリ操作

MI_CpuCopy* |  | データをコピーします。
MI_CpuMove* |  | データを移動します。
MI_CpuFill* |  | メモリを指定のデータで埋めます。
MI_CpuClear* |  | メモリをゼロクリアします。
MI_CpuSend* |  | アドレスを固定してデータを送り込みます。
MI_CpuRecv* |  | 固定のアドレスからデータを読み込みます。
MI_CpuPipe* |  | 固定のアドレスから固定のアドレスへデータを送ります。
MI_CpuFind* |  | メモリから指定のデータを探します。
MI_CpuComp* |  | データを比較します。

### DMAによるメモリ操作

MI_DmaCopy* |  | データをコピーします。
MI_NDmaCopy* |  | データをコピーします。
MI_DmaFill* |  | メモリを指定のデータで埋めます。
MI_NDmaFill* |  | メモリを指定のデータで埋めます。
MI_DmaClear* |  | メモリをゼロクリアします。
MI_NDmaClear* |  | メモリをゼロクリアします。
MI_DmaSend* |  | アドレスを固定してデータを送り込みます。
MI_NDmaSend* |  | アドレスを固定してデータを送り込みます。
MI_DmaRecv* |  | 固定アドレスからデータを読み込みます。
MI_NDmaRecv* |  | 固定アドレスからデータを読み込みます。
MI_DmaPipe* |  | 固定アドレスから固定アドレスへデータを送ります。
MI_NDmaPipe* |  | 固定アドレスから固定アドレスへデータを送ります。
MI_DmaRestart |  | 設定済みのDMAを開始します。
MI_NDmaRestart |  | 設定済みのDMAを開始します。
MI_HBlankDmaCopy* |  | HブランクDMAコピーの設定を行います。
MI_HBlankNDmaCopy* |  | HブランクDMAコピーの設定を行います。
MI_VBlankDmaCopy* |  | VブランクDMAコピーの設定を行います。
MI_VBlankNDmaCopy* |  | VブランクDMAコピーの設定を行います。
MI_DispMemDmaCopy |  | メインメモリ表示DMAコピーの設定を行います。
MI_SendGXCommand* |  | コマンドFIFOにDMAでジオメトリコマンドを送ります。
MI_SendNDmaGXCommand* |  | コマンドFIFOにDMAでジオメトリコマンドを送ります。
MI_TimerNDmaCopy |  | タイマー起動DMAコピーの設定を行います。
MI_Card_NDmaCopy |  | メモリカード転送起動DMAコピーの設定を行います。
MI_IsDmaBusy |  | 指定のDMAチャンネルが使用中かを調べます。
MI_IsNDmaBusy |  | 指定のDMAチャンネルが使用中かを調べます。
MI_WaitDma |  | 指定のDMAの終了を待ちます。
MI_WaitNDma |  | 指定のDMAの終了を待ちます。
MI_StopDma |  | 指定のDMAをストップします。
MI_StopNDma |  | 指定のDMAをストップします。
MI_StopAllDma |  | 全てのDMAをストップします。(従来のDMA)
MI_StopAllNDma |  | 全てのDMAをストップします。(新規DMA)
MI_SetNDmaArbitrament |  | 新規DMAの調停方式を設定します。
MI_GetNDmaArbitramentMode |  | 新規DMAの調停方式を取得します。
MI_GetNDmaArbitramentRoundRobinCycle |  | 新規DMAの調停方式がラウンドロビン時のARM7実行可能サイクルを取得します。
MI_InitNDmaConfig |  | 新規DMAの動作を制御するconfigを初期化します。
MI_GetNDmaConfig |  | 新規DMAのconfig を取得します。
MI_SetNDmaConfig |  | 新規DMAのconfig を設定します。
MI_SetNDmaInterval |  | 指定config に Interval情報を設定します。
MI_GetNDmaIntervalTimer |  | 指定config の IntervalTimer情報を取得します。
MI_GetNDmaIntervalPrescaler |  | 指定config の IntervalPrescaler 情報を取得します。
MI_SetNDmaBlockWord |  | 指定config の BlockWord 情報を設定します。
MI_GetNDmaBlockWord |  | 指定config の BlockWord 情報を取得します。
MI_SetNDmaWordCount |  | 指定config の WordCount 情報を設定します。
MI_GetNDmaWordCount |  | 指定config の WordCount 情報を取得します。

### 外部メモリ制御

MI_SetMainMemoryPriority |  | メインメモリへのアクセス優先権を設定します。
MI_GetMainMemoryPriority |  | メインメモリへのアクセス優先権の設定を取得します。
MI_GetCardProcessor |  | カードへのアクセス権の設定を取得します。
MI_GetCartridgeProcessor |  | カートリッジへのアクセス権の設定を取得します。
MI_SetCartridgeRomCycle1st |  | カートリッジROM領域への1stアクセスサイクルを設定します。
MI_GetCartridgeRomCycle1st |  | カートリッジROM領域への1stアクセスサイクルの設定を取得します。
MI_SetCartridgeRomCycle2nd |  | カートリッジROM領域への2ndアクセスサイクルを設定します。
MI_GetCartridgeRomCycle2nd |  | カートリッジROM領域への2ndアクセスサイクルの設定を取得します。
MI_SetCartridgeRamCycle |  | カートリッジRAM領域のアクセスサイクルを設定します。
MI_GetCartridgeRamCycle |  | カートリッジRAM領域のアクセスサイクルの設定を取得します。
MI_SetAgbCartridgeFastestRomCycle |  | AGBカートリッジROM領域への高速なアクセスサイクルを設定します。

### ワークRAM設定

MI_SetWramBank |  | この関数はシステムでのみ使用されます。
MI_GetWramBankMaster* |  | 共用WRAM(256KBx3) に割り当たっているマスタープロセッサを取得します。
MI_GetWramBankOffset* |  | 共用WRAM(256KBx3) のバンクのオフセット位置を取得します。
MI_GetWramBankEnable* |  | 共用WRAM(256KBx3) のバンクが使用可能かどうかを取得します。
MI_GetWramMapStart* |  | 共用WRAM(256KBx3) の開始アドレスを取得します。
MI_GetWramMapEnd* |  | 共用WRAM(256KBx3) の終了アドレスを取得します。
MI_GetWramMapImage* |  | 共用WRAM(256KBx3) のイメージ出現設定を取得します。
MI_IsWramSlotLocked* |  | 共用WRAM(256KBx3) のスロットがロックされているかを調べます。
MI_GetAllocatableWramSlot* |  | 共用WRAM(256KBx3) で指定プロセッサが割り当て可能なスロットを取得します。
MI_GetFreeWramSlot* |  | 共用WRAM(256KBx3) で予約も割り当てもされていないスロットを取得します。
MI_GetUsedWramSlot* |  | 共用WRAM(256KBx3) で割り当てがされているスロットを取得します。
MI_GetWramReservation* |  | 共用WRAM(256KBx3) のスロットを予約しているプロセッサを取得します。
MI_IsWramSlotUsed* |  | 共用WRAM(256KBx3) のスロットが割り当てられているかを取得します。
MI_InitWramManager |  | 共用WRAM(256KBx3) マネージャを初期化します。
MI_AllocWram* |  | 共用WRAM(256KBx3) マネージャに、WRAMを割り当てを要求します。
MI_FreeWram* |  | 共用WRAM(256KBx3) マネージャに、WRAMの割り当て解放を伝えます。
MI_SwitchWram* |  | 共用WRAM(256KBx3) マネージャに、割り当て済みWRAMのマスター変更を通知します。
MI_ReserveWram* |  | 共用WRAM(256KBx3) マネージャに、WRAMのプロセッサでの予約を通知します。
MI_CancelWram* |  | 共用WRAM(256KBx3) マネージャに、WRAMのプロセッサの予約キャンセルを通知します。
MI_DumpWramList* |  | 共用WRAM(256KBx3) マネージャのWRAM割り当て状況を表示します。
MI_DumpWramListAll |  | 共用WRAM(256KBx3) マネージャのすべてのWRAM割り当て状況を表示します。

### メモリスワップ

MI_SwapByte |  | 指定のバイトデータとメモリデータをスワップします。
MI_SwapWord |  | 指定のワードデータとメモリデータをスワップします。

### 圧縮データ展開

MI_UnpackBits |  | 0固定のビットを詰めたデータを展開します。
MI_UncompressLZ8 |  | LZ77圧縮データを8bit単位で展開します。
MI_UncompressLZ16 |  | LZ77圧縮データを16bit単位で展開します。
MI_UncompressHuffman |  | ハフマン圧縮データを32bit単位で展開します。
MI_UncompressRL8 |  | ランレングス圧縮データを8bit単位で展開します。
MI_UncompressRL16 |  | ランレングス圧縮データを16bit単位で展開します。
MI_UncompressRL32 |  | ランレングス圧縮データを32bit単位で展開します。
MI_UnfilterDiff8 |  | 差分フィルタをかけられたデータを8bit単位で展開します。
MI_UnfilterDiff16 |  | 差分フィルタをかけられたデータを16bit単位で展開します。
MI_UnfilterDiff32 |  | 差分フィルタをかけられたデータを32bit単位で展開します。
MI_SecureUncompressAny |  | データヘッダから圧縮タイプを判別して、適当な展開処理を実行します。(バッファオーバーランチェック有)
MI_SecureUncompressRL |  | ランレングス圧縮データを一度に展開します。(バッファオーバーランチェック有)
MI_SecureUncompressLZ |  | LZ77圧縮データを一度に展開します。(バッファオーバーランチェック有)
MI_SecureUncompressBLZ |  | BLZ圧縮データを一度に展開します。(バッファオーバーランチェック有)
MI_SecureUncompressHuffman |  | ハフマン圧縮データを一度に展開します。(バッファオーバーランチェック有)
MI_SecureUnfilterDiff |  | 差分フィルタをかけられたデータを展開します。(バッファオーバーランチェック有)
MI_GetUncompressedSize |  | 圧縮データの展開後サイズを取得します。
MI_GetCompressionType |  | 圧縮データの圧縮形式を取得します。
MI_InitUncompContextRL |  | ランレングス圧縮のストリーミング展開コンテキストを初期化します。
MI_InitUncompContextLZ |  | LZ77圧縮のストリーミング展開コンテキストを初期化します。
MI_InitUncompCOntextHuffman |  | ハフマン圧縮のストリーミング展開コンテキストを初期化します。
MI_ReadUncompRL* |  | ランレングス圧縮のストリーミング展開を実行します。
MI_ReadUncompLZ* |  | LZ77圧縮のストリーミング展開を実行します。
MI_ReadUncompHuffman |  | ハフマン圧縮のストリーミング展開を実行します。
MI_CompressRL |  | データをランレングス圧縮します。
MI_CompressLZ |  | データをLZ77圧縮します。
MI_CompressLZFast |  | データをLZ77圧縮します。 ワークバッファを必要とする代わりに高速に処理をおこないます。
MI_CompressHuffman |  | データをハフマン圧縮します。
MI_FilterDiff* |  | 差分フィルタをかけたデータを作成します。

### バイトアクセス

MI_ReadByte |  | バイトデータをメモリから読み出します。 この関数は互換のために残されていますが使用しないでください。
MI_WriteByte |  | バイトデータをメモリに書き込みます。 この関数は互換のために残されていますが使用しないでください。

### エンディアンを考慮するメモリアクセス

MI_SwapEndian8 |  | 8bit値のエンディアンを反転するマクロです。 実際には何の変換も行いませんが、 ソースコードの視認性を統一するために用意されています。
MI_SwapEndian16 |  | 16bit値のエンディアンを反転するマクロです。
MI_SwapEndian32 |  | 32bit値のエンディアンを反転するマクロです。
MI_SwapEndian64 |  | 64bit値のエンディアンを反転するマクロです。
MI_HToLE8 |  | 8bit値を現在の環境からリトルエンディアンへ変換するマクロです。 実際には何の変換も行いませんが、 ソースコードの視認性を統一するために用意されています。
MI_HToLE16 |  | 16bit値を現在の環境からリトルエンディアンへ変換するマクロです。
MI_HToLE32 |  | 32bit値を現在の環境からリトルエンディアンへ変換するマクロです。
MI_HToLE64 |  | 64bit値を現在の環境からリトルエンディアンへ変換するマクロです。
MI_HToBE8 |  | 8bit値を現在の環境からビッグエンディアンへ変換するマクロです。 実際には何の変換も行いませんが、 ソースコードの視認性を統一するために用意されています。
MI_HToBE16 |  | 16bit値を現在の環境からビッグエンディアンへ変換するマクロです。
MI_HToBE32 |  | 32bit値を現在の環境からビッグエンディアンへ変換するマクロです。
MI_HToBE64 |  | 64bit値を現在の環境からビッグエンディアンへ変換するマクロです。
MI_LEToH8 |  | 8bit値をリトルエンディアンから現在の環境へ変換するマクロです。 実際には何の変換も行いませんが、 ソースコードの視認性を統一するために用意されています。
MI_LEToH16 |  | 16bit値をリトルエンディアンから現在の環境へ変換するマクロです。
MI_LEToH32 |  | 32bit値をリトルエンディアンから現在の環境へ変換するマクロです。
MI_LEToH64 |  | 64bit値をリトルエンディアンから現在の環境へ変換するマクロです。
MI_BEToH8 |  | 8bit値をビッグエンディアンから現在の環境へ変換するマクロです。 実際には何の変換も行いませんが、 ソースコードの視認性を統一するために用意されています。
MI_BEToH16 |  | 16bit値をビッグエンディアンから現在の環境へ変換するマクロです。
MI_BEToH32 |  | 32bit値をビッグエンディアンから現在の環境へ変換するマクロです。
MI_BEToH64 |  | 64bit値をビッグエンディアンから現在の環境へ変換するマクロです。
MI_LoadLE8 |  | 指定のアドレスから8bit値をリトルエンディアンとして読み出します。
MI_LoadLE16 |  | 指定のアドレスから16bit値をリトルエンディアンとして読み出します。
MI_LoadLE32 |  | 指定のアドレスから32bit値をリトルエンディアンとして読み出します。
MI_LoadLE64 |  | 指定のアドレスから64bit値をリトルエンディアンとして読み出します。
MI_LoadBE8 |  | 指定のアドレスから8bit値をビッグエンディアンとして読み出します。
MI_LoadBE16 |  | 指定のアドレスから16bit値をビッグエンディアンとして読み出します。
MI_LoadBE32 |  | 指定のアドレスから32bit値をビッグエンディアンとして読み出します。
MI_LoadBE64 |  | 指定のアドレスから64bit値をビッグエンディアンとして読み出します。
MI_StoreLE8 |  | 8bit値をリトルエンディアンとして指定のアドレスへ書き込みます。
MI_StoreLE16 |  | 16bit値をリトルエンディアンとして指定のアドレスへ書き込みます。
MI_StoreLE32 |  | 32bit値をリトルエンディアンとして指定のアドレスへ書き込みます。
MI_StoreLE64 |  | 64bit値をリトルエンディアンとして指定のアドレスへ書き込みます。
MI_StoreBE8 |  | 8bit値をビッグエンディアンとして指定のアドレスへ書き込みます。
MI_StoreBE16 |  | 16bit値をビッグエンディアンとして指定のアドレスへ書き込みます。
MI_StoreBE32 |  | 32bit値をビッグエンディアンとして指定のアドレスへ書き込みます。
MI_StoreBE64 |  | 64bit値をビッグエンディアンとして指定のアドレスへ書き込みます。

### ユーティリティ

MI_InitAllocator |  | メモリアロケータ構造体を初期化します。
MI_CallAlloc |  | アロケータからメモリを確保します。
MI_CallFree |  | アロケータへメモリを解放します。
MI_InitDevice |  | デバイスインタフェース構造体を初期化します。
MI_ReadDevice |  | デバイスからデータを読み込みます。
MI_WriteDevice |  | デバイスへデータを書き込みます。
MI_InitCache |  | キャッシュ構造体を初期化します。
MI_ReadCache |  | キャッシュページリストからデータを読み込みます。
MI_LoadCache |  | ロード待ち状態の全てのページをロードします。
MI_IsCacheLoading |  | ロード待ち状態のページが存在するかどうか判定します。

### 型・構造体

MICompressionHeader |  | 圧縮データのヘッダ情報構造体です。
MIUncompContextRL |  | ランレングス圧縮のストリーミング展開を行なう際の、コンテキスト構造体です。
MIUncompContextLZ |  | LZ77圧縮のストリーミング展開を行なう際の、コンテキスト構造体です。
MIUncompContextHuffman |  | ハフマン圧縮のストリーミング展開を行なう際の、コンテキスト構造体です。
MIAllocator |  | メモリアロケータのインタフェース構造体です。
MIAllocatorAllocFunction |  | メモリ確保コールバックの関数プロトタイプです。
MIAllocatorFreeFunction |  | メモリ解放コールバックの関数プロトタイプです。
MIDevice |  | デバイス制御をラップするためのインタフェース構造体です。
MIDeviceReadFunction |  | デバイス読み込みコールバックの関数プロトタイプです。
MIDeviceWriteFunction |  | デバイス書き込みコールバックの関数プロトタイプです。
MICache |  | メモリキャッシュを実現するための構造体です。
MINDmaConfig |  | 新規DMAの動作を指定するための構造体です。