C.Basic - Memory Accsess Commands

  Enterance > English Top > C.Basic > Reference > Memory Access Commands

Memory Access in C.Basic

C.Basicではメモリ上のSH3/SH4Aのマシン語プログラムを実行できます。
現状、自由にアクセス出来るメモリは行列として確保したエリアだけとなっています。
行列の先頭アドレスはVarPtr()もしくはアドレス演算子&で求められます。
C言語同様にアドレス演算子&、間接演算子*も使えます。

VarPtr(

(説明)変数、行列のアドレスを返す関数です。
アドレス演算子&で置き換えることが出来ます。
(書式1)VarPtr(変数)
(書式2)&(変数)
(例)VarPtr(A%)
(例)&A%
 整数変数A%の変数のアドレスが返ります。
(例)VarPtr(Mat A)
(例)&Mat A
 行列Aの先頭アドレスが返ります。
(例)VarPtr(Mat A[20,10])
(例)&Mat A[20,10]
 行列A[20,10]の値が格納されているアドレスが返ります。

ProgPtr()

(説明)プログラムのアドレスを返す関数です。
(例)ProgPtr()
 現在のプログラムが格納されているアドレスを返します。

SysCall()

(説明)OSで用意されているシステムルーチンを呼び出す関数です。引数は4つまでです。引数は省略できます。
(書式)SysCall( システムコール番号 [,引数1][,引数2][,引数3][,引数4] )
(例)SysCall( 0x763,A,B,C,D )→R
 A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、システムコール0x30を呼び出し返り値がRに入ります。
 システムコール0x30はSDKのBdisp_DrawLineVRAMと同じです。

Call()

(説明)任意のアドレスのマシン語プログラムを実行する関数です。引数は4つまでです。引数は省略できます。
(書式)Call(マシン語アドレス [,引数1][,引数2][,引数3][,引数4] )
(例)Call( 0x8802F000,A,B,C,D )→R
 A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、0x8802F000番地にあるマシン語プログラムを呼び出し返り値がRに入ります。

Peek(

(説明)メモリのデータを読み出す関数です。型指定[.B][.W][.L][.F]が無い場合はバイト読み出しです。
間接演算子*で置き換えることが出来ます。
(書式)Peek( アドレス )[.B][.W][.L][.F]
(書式)*( アドレス )[.B][.W][.L][.F]
(例)Peek(0x8802E000).B→A%
(例)*(0x8802E000).B→A%
 0x8802E000番地の内容をバイト(1バイト)で読み出し、整数変数A%に代入します。
(例)Peek(0x8802E000).W→A%
(例)*(0x8802E000).W→A%
 0x8802E000番地の内容をワード(2バイト)で読み出し、整数変数A%に代入します。
(例)Peek(0x8802E000).L→A%
(例)*(0x8802E000).L→A%
 0x8802E000番地の内容をロングワード(4バイト)で読み出し、整数変数A%に代入します。
(例)Peek(0x8802E000).F→A
(例)*(0x8802E000).F→A
 0x8802E000番地の内容を倍精度実数(8バイト)で読み出し、変数Aに代入します。

Poke(

(説明)メモリにデータを書き込みます。型指定[.B][.W][.L][.F]が無い場合はバイト書き込みです。
間接演算子*で置き換えることが出来ます。
(書式1)Poke( アドレス )[.B][.W][.L][.F] , データ
(書式1)*( アドレス )[.B][.W][.L][.F] , データ
(書式2)データ→Poke( アドレス )[.B][.W][.L][.F]
(書式2)データ→*( アドレス )[.B][.W][.L][.F]
(例)Poke(0x8802E000).B,A%
(例)A%→Poke(0x8802E000).B
(例)A%→*(0x8802E000).B
 整数変数A%の値を、0x8802E000番地にバイト(1バイト)書き込みします。
(例)Poke(0x8802E000).W,A%
(例)A%→Poke(0x8802E000).W
(例)A%→*(0x8802E000).W
 整数変数A%の値を、0x8802E000番地にワード(2バイト)書き込みします。
(例)Poke(0x8802E000).L,A%
(例)A%→Poke(0x8802E000).L
(例)A%→*(0x8802E000).L
 整数変数A%の値を、0x8802E000番地にロングワード(4バイト)書き込みします。
(例)Poke(0x8802E000).F,A
(例)A→Poke(0x8802E000).F
(例)A→*(0x8802E000).F
 実数変数Aの値を、0x8802E000番地に倍精度実数(8バイト)書き込みします。

inserted by FC2 system