# MI_CpuMove*

## 構文

  `#include <nitro/mi.h>`
  `void MI_CpuMove16( const void* src, void* dest, u32 size );`
  `void MI_CpuMove32( const void* src, void* dest, u32 size );`
  `void MI_CpuMoveFast( const void* src, void* dest, u32 size );`
  `void MI_CpuMove( const void* src, void* dest, u32 size );`

## 引数

src | 転送元アドレス
dest | 転送先アドレス
size | 転送サイズ

## 返り値

なし。

## 説明

CPUでデータの移動を行います。 転送元領域と転送先領域が重なっていても正しくデータの移動を行うことができます。

`MI_CpuMove16()` は 16ビット単位で移動を行います。転送元アドレス、転送先アドレスは2バイトアラインメントする必要があります。

`MI_CpuMove32()` は 32ビット単位で移動を行います。転送元アドレス、転送先アドレスは4バイトアラインメントする必要があります。

`MI_CpuMoveFast()` は 32バイト単位で高速に移動を行います。転送元アドレス、転送先アドレスは4バイトアラインメントする必要があります。転送サイズは4の整数倍バイトである必要があります。32の整数倍バイトである必要はありません。32バイト単位で転送した後の端数分は`MI_CpuMove32()` と同じ処理を行ないます。

`MI_CpuMove()` は転送先アドレスから判断してできるだけ効率的な方法を選択し、適宜 8, 16, 32 ビット単位で移動を行うのに加え 32バイト単位での移動も行います。転送元アドレス、転送先アドレスのアラインメントや転送サイズに制限はありません。

## 内部動作

DMAコントローラは使用せず、CPUだけで処理します。システムコールは使用しません。
`MI_CpuMove()`は、対象アドレスによっては8ビット単位で移動を行う事がありますので、NITRO モードの場合や、TWLモードでも VRAM に対して Byte Write の拡張を行っていないときには直接VRAMへアクセスする場合に使用しないで下さい。

## 参照

`MI_CpuCopy*, MI_CpuFill*, MI_CpuClear*, MI_CpuSend*, MI_DmaCopy*
`

## 履歴

2007/12/10 初版