＜BASIC言語の書式＞
BASICプログラムの記述は、行番号式、ラベル式、その混合、いずれの方法でも構
いません。以下、仕様について述べます。

＜利用可能な変数型＞
利用できる変数の型は、32ビット符号付整数(-2147483648 以上 +2147483647 以
下)と、文字列型の２種類です。文字列の末端部には0x00が付加されます。

A-Zの２６個の整数型変数が利用可能です。文字列として扱う場合はA$のように記
述します。ただし、A（整数型）とA$（文字列型）を同時に使用することは出来ま
せん。

USEVARなどのステートメントで指定すると、6文字までの長い名前の変数を使用出
来ます。名前の最初の一文字は英字(A-Z)とアンダースコアー(_)で、二文字目から
はそれらに加えて数字(0-9)も使う事が出来ます。

整数型の定数は、１０進法で記述します。１６進法を使う場合、「$1200」のよう
に、頭に「$」を付加するか、「0x1200」の様に表記して下さい。

文字列型の定数は、「"」で囲って記述してください。「"」を使用する場合は、
「CHR$($22)」のように記述することが出来ます。

＜一般命令＞
以下、x, y, z等は整数値を、x$, y$, z$は文字列を、x#, y#, z#は浮動
小数点型実数値を指します。xxx, yyy, zzz, www等は任意のステートメントを
指します。[ ]は省略可能である事を示します。

命令同士を「:」で区切ることにより、一行で複数のコマンドを処理すること
が出来ます。

BGCOLOR r,g,b
	背景色指定。
BREAK
	FOR-NEXT, DO-LOOP, WHILE-WENDループから抜け出す。
CDATA x[,y[,z[...]]]
	データー列を8ビット整数値で指定する。
CLEAR
	すべての文字列型変数と整数型配列を破棄し、整数値を０とする。また、
	PCGの使用をやめ、表示キャラクターをリセットする。
CLS
	スクリーン消去。
COLOR x
	テキスト色指定。
CONTINUE
	FOR-NEXT, DO-LOOP, WHILE-WENDループ中で、以降のコードをスキップす
	る。
CURSOR x,y
	カーソル位置指定。
CDATA xxx[,yyy[,zzz[...]]]
	データー列を８ビット整数値で指定する。
DATA xxx[,yyy[,zzz[...]]]
	データー列を整数値もしくは文字列で指定する。
DIM xxx [, yyy [, zzz [, ... ]]]
	整数型もしくは浮動小数点型の配列を割り当てる。
	xxx,yyy,zzzは、例えば「A(10)」のように記述する。この場合、A(0)から
	A(10)までの１１個の整数型変数が確保される。浮動小数点型配列の場合は、
	「A#(10)」の様に記述する。多次元配列も、宣言することが出来る。
DO WHILE x
LOOP
	x が0以外の場合、DO文からLOOP文までのステートメントを繰り返し実行する。
DO UNTIL x
LOOP
	x が0の場合、DO文からLOOP文までのステートメントを繰り返し実行する。
DO
LOOP WHILE x
	DO文からLOOP文までのステートメントを実行し、x が0以外の場合、繰り返す。
DO
LOOP UNTIL x
	DO文からLOOP文までのステートメントを実行し、x が0の場合、繰り返す。
DRAWCOUNT
	DRAWCOUNT値を指定する。DRAWCOUNT値に付いては、DRAWCOUNT()関数を
	参照。
END
	BASICプログラムを停止する。
EXEC x[,y[,z[...]]]
	機械語を実行する。ただし、x,y,zは32ビット整数値。
FOR x=yyy TO zzz [ STEP www ]
NEXT
	yyyで示された計算結果をxに代入し、xの値がzzzになるまで次のNEXT文
	までのステートメントを、繰り返し実行する。繰り返しのたび、xの値は
	wwwずつ増加する（省略された場合は１ずつ）。「NEXT」の次に何も記述
	しないことに注意。
GOSUB xxx [, yyy [, zzz [, ... ]]]
	現在の実行位置を記憶し、xxx行目(もしくはラベル)に移動する。yyy, zzz
	等は、サブルーチンに引き継がれる引数（ARGS()関数を参照）。
GOTO xxx
	xxx行目(もしくはラベル)に移動する。
IF xまたはx# THEN yyy [ ELSE zzz ]
	xが0以外のとき、yyyを、0のときzzzを実行。yyyおよびzzzは、複数のステート
	メントを「:」で挟んで記述可能。
IF xまたはx# THEN
xxx
[ELSEIF yまたはy# THEN
yyy]
[ELSE
zzz]
ENDIF
	xが0以外の時xxxを、それ以外で且つyが0以外の時（記述された場合）yyyを、
	それ以外の場合にzzzを実行。ELSEIFステートメントは、複数記述可。各行で、
	THENステートメントの次には何も記入しないことに注意。
LABEL xxx
	GOTO/GOSUBのジャンプ先を登録する。xxxは、英数字６文字以内の文字列。
[LET] x=yyy
	yで示された計算結果を、x（整数型変数）に代入する。「LET」は省略可。
[LET] x#=yyy
	yで示された計算結果を、x（浮動小数点型変数）に代入する。「LET」は省略可。
[LET] x$=yyy
	yyyで示された文字列（もしくは連結結果;連結演算子は「+」）を、x$に
	代入する。「LET」は省略可。
MUSIC x$[,y]
	BGMを演奏する。詳細は、下記<MUSIC>の項を参照。Type Mでは、y=1の時右側だけ、
	y=2の時左側だけ、y=3もしくは省略した場合に両方から音が出る。
