# MI_ReserveWram*

## 構文

  `#include <twl/mi.h>`
  `u32 MI_ReserveWram( MIWramPos wram, MIWramSize size, MIWramProc proc )`
  `u32 MI_ReserveWramSlot( MIWramPos wram, int slot, MIWramSize size, MIWramProc proc )`
  `(#define)
  #define MI_ReserveWram_A( size, proc )
  #define MI_ReserveWram_B( size, proc )
  `
  `#define MI_ReserveWram_C( size, proc )`
  `#define MI_ReserveWramSlot_A( slot, size, proc )`
  `#define MI_ReserveWramSlot_B( slot, size, proc )`
  `#define MI_ReserveWramSlot_C( slot, size, proc )`

## 引数

wram | 予約する対象 WRAM
slot | slot 番号
size | 予約する大きさ
proc | 予約するプロセッサ

## 返り値

予約できた場合、先頭アドレスが返ります。
予約できなかった場合、0が返ります。

## 説明

WRAM を、指定のプロセッサ用に予約します。

「実際に確保したり使用するのはまだ先だけどあるプロセッサ用にWRAMを予約しておきたい」という場合にこの関数を呼んで下さい。呼び出すそのコードが動作しているプロセッサと異なるプロセッサ用に予約しても構いません( つまり、例えば ARM9 から ARM7用に予約することが出来ます)。

wram は対象となる WRAM を表します。`MIWramPos`型で、`MI_WRAM_A`, `MI_WRAM_B`, `MI_WRAM_C` のいずれかとなります。

slot は場所を指定する際の、先頭スロット番号です。

size は予約する大きさです。`MIWramSize`型で、`MI_WRAM_SIZE_32KB` 〜 `MI_WRAM_SIZE_256KB` のいずれかとなります。WRAM はスロットごとに予約対象を区切ることが可能で、WRAM-A は64KB ごと、WRAM-B と WRAM-C は 32KB ごととなります。

proc はどのプロセッサ用に予約するかを表します。`MIWramProc`型で、`MI_WRAM_ARM9`, `MI_WRAM_ARM7`, `MI_WRAM_DSP` のいずれかとなります。

WRAM の予約は、`MI_ReserveWram()` の場合、対象WRAM の使用されていない連続したスロットのなかから要求サイズを満たして連続しているものを下位アドレス側から探します。みつかればすぐに関数から返ります。`MI_ReserveWramSlot()` の場合はユーザが位置を指定します。1スロットでも予約の出来ない領域があれば失敗となります。

関数の返り値は、予約できた場合はその先頭アドレスが返ります。出来なかった場合は、0を返します。

予約された領域は、その予約プロセッサからしか確保されません。それ以外のプロセッサが領域を確保することはありません。

`MI_ReserveWram_A` は `MI_ReserveWram( MI_WRAM_A, ... )` の define です。
`MI_ReserveWram_B` は `MI_ReserveWram( MI_WRAM_B, ... )` の define です。
`MI_ReserveWram_C` は `MI_ReserveWram( MI_WRAM_C, ... )` の define です。
`MI_ReserveWramSlot_A` は `MI_ReserveWramSlot( MI_WRAM_A, ... )` の define です。
`MI_ReserveWramSlot_B` は `MI_ReserveWramSlot( MI_WRAM_B, ... )` の define です。
`MI_ReserveWramSlot_C` は `MI_ReserveWramSlot( MI_WRAM_C, ... )` の define です。

予約を取り消すときは `MI_CancelWram*()` を呼んで下さい。

(例) WRAM-C から DSP 用に、64KB を予約する。

`MI_ReserveWram( MI_WRAM_C, MI_WRAM_SIZE_64KB, MI_WRAM_DSP );`
または
`MI_ReserveWram_C( MI_WRAM_SIZE_64KB, MI_WRAM_DSP );`

## 参照

概要(ワークRAM)、MI関連の定数

## 履歴

2007/08/20 初版