# MI_CpuClear*

## 構文

  `#include <nitro/mi.h>`
  `void MI_CpuClear8( void* dest, u32 size );`
  `void MI_CpuClear16( void* dest, u32 size );`
  `void MI_CpuClear32( void* dest, u32 size );`
  `void MI_CpuClearFast( void* dest, u32 size );`
  `void MI_CpuClear( void* dest, u32 size );`

## 引数

dest | クリア先アドレス
size | クリアサイズ

## 返り値

なし。

## 説明

CPUでメモリをゼロクリアします。

`MI_CpuClear8()` は転送先アドレスから判断してできるだけ効率的なメモリアクセスを選択し、適宜 16ビットおよび 32ビット単位でメモリを0で埋めます。クリア先アドレスのアラインメントを考慮する必要はありません。

`MI_CpuClear16()` は 16ビット単位でメモリを0で埋めます。クリア先アドレスは2バイトアラインメントする必要があります。

`MI_CpuClear32()` は 32ビット単位でメモリを0で埋めます。クリア先アドレスは4バイトアラインメントする必要があります。

`MI_CpuClearFast()` は 32バイト単位で高速に0で埋めます。クリア先アドレスは4バイトアラインメントする必要があります。クリアサイズは4の整数倍バイトである必要があります。(32の倍数である必要はありません)

`MI_CpuClear()` は `MI_CpuClear8()` と同様に転送先アドレスから判断してできるだけ効率的なメモリアクセスを選択し、適宜 16ビットおよび 32ビット単位でメモリを0で埋めます。クリア先アドレスのアラインメントを考慮する必要はありません。アラインメントやクリアサイズが不定の場合以外は `MI_CpuClearFast()` や `MI_CpuClear32()` を呼び分けることが推奨されます。

## 内部動作

DMAコントローラは使用せず、CPUだけで処理します。システムコールは使用しません。
`MI_CpuClear8()` に関しても16/32ビット単位でクリアが行なわれますので、直接VRAMへアクセスする場合でも問題は発生しません。

`MI_CpuClear()` は、対象アドレスによっては8ビット単位でクリアを行う事がありますので、直接VRAMへアクセスする場合には使用しないで下さい。(TWL モードで、VRAM 拡張が行われている場合は使用することが可能です)

## 参照

`MI_CpuCopy*, MI_CpuFill*, MI_CpuSend*, MI_DmaClear*
`

## 履歴

2008/09/01 MI_CpuClear を追加
2005/07/07 `MI_CpuClearFast` のクリアサイズについて追記
2004/04/29 `MI_CpuClear8` の記述を追加
2004/03/29 システムコールを使用しないと記述
2003/12/01 初版