PLAYWAVE x$[,y]
	音楽用のWAVEファイル(ファイル名をx$で指定)を演奏する。WAVEのフォーマットは、
	Type Mの場合はステレオもしくはモノラル（Type Zではモノラルのみ）、ビット長
	は８、サンプリング周波数が15700 Hzの物を指定する。16000 Hzでも再生出来るが、
	音程と再生速度が少しずれる。yを指定した場合、指定の箇所から再生される（１秒
	目から再生したい場合は、15700を指定）。x$に長さ０の文字列を指定すると、現在
	再生中の音楽が停止する。
PALETTE n,r,g,b
	パレット指定。
PCG x,y,z
	ASCIIコードがxの文字の表示キャラクターを変更する。y,zは、キャラク
	ターデーター。詳細は、下記<PCG>の項を参照。
POKE x,y
	xで示される物理的アドレスに、yで示される値(１バイト値)を書き込む。
PEEK16 x,y
	xで示される物理アドレスに、yで示される値(16ビット値)を書き込む。xが奇数値の
	場合、例外停止するので注意。
PEEK32 x,y
	xで示される物理アドレスに、yで示される値(32ビット値)を書き込む。xが４の倍数で
	無い場合、例外停止するので注意。
PRINT [ xまたはx$またはx# [ ,または; [ yまたはy$またはy# [ ... ]]]]
	ディスプレイに、整数値または文字列を表示する。「;」を使用した場
	合、次の表示が続けて行われる。「,」を使用した場合、１０文字ずつ
	に区切って表示される。どちらも使用しない場合、次の表示は行を変え
	て行われる。
REM xxx
	何も実行しない
RESTORE xxx
	DATA読み出し開始位置を指定。xxxは行番号もしくはラベル。
RETURN
	最後に実行されたGOSUB文の次のステートメントに移動する。戻り値を指
	定することがができる。この場合の戻り値はGOSUB()関数にて取得が可能。
SCROLL x,y
	画面を横方向、もしくは縦方向(斜めも可)に動かす。動かす方向と大きさ
	は、x, yでそれぞれ、横方向の移動度、縦方向の移動度として指定する。
SOUND xxx[,y]
	効果音を再生する。詳細は、下記<SOUND>の項を参照。xxxは行番号もしく
	はラベル。Type Mでは、y=1の時右側だけ、y=2の時左側だけ、y=3もしくは
	省略した場合に両方から音が出る。
USEPCG [x]
	PCGを使用、もしくは使用停止する。x=0で使用停止、x=1で使用、x=2で
	キャラクターをリセットして使用。xを省略した場合は、x=1と同じ。
USEVAR xxx [, yyy [, zzz [, ... ]]]
	英数字とアンダースコアー(_)で最大6文字までの変数名を使用できるようにする。
	このステートメント以降でxxx, yyy等の長い変数名が使用可能となる。
VAR xxx [, yyy [, zzz [, ... ]]]
	サブルーチン内で使う、ローカル変数を指定する。xxx, yyy等は、A-Zの
	アルファベットで指定する。
WAIT x
	xで示された時間、プログラムの実行を停止する。xが60の場合、約１秒間
	停止。
WHILE x
WEND
	x が0以外の場合、WHILE文からWEND文までのステートメントを繰り返し実行する。
WIDTH x
	キャラクターディスプレイの横幅を文字数で指定。xは30、36、40、48、
	もしくは80。

＜整数型関数＞
以下、x, y, zは整数値を、x$, y$, z$は文字列を指します。[ ]は省略可能である事
を示します。

ABS(x)
	xの絶対値を返す。
ARGS(x)
	サブルーチン中で、GOSUBもしくはメソッドに渡されたx番目の引数を整数値として取
	り出す。但し、
		ARGS(0)は、引数の数を返す。
		ARGS(-1)は、一つ前に使われた引数を格納する配列へのポインターを返す。
		ARGS(-2)は、クラスで用いられた場合、オブジェクトへのポインターを返す。
ASC(x$)
	文字列の最初の一文字の、アスキーコードを返す。
CREAD()
	DATA文の後から、一つずつデーター（8ビット整数値）を読み出す。「READ()」
	関数も参照。
DRAWCOUNT()
	DRAWCOUNT値を得る。DRAWCOUNTは１６ビット整数値で、1/60秒ごとに１ずつ
	増える。
GOSUB(xxx [, y [, z [, ... ]]])
	GOSUB命令と同じだが、戻り値(RETURNを参照)を得ることが出来る。xxxは、
	ラベルもしくは行番号。。yyy, zzz 等は、サブルーチンに引き継がれる引数（
	ARGS()関数を参照）。
INKEY([x])
	xを指定しない場合、現在押されているキーのASCII値を返す。押されていな
	い場合は、０。ASCII値でxを指定した場合、そのキーが押されているかどう
	かを返す。
INT(x#)
	実数値x#を整数値に変換して返す。
KEYS([x])
	キー入力を得る。xの値は以下の通り。xを指定しない場合は、x=63と同じ。
		KEYUP:    1
		KEYDOWN:  2
		KEYLEFT:  4
		KEYRIGHT: 8
		KEYSTART: 16
		KEYFIRE:  32
	Type Zでこの機能を使うと、INKEY割り込みやREADKEY()等のキーボードを利
	用した機能が使えなくなる事に注意。Type Mでは、その限りではない。
LEN(x$)
	文字列の長さを返す。
MUSIC()
	BGMの演奏の残り数を返す。
NOT(x)
	x=0の場合に１を、そうでない場合に０を返す。
PEEK(x)
	xで示される物理アドレスから１バイト読み取り、返す。
PEEK16(x)
	xで示される物理アドレスから２バイト読み取り、16ビット値で返す。xが奇数値の場
	合、例外停止するので注意。
PEEK32(x)
	xで示される物理アドレスから４バイト読み取り、32ビット値で返す。xが４の倍数で
	無い場合、例外停止するので注意。
PLAYWAVE([x])
	xを指定しない場合、もしくは０を指定した場合、再生中のWAVEファイルの残りサン
	プリング数を返す。１を指定した場合、現在再生中のサンプリング番号を、２を指
	定した場合、WAVEファイルの総サンプリング数を返す。
READ()
	DATA文の後から、一つずつデーター（32ビット整数値）を読み出す。「CREAD()」
	関数も参照。
READKEY()
	キーボードバッファーから一文字読み込み、返す。バッファーが空の時は０を返す。
	戻り値は24ビット整数で、内容は以下の通り。
		bits 0-7   : ASCII コード
		bits 8-15  : 仮想キーコード
		bits 16-23 : シフトキー押下状態。
		             上位から<0><CAPSLK><NUMLK><SCRLK><Win><ALT><CTRL><SHIFT>。
RND()
	0から32767までの擬似乱数を返す。
SGN(x)
	xの符号(-1, 0, または1)を返す。
STRNCMP(x$,y$,z)
	２つの文字列のうちz文字分を比較し、結果を返す。同じ文字列の場合は０。
TVRAM([x])
	ビデオRAMのx番目の内容を、バイト値で返す。xを省略した場合、ビデオ
	RAMの開始位置の物理アドレスを返す。
VAL(x$)
	１０進数もしくは１６進数文字列としてのx$の値を、整数値で返す。

＜浮動小数点型関数＞
ACOS#(x#)
	x# の逆余弦を実数値で返す。
ARGS#(x)
	サブルーチン中で、GOSUBもしくはメソッドに渡されたx番目の引数を実数値として取
	り出す。
ASIN#(x#)
	x# の逆正弦を実数値で返す。
ATAN#(x#)
	x# の逆正接を実数値で返す。
ATAN2#(y#,x#)
	y#/x# の逆正接を実数値で返す。
CEIL#(x#)
	x# 以上の最小の整数を実数値で返す。
COS#(x#)
	x# の余弦を実数値で返す。
COSH#(x#)
	x# の双曲線余弦を実数値で返す。
EXP#(x#)
	eを底とする x# の指数関数値を実数値で返す。
FABS#(x#)
	x# の絶対値を実数値で返す。
FLOAT#(x)
	整数値 x を浮動小数点型実数値に変換して返す。
FLOOR#(x#)
	x# 以下の最大の整数を実数値で返す。
FMOD#(x#,y#)
	x# を y# で割った剰余を実数値で返す。
GOSUB#(xxx [, y [, z [, ... ]]])
	GOSUB命令と同じだが、戻り値(RETURNを参照)を得ることが出来る。xxxは、
	ラベルもしくは行番号。。yyy, zzz 等は、サブルーチンに引き継がれる引数（
	ARGS()関数を参照）。
LOG#(x#)
	x# の自然対数を実数値で返す。
LOG10#(x#)
	x# の常用対数を実数値で返す。
MODF#(x#)
	x# の小数部を実数値で返す。
PI#
	3.141593を返す。
POW#(x#,y#)
	x# の y# 乗を実数値で返す。
SIN#(x#)
	x# の正弦を実数値で返す。
SINH#(x#)
	x# の双曲線正弦を実数値で返す。
SQRT#(x#)
	x# の平方根を実数値で返す。
TAN#(x#)
	x# の正接を実数値で返す。
TANH#(x#)
	x# の双曲線正接を実数値で返す。
VAL#(x$)
	１０進数文字列としてのx$の値を、実数値で返す。

＜文字列型関数＞
A$(x [,y])など
	xの値が０の場合、文字列全体を返す。
	xの値が正の場合、xで示される位置より右側の文字列を返す。
	xの値が負のとき、文字列の右側x文字を返す。
	yが指定された場合、y文字分の文字列を返す。
ARGS$(x)
	サブルーチン中で、GOSUBもしくはメソッドに渡されたx番目の引数を文字列として取
	り出す。
CHR$(x)
	xをアスキーコードとする文字を返す。
DEC$(x)
	xの値を、１０進数の文字列として返す。
FLOAT$(x#)
	実数値x#を、１０進数の文字列として返す。
GOSUB$(xxx [, y [, z [, ... ]]])
	GOSUB命令と同じだが、戻り値(RETURNを参照)を文字列として得ることが出来る。
	xxxは、ラベルもしくは行番号。。yyy, zzz 等は、サブルーチンに引き継がれる引数
	（ARGS()関数を参照）。
HEX$(x [,y])
	xの値を、１６進数の文字列として返す。yが指定された場合、yバイト長の
	文字列になる。
INPUT$()
	文字列入力状態になり、入力が終了すると(Enterが押されると)文字列を返す。
SPRINTF$(x$,y#)
	x$で示される書式に従って、実数y#の内容を文字列として返す。
READ$()
	DATA文の後から、一つずつ文字列データーを読み出す。

＜整数演算子＞
&x
	変数xの格納アドレス(ポインター)
-x
	符号を反転
x + y
	整数加算
x - y
	整数減算
x * y
	整数乗算
x / y
	整数除算
x % y
	整数剰余
x >> y
	xの値をyビット右シフト
x << y
	xの値をyビット左シフト
x = y
	２つの整数値が等しい場合に１、そうでないときに０
x != y
	２つの整数値が等しい場合に０、そうでないときに１
x < y
	xがyより小さい場合に１、そうでないときに０
x <= y
	xがyより小さいか等しい場合に１、そうでないときに０
x > y
	xがyより多きい場合に１、そうでないときに０
x >= y
	xがyより多きいか等しい場合に１、そうでないときに０
x AND y
	xとyの値のビットごとの AND（論理積でないことに注意）
x OR y
	xとyの値のビットごとの OR
x XOR y
	xとyの値のビットごとの XOR

なお、整数演算子の優先順位は、優先度が高いものから以下の順です。

+ - (単項演算子) &
* / %
+ - (加算・減算)
<< >>
< <= > >=
= !=
XOR
AND
OR

＜文字列演算子＞
x$ + y$
	文字列の連結

＜浮動小数点型演算子＞
-x#
	符号を反転
x# + y#
	実数加算
x# - y#
	実数減算
x# * y#
	実数乗算
x# / y#
	実数除算
x# = y#
	２つの実数値が等しい場合に１、そうでないときに０
x# != y#
	２つの実数値が等しい場合に０、そうでないときに１
x# < y#
	xがyより小さい場合に１、そうでないときに０
x# <= y#
	xがyより小さいか等しい場合に１、そうでないときに０
x# > y#
	xがyより多きい場合に１、そうでないときに０
x# >= y#
	xがyより多きいか等しい場合に１、そうでないときに０
x# AND y#
	xとyの値の論理積（ビットごとの AND でないことに注意）
x# OR y#
	xとyの値の論理和（ビットごとの OR でないことに注意）

なお、実数演算子の優先順位は、優先度が高いものから以下の順です。

+ - (単項演算子)
* /
+ - (加算・減算)
< <= > >=
= !=
AND
OR

＜特殊命令・関数＞
IDLE
	アイドルモード("wait"アセンブリー)に入る。ビデオ信号作製やタイマーなどの割
	り込みがかかるまで、CPUが停止する。
OPTION x[,y[,z ... ]]]
	各種オプションを指定する。オプションについては、下記＜オプション＞の項を参照。
SYSTEM x , y
	様々なシステム値の設定を行なう。＜SYSTEM＞の項を参照。
SYSTEM(x)
	様々なシステム値を、整数値で返す。＜システム変数＞の項を参照。
SYSTEM$(x)
	様々なシステム値を、文字列で返す。＜システム変数＞の項を参照。

＜グラフィック関連命令と関数＞

BOXFILL [x1,y1],x2,y2[,c]
	座標(x1,y1),(x2,y2)を対角線とするカラーcで塗られた長方形を描画。
CIRCLE [x,y],r[,c]
	座標(x,y)を中心に、半径r、カラーcの円を描画。
CIRCLEFILL [x,y],r[,c]
	座標(x,y)を中心に、半径r、カラーcで塗られた円を描画。
GCLS
	画面クリアー。
GCOLOR c
	それぞれの命令で、cを省略した場合の色を指定。
GPALETTE n,r,g,b
	パレット指定。
GPRINT [x,y],c,bc,s$
	座標(x,y)にカラーcで文字列s$を表示、bc:背景色（負数の場合背景色指定なし）。
LINE [x1,y1],x2,y2[,c]
	座標(x1,y1)から(x2,y2)にカラーcで線分を描画。
POINT x,y
	グラフィック現在位置を、設定する。
PSET [x,y][,c]
	座標(x,y)の位置にカラーcで点を描画。
PUTBMP [x,y],m,n,bbb
	横m*縦nドットのキャラクター(bbbで指定)を座標(x,y)に表示。
	サイズm*nの配列bmpに、単純にカラー番号を並べる。
	ただし、カラーが0の部分は透明色として扱う。ただし、bbbはラベル名もし
	くは配列へのポインター。
USEGRAPHIC [x]
Type Mの場合
	グラフィックディスプレイを使用、もしくは使用停止する。x=0で使用停止、
	x=1, 5, 9で使用、x=2, 6, 10で画面とパレットをクリアーして使用、x=3,7, 
	11でグラフィック領域を確保するが表示はキャラクターディスプレイのまま。
	ただし、グラフィックディスプレイ未使用の状態でx=0, 4, 8の場合は、領域
	を確保する。xを省略した場合は、x=1と同じ。
	ただし、xの値が0-3の場合はType-Z互換グラフィック、4-7の場合は標準グラ
	フィック、8-11の場合はワイドグラフィック。
Type Zの場合
	グラフィックディスプレイを使用、もしくは使用停止する。x=0で使用停止、
	x=1で使用、x=2で画面とパレットをクリアーして使用、x=3でグラフィック領
	域を確保するが表示はキャラクターディスプレイのまま。ただし、グラフィッ
	クディスプレイ未使用の状態でx=0の場合は、領域を確保する。xを省略した場
	合は、x=1と同じ。


GCOLOR(x,y)
	グラフィック座標(x,y)の表示中パレット番号を返す。

＜ファイル関連命令と関数＞
ファイルは、最大２つまで同時に開く事が出来ます。

FCLOSE [x]
	ファイルを閉じる。引数(x)がある場合は、そのファイルハンドルで指定されたファ
	イルを閉じる。
FGET x,y
	バッファー(xに配列として指定)にyバイト読み込む。関数として呼ばれた場合は、
	読み込みに成功したバイト数を返す。
FILE x
	アクティブなファイルハンドル（１もしくは２）をxに指定する。
FOPEN x$,y$[,z]
	x$で示される名前のファイルを、y$で示されたモードで開く。同時に開けるファイ
	ルの数は、２つまで。関数として呼ばれた場合は、ファイルハンドルを返す。y$と
	しては、次のものが有効。
		"r"  ：ファイルを読み込みモードで開く。
		"r+" ："r"と同じだが書き込みも可能。
		"w"  ：ファイルを書き込みモードで開く。同名のファイルが在る場合は、
		       以前のファイルは消去される。
		"w+" ："w"と同じだが、読み込みも可能。
		"a"  ：ファイルを書き込みモードで開く。同名のファイルが在る場合は、
		       ファイルは消去されず、ファイルの最後尾から書き込まれる。
		"a+" ："a"と同じだが、読み込みも可能。
	zには、割り当てたいファイルハンドル（１もしくは２）を指定する。省略した場
	合、１が指定される。
FPRINT [ xまたはx$またはx# [ ,または; [ yまたはy$またはy# [ ... ]]]]
	PRINT命令と同じだが、画面ではなくファイルに情報が書き込まれる。
FPUT x,y
	バッファー(xに配列として指定)のyバイト分を書き込む。関数として呼ばれた場合
	は、書き込みに成功したバイト数を返す。
FPUTC x
	xで示される１バイトのデーターをファイルに書き込む。関数として呼ばれた場合
	は、書き込みに成功したバイト数（１もしくは０）を返す。
FREMOVE x$
	x$で示される名前のファイルを、SDカードから削除する。関数として呼ばれた場合
	は、削除に成功したか(0)、失敗したか(-1)を返す。
FSEEK x
	xで示されるファイル位置に移動する。
SETDIR x$
	カレントディレクトリーをx$に移動する。関数として呼ばれた場合、成功すれば0を、
	エラーが有れば0以外を返す。
FEOF()
	FOPENで開いたファイルの現在のファイル位置が、末端に到達しているかどうか
	を返す。１で末端に到達、０で未到達。
FGETC()
	FOPENで開いたファイルから１バイト読み込み、整数値として返す。ファイル
	末端に到達しているなどで読み込みに失敗した場合、-1を返す。
FLEN()
	FOPENで開いたファイルのファイル長を、バイト数で返す。
FSEEK()
	FOPENで開いたファイルの、現在のファイル位置を返す。
FINPUT$([x])
	FOPENで開いたファイルから、xで示された長さの文字列を読み込む。xが省略された
	場合は、行の最後まで読み込む(改行コードが含まれる)。
GETDIR$()
	カレントディレクトリーを文字列として返す。

＜タイマー関連命令と関数＞
タイマーは、通常タイマーとコアタイマーの２つがあります。通常タイマーは速度の設定
や値の変更など出来る、汎用タイマーです。コアタイマーは、CPUクロックと同期した特
殊なタイマーで、値を読む事は出来るが設定する事は出来ません。

CORETIMER
	コアタイマーを用いた割り込みの時期を設定する。コアタイマーの値を変更するわけ
	ではない事に注意。
USETIMER x
	タイマーを開始する。xはタイマーの速度を、μ秒で指定（175769以下の値）。
TIMER x
	現在のタイマー値を32ビット整数(x)で設定する。
CORETIMER()
	現在のコアタイマーの値を、32ビット整数値として返す。
TIMER()
	タイマーの現在値を、32ビット整数値として返す。

＜割り込み命令＞
INTERRUPT xxx,yyy[,z1[,z2 ... ]]
	割り込みを設定する。xxxは割り込みの種類、yyyは割り込み時のサブルーチンをラベ
	ルで指定。z1, z2等を指定すると、割り込み用サブルーチンの引数となる。使用可能
	な割り込みの種類は以下の通り。
		TIMER
			タイマー割り込み。タイマー値が１増えるごとに割り込みがかかる。
		DRAWCOUNT
			1/60秒毎の割り込み。
		KEYS
			ボタンの押下状態が変化した時。Type Zでこの機能を使うと、INKEY割り込
			みやREADKEY()、INKEY()等のキーボードを利用した機能が使えなくなる事に
			注意。Type Mでは、その限りではない。
		INKEY
			キーボード押下時。READKEY()関数と組み合わせて使う。
		MUSIC
			音楽再生の時、最後の音の再生時に割り込み。
		WAVE
			WAVEファイル再生終了時。
		CORETIMER
			コアタイマーの値がCORETIMER命令で設定した値と一致した時。
INTERRUPT STOP xxx
	割り込みを停止する。xxxは割り込みの種類。

＜MUSIC＞
MUSIC命令では、BGM用のデーターを文字列で指定します。文字列の書式は、ABC 
notationに準拠しています。ただし、すべての記法が使えるわけではありません。
なお、キーや速度などのデフォルト設定値は以下の通りです。

Q: 1/4=90
L: 1/8
K: C

BGM演奏時に一度に設定できる音の数は、31迄です。これを超えて音楽を再生したい
場合は、MUSIC()関数の戻り値を調べ、その値が十分小さくなってから、次のMUSIC命
令を実行するようにします。

添付のmusic.basに、使い方に関するサンプルがありますので、参考にして下さい。

＜SOUND＞
SOUND命令では、DATA列のデーターを、行番号もしくはラベルで指定します。SOUND命
令による効果音再生中は、BGMは再生されません。また、前の効果音が終わる前に次
のSOUND命令を実行すると、前の効果音の再生は停止し、新しい効果音がすぐに再生
されます。

DATA列では、３２ビット整数値として、交換音を表現します。この整数値の下位１６
ビットは周波数の指定です。2048が440Hz(ラの音)に対応します。値が大きくなるほ
ど、より低い音が出ます。上位１６ビットは、音の長さです。1が、1/60秒に相当し
ます。最後に、65535以下の値で、効果音の繰り返し回数を指定します。これらのデー
ターの数は、32を超えないようにして下さい。

添付のsound.basに、使い方に関するサンプルがありますので、参考にして下さい。

＜PCG＞
PCG(Programmable Character Generator)を用いると、ASCIIコードごとにフォント
を指定して、疑似グラフィックスとして表示させることが出来ます。使用する場合
は、まず

USEPCG

とします。フォントの変更は、PCGステートメントを用いて、

PCG 0x80,0x80402010,0x08040201

の様に設定します。この例では、ASCIIコード0x80の文字のフォントを設定してい
て、バックスラッシュの様な記号(左上から右下に向かう斜め線)が表示されるよう
になります。PCGの利用を停止し、オリジナルのフォントに戻す場合は、

USEPCG 0

とします。再度PCGを使用したい場合は、

USEPCG

として下さい。先に設定したフォントデーターが、復活します。なお、先に設定し
たフォントデーターを破棄してPCGの使用を始めたい場合は、

USEPCG 2

として下さい。

＜システム変数＞
SYSTEM関数及びSYSTEMステートメントを用いて、各種システム情報をやりとりするこ
とが出来ます。

SYSTEM$(0)
	MachiKania バージョン文字列、"Zoea"等を返す。
SYSTEM$(1)
	MachiKania バージョン文字列、"1.2"等を返す。
SYSTEM$(2)
	BASIC バージョン文字列、"KM-1208"等を返す。
SYSTEM$(3)
	現在実行中のHEXファイル名、"ZOEA.HEX"等を返す。
SYSTEM(4)
	現在実行中のCPUのクロック周波数を返す。
SYSTEM(20)
	キャラクターディスプレイ横幅を返す。
SYSTEM(21)
	キャラクターディスプレイ縦幅を返す。
SYSTEM(22)
	グラフィックディスプレイ横幅を返す。
SYSTEM(23)
	グラフィックディスプレイ横幅を返す。
SYSTEM(24)
	キャラクターディスプレイ用の指定色を返す。
SYSTEM(25)
	グラフィックディスプレイ用の指定色を返す。
SYSTEM(26)
	キャラクターディスプレイの、現在のX位置を返す。
SYSTEM(27)
	キャラクターディスプレイの、現在のY位置を返す。
SYSTEM(28)
	グラフィックディスプレイの、現在のX位置を返す。
SYSTEM(29)
	グラフィックディスプレイの、現在のY位置を返す。
SYSTEM(40)
	PS/2キーボードを使用中かどうかを返す。
SYSTEM(41)
	PS/2キーボード情報、vkeyを返す。
SYSTEM(42)
	PS/2キーボード情報、lockkeyを返す。
SYSTEM(43)
	PS/2キーボード情報、keytypeを返す。
SYSTEM(100)
	変数格納領域(g_var_mem)へのポインターを返す。
SYSTEM(101)
	乱数シードへのポインターを返す。
SYSTEM(102)
	キャラクターディスプレイ領域(TVRAM)へのポインターを返す。
SYSTEM(103)
	フォント領域へのポインターを返す。
SYSTEM(104)
	PCGフォント領域へのポインターを返す。
SYSTEM(105)
	グラフィックディスプレイ領域へのポインターを返す。
SYSTEM 200,x
	ディスプレイの表示を停止(xが0のとき)、もしくは開始(xが0以外の時)する。

＜入出力命令・関数＞
入出力機能は、Type Mでのみ使えます。

ANALOG(x)
	PORTBの下位からxビット目のアナログ入力値(１０ビット値;0-1023の値)を返す。但
	し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。
IN(x)
	PORTBの下位からxビット目の入力値(１ビット値;１か０)を返す。但し、x=16, 17, 
	18の場合は、PORTE5, 6, 7がそれぞれ指定される。入力はPIC内部でプルアップされ
	る。
IN8H()
	PORTBの上位８ビットの入力値(８ビット値)を返す。入力はPIC内部でプルアップされ
	る。
IN8L()
	PORTBの下位８ビットの入力値(８ビット値)を返す。入力はPIC内部でプルアップされ
	る。
IN16()
	PORTBの入力値(１６ビット値)を返す。入力はPIC内部でプルアップされる。
PWM x[,y[,z]]
	PWM出力を行なう。z=1の場合PORTD10に、z=2の場合PORTD11に出力される。zを省略し
	た場合は、PORTD10。xにはデューティー比を、0-1000の値で指定する。yはパルスの
	周波数を、Hzで指定する（省略した場合は、1000；有効値は6-95454）。
SERIAL x[,y[,z]]
	シリアル通信を開始する。xにはボーレートを指定する(シリアル通信の使用を終了す
	る場合は、x=0を指定)。y=0の場合パリティ無し、y=1の場合偶数パリティ、y=2の場
	合奇数パリティ、y=3の場合９ビットパリティ無し。yを省略した場合は、y=0と同じ。
	zには受信バッファーの文字数を指定する。zを省略した場合、1/60秒の連続受信が
	保証される大きさのバッファーを確保する。
SERIALIN([x])
	シリアル通信で、一文字受信する。受信が無い場合は、-1を返す。x=1を指定すると、
	受信バッファーの文字数を返す。パリティ有り８ビットの受信の場合は、パリティ
	エラーが起きた場合、0x100以上の値を返す。
SERIALOUT x
	シリアル通信で、一文字送信する。
OUT x,y
	PORTBの下位からxビット目に、yで示された値(１ビット値;１か０)を出力する。但
	し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。PORTE5, 6, 7は、
	オープンドレイン出力であることに注意。
OUT8H x
	PORTBの上位８ビットに、xで示された値(８ビット値)を出力する。
OUT8L x
	PORTBの下位８ビットに、xで示された値(８ビット値)を出力する。
OUT16 x
	PORTBに、xで示された値(１６ビット値)を出力する。
I2C [x]
	I2C利用をマスターモードで開始する。xは、クロック数をkHz単位で指定(有効値は、
	12-3409)。省略した場合は、X=100。
I2CWRITE x[,y[,z[, ... ]]
	I2C固定長送信を行なう。xは７ビットのスレーブアドレス。y, z等はオプションの送
	信コードで、バイト値で指定。
I2CREAD(x[,y[,z[, ... ]])
	I2C固定長送信の後、１バイトの受信を行なう。xは７ビットのスレーブアドレス。y, z
	等はオプションの送信コードで、バイト値で指定。成功した場合に８ビット値を返す。
	エラーの場合、-1を返す。
I2CWRITEDATA x,y,z1[,z2[,z3...]]
	I2C複数バイト送信を行なう。xは７ビットのスレーブアドレス。yは送信する内容を含
	むバッファーへのポインター。z1はバッファーのバイト数。z2, z3等はオプションの送
	信コードで、これらのバイト値がまず送信され、続けてバッファーyの内容がz1バイト
	に渡って送信される。
I2CREADDATA x,y,z1[,z2[,z3...]]
	I2C複数バイト受信を行なう。xは７ビットのスレーブアドレス。yは受信する内容を格
	納するバッファーへのポインター。z1は受信するバイト数。z2, z3等はオプションの送
	信コードで、これらのバイト値がまず送信され、続けてz1バイトのデーターを受信して
	バッファーyに格納する。
I2CERROR()
	直前のI2C送受信でエラーが在った場合に０以外を、なければ０を返す。
SPI x[,y[,z1[,z2]]]
	SPI利用をマスターモードで開始する。xは、クロック数をkHz単位で指定(有効値は、
	93-47727)。yは、１ワードのビット数を8/16/32で指定(省略した場合は、8)。z1は、
	SPIクロックの取り扱い方を指定(省略した場合は、0)。詳細は、下記に。z2は、CS
	ラインにどのポートを使用するかを指定する。省略した場合は、0x39(PORTD9)。他の
	ポートを使う場合、例えばPORTB5なら0x15、PORTB3なら0x13とする。
		z1=0:アイドル時にL、データー変更はLに変化する時(CKP=0,CKE=1)
		z1=1:アイドル時にL、データー変更はHに変化する時(CKP=0,CKE=0)
		z1=2:アイドル時にH、データー変更はHに変化する時(CKP=1,CKE=1)
		z1=3:アイドル時にH、データー変更はLに変化する時(CKP=1,CKE=0)
SPIWRITE x[,y[,z[, ... ]]
	SPI固定長送信を行なう。x, y, z等は送信コード。
SPIREAD([x[,y[,z[, ... ]]])
	SPI固定長送信(オプション)の後、１ワードの受信を行ない、返す。x,y,z等は、受信
	前に送信するコード。
SPIWRITEDATA x,y[,z1[,z2[,z3...]]]
	SPI複数ワード送信を行なう。xは送信する内容を含むバッファーへのポインター。yは
	バッファーのワード数。z1,z2,z3等はオプションの送信コードで、これらがまず送信
	され、続けてバッファーxの内容がyワードに渡って送信される。
SPIREADDATA x,y[,z1[,z2[,z3...]]]
	SPI複数ワード受信を行なう。xは受信する内容を格納するバッファーへのポインター。
	yは受信するワード数。z1,z2,z3等はオプションの送信コードで、これらがまず送信さ
	れ、続けてyワードのデーターを受信してバッファーxに格納する。
SPISWAPDATA x,y[,z1[,z2[,z3...]]]
	SPI複数ワード送受信を行なう。xは送受信する内容を格納するバッファーへのポイン
	ター。yは送受信するワード数。z1,z2,z3等はオプションの送信コードで、これらがま
	ず送信される。続けて、バッファーxの内容を送信した後にデーターを受信してバッ
	ファーxに格納しなおす動作を、yワードに渡って繰り返す。

＜オプション＞
OPTIONステートメントを使って、コンパイル時もしくは実行時に色々なオプションを指定
する事が可能です。次のオプションが有ります。

OPTION NOLINENUM
	コンパイル時に、行番号を指定する命令を挿入しない。このオプションにより、プロ
	グラムサイズを小さくして実行速度を増加する効果が見込める。ただし、エラーが発
	生した場合に、どの行でのエラーかは分からなくなる。
OPTION FASTFIELD
	クラスを２つ以上使っている時、パブリックフィールド名の重複がない場合に、
	フィールドへのアクセスを高速化する。ただし、存在しないオブジェクトのフィール
	ドにアクセスしてもエラーにならない場合があるため、予めBASICコードにエラーが
	ない事を確認してから用いる事が望ましい。なお、クラスを一つだけしか使っていな
	い場合は、指定しなくてもこのオプションは有効になっている。
OPTION CLASSCODE
	このオプションの後に、クラスを記述するコードを書く事が出来る。但し、ファイル
	名を「クラス名.BAS」として保存する事。この機能を用いれば、クラスを一つだけ使
	うコードなら、１ファイルに収める事が出来る。クラスの開発用に用いると、便利。

＜クラス・オブジェクト関連機能＞
クラスとオブジェクトの利用方法について、詳しくはclass.txtを参照して下さい。
以下は、関連する命令と関数です。

USECLASS x[,y[,z[, ... ]]]
	クラスの利用を宣言する。x,y,z等は、クラス名を6文字以内の英数字で指定。
FIELD [PUBLIC] x[,y[,z[, ... ]]]
	クラスファイル中で、パブリックフィールドを宣言する。"PUBLIC"は省略可。
	x,y,z等はフィールド名を6文字以内の英数字で指定。
FIELD PRIVATE x[,y[,z[, ... ]]]
	クラスファイル中で、プライベートフィールドを宣言する。x,y,z等はフィールド
	名を6文字以内の英数字で指定。
STATIC [PUBLIC] x[,y[,z[, ... ]]]
	クラスファイル中で、パブリックスなタティック変数を宣言する。"PUBLIC"は省略可。
STATIC PRIVATE x[,y[,z[, ... ]]]
	クラスファイル中で、プライベートなスタティック変数を宣言する。USEVARと同じ。
METHOD x
	クラスファイル中で、メソッドを宣言する。xは、メソッド名を6文字以内の英
	数字で指定。
NEW(x[,y[,z[, ... ]]])
	クラスオブジェクトを作成し、オブジェクトへのポインターを返す。xはクラス名
	を指定。y,z等はコンストラクターがある際に利用される引数。
DELETE x[,y[,z[, ... ]]]
	作成されたオブジェクトを破棄する。x,y,z等は、オブジェクトを格納する変数名。
CALL x
	xで指定されたオブジェクトのメソッドを呼び出す。「CALL」は省略可。

＜ヒント＞
MachiKania ver 1.2 以降、FOR-NEXTループ、WHILE-WENDループ、DO-LOOPループの途中で、
RETURN文が使えるようになりました。ただし、GOTO文でループの外に飛ぶと、予期せぬ結
果（機器のリセット等）を引き起こします。また、GOSUB文でサブルーチンを呼んだり、別の
ループをネストして使う事は可能です。

ON GOTO分やON GOSUB文はサポートしていません。ただし、例えば次のように記述す
ることで、同様の動作をさせることは可能です。
 GOSUB 10000+A
 ....
 10000 PRINT "A=0" : RETURN
 10001 PRINT "A=1" : RETURN
 10002 PRINT "A=2" : RETURN

一行中で連続して文字列を扱うと、"String too complexed"というエラーがでて、
停止することがあります。この場合は、文字列を扱う命令を独立した行するか、文
字列関連の演算を幾つかのステップに分けて、それぞれ１行ずつの記述にして試し
てみて下さい。

割り込み関数中でグローバル変数にアクセスする際は、注意が必要です。同名の変数がい
ずれかのサブルーチン内でVAR指定されてローカル変数としても使われている場合、いつ
割り込みがトリガーされるかによって、変数値がグローバル変数の物になるかローカル
変数の物になるか、不定になってしまいます。従って、割り込み関数中でグローバル変数
を扱いたい場合は、同名の変数をVAR指定しないようにして下さい。

＜バージョン履歴＞
・KM-1208 2019年？月公開。
　・タイマー機能(USETIMER,TIMER, CORETIMERステートメントとTIMER(), CORETIMER()関
　　数)を追加。
　・割り込み機能(INTERRUPTステートメント)を追加。
　・オプション機能(OPTIONステートメント)を追加。
　・アイドル機能(IDLEステートメント)を追加。
　・READKEY()関数を追加。
　・EXEC()関数を追加。
・KM-1207 2019年3月公開。
　・PUTBMPの第５引数に長い名前の変数が使えなかったバグの修正
　・オブジェクト指向プログラミングに対応
　・args(0)で引数の数を取得できるようにした
　・POKE16, POKE32, PEEK16(), PEEK32()を追加
　・&演算子を追加
　・GETDIR$()関数とSETDIRステートメントを追加
　・オプション機能(OPTIONステートメント)を追加。
・KM-1206 2018年8月公開。
　１．WAVEファイルの再生に対応。
・KM-1205 2018年2月公開。
　１．スタック容量拡大のため、使用可能RAM容量を53Kバイトに削減。
　２．CLEARステートメントの不具合を修正。
・KM-1204 2017年8月公開。
　１．USEVARステートメントを追加。
　２．CLEARステートメント実行でグラフィックモードから抜けるように変更。
・KM-1203 2017年1月公開。
　１．ファイル入出力機能を追加。
・KM-1202 2016年10月公開。
　１．WIDTHステートメントを追加。
　２．特殊なデーター列・文字列に於ける、リンク時の不具合及びREAD()関数実行時
　　　に於ける不具合を修正。
　３．多次元配列中で演算子を使った場合の不具合を解消。
・KM-1201 2016年9月公開。
　１．CONTINUEステートメントを追加。
　２．ATAN2#()関数を追加。
　３．IF-THEN-ELSEステートメントでエラーがでる不具合を修正。
　４．負の実数値の扱いにおける不具合を修正。
・KM-1200 2016年8月公開。
　１．グラフィックディスプレイ機能および、関連のステートメント群を追加。
　２．浮動小数点演算機能、及び、算術演算関数群を追加。
　３．VAR, BREAK, SYSTEMステートメントを追加。
　４．DO-LOOP, WHILE-WENDループ構造文を追加。
　５．IF THEN - ELSEIF - ELSE - ENDIFによる、複数行での条件分岐表現を追加。
　６．GOSUBステートメント及びGOSUB()関数に第二以降の引数を指定出来る様にし、
　　　サブルーチン中でARGS()関数により取り出せるようにした。
　７．８ビット整数型を扱うCDATAステートメントとCREAD()関数を追加。
　８．DATAステートメントで文字列を扱える様にし、READ$()で読めるようにした。
　９．多次元配列をサポート。
　10．例外発生時に、情報を表示するようにした。
　11．FOR-NEXTループに於いて、TO値に一致する時だけではなく、値を超えた場合
　　　でもループを抜けるようにした。
　12．MUSICステートメント用のスクリプトにエラーがある際、エラー発生行が正し
　　　く表示されない不具合を修正。
　13．ビットシフト演算子を、追加。

・KM-1120 2016年2月公開。
　１．PCG機能を追加。
　２．SCROLL命令を追加。
　３．WAIT命令を追加。
　４．「Ctrl+Break」キーによる実行停止に対応。
　５．FOR無しでNEXTを実行した場合、GOSUB無しでRETURNを実行した場合にエラー
　　　を表示して停止するようにした。

・Ver 1.1.0 (KM-1110) 2015年12月公開。
　１．2015年11月21日に変更されたPIC32TVGSの仕様に対応。
　２．PS/2キーボードに対応。
　３．INKEY() INPUT$() VAL() DEC$() の４つの関数を追加。
　４．TVRAM() ASC() PEEK()が、0x80-0xFFの値に関して負の数を返していた不具合
　　　を修正。
　５．DIMステートメントにより配列を定義した際、すべての要素がゼロになるよう
　　　にした。
　６．単項演算子、「-」「+」を追加。
　７．LABEL定義されていない飛び先にGOTOするとリセットされる不具合を修正。
　８．同一のLABELを複数回使用している場合に、コンパイルエラーが出るように修
　　　正。
　９．引数を持たないPRINT文に対応。

・Ver 1.0.5 (KM-1100) 最初の正規公開バージョン。
