Skip to content

Latest commit

 

History

History
54 lines (35 loc) · 2.04 KB

memcpy.md

File metadata and controls

54 lines (35 loc) · 2.04 KB

メモリのコピー

CPUFastSet, CPUSet

CPUFastSet: swi 0x0c

32バイト単位でのメモリコピー・メモリ埋めをおこないます。

メモリコピーは LDMIA/STMIA [Rb]!,r2-r9 を繰り返し行うことでコピーをします。

メモリ埋めは STMIA [Rb]!,r2-r9を繰り返した後でLDRを1回します。

処理サイズはワード単位によって指定されています。つまり処理サイズのバイト数を4で割った値です。

GBAの場合、処理サイズは8ワード単位、つまりバイト数が32の倍数であることが望ましいです。そうでない場合は強制的に処理サイズを切り上げします。

引数:
  r0: ソースアドレス
  r1: ターゲットアドレス
  r2: サイズ/モード
    Bit0-20: 処理サイズ(ワード単位)
    Bit24: モード(0=Copy, 1=アドレスr0に格納された値でFill)

戻り値: なし

CPUSet: swi 0x0b

2または4バイト単位でのメモリコピー・メモリ埋めをおこないます。

メモリコピーはLDMIA/STMIA [Rb]!,r3 または LDRH/STRH r3,[r0,r5] を繰り返すことで行われています。

メモリ埋めはSTMIA [Rb]!,r3STRH r3,[r0,r5] を繰り返した後に LDMIALDRH を行うことでメモリ埋めをおこないます。

処理サイズのバイト長は4バイト(32bitモード)か2バイト(16bitモード)の倍数である必要があります。

r2の処理サイズは32bitモードならワード単位、16bitモードならハーフワード単位であることに注意してください。

引数:
  r0: ソースアドレス
  r1: ターゲットアドレス
  r2: サイズ/モード/処理単位
    Bit0-20: 処理サイズ(ワード/ハーフワード単位)
    Bit24: モード(0=Copy, 1=アドレスr0に格納された値でFill)
    Bit26: 処理単位(0=16bit, 1=32bit)

戻り値: なし

注意

CPUFastSetもCPUSetもコピー元、コピー先のどちらかがBIOS領域に到達すると特に通知せずに終了します。