# MI_CpuFill*

## 構文

  `#include <nitro/mi.h>`
  `void MI_CpuFill8( void* dest, u8 data, u32 size );`
  `void MI_CpuFill16( void* dest, u16 data, u32 size );`
  `void MI_CpuFill32( void* dest, u32 data, u32 size );`
  `void MI_CpuFillFast( void* dest, u32 data, u32 size );`
  `void MI_CpuFill( void* dest, u8 data, u32 size );`

## 引数

dest | 転送先アドレス
data | 転送データ
size | 転送サイズ

## 返り値

なし。

## 説明

CPUでメモリを指定のデータで埋めます。

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

`MI_CpuFill16()` は 16ビット単位でメモリを指定のデータで埋めます。転送先アドレスは2バイトアラインメントする必要があります。

`MI_CpuFill32()` は 32ビット単位でメモリを指定のデータで埋めます。転送先アドレスは4バイトアラインメントする必要があります。

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

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

## 内部動作

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

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

## 参照

`MI_CpuCopy*, MI_CpuClear*, MI_CpuSend*, MI_DmaFill*`

## 履歴

2008/09/01 MI_CpuFill を追加
2004/04/29 `MI_CpuFill8` の記述を追加
2004/03/29 システムコールを使用しないと記述
2003/12/01 初版