<BASIC言語の書式> BASICプログラムの記述は、行番号式、ラベル式、その混合、いずれの方法でも構いません。以下、仕様について述べます。 <利用可能な変数型> 利用できる変数の型は、32ビット符号付整数(-2147483648 以上 +2147483647 以下)、32ビット浮動小数点型、文字列型の3種類です。文字列の末端部には0x00が付加されます。 A-Zの26個の整数型変数が利用可能です。浮動小数点型として扱う場合はA#のように、文字列として扱う場合はA$のように記述します。ただし、A(整数型)とA#(浮動小数点型)とA$(文字列型)は同時に使用することは出来ません。 USEVARなどのステートメントで指定すると、6文字までの長い名前(Type Pではさらに長い名前も使用可能)の変数を使用出来ます。名前の最初の一文字は英字(A-Z)とアンダースコアー(_)で、二文字目からはそれらに加えて数字(0-9)も使う事が出来ます。 整数型の定数は、10進法で記述します。16進法を使う場合、「$1200」のように、頭に「$」を付加するか、「0x1200」の様に表記して下さい。 浮動小数点型の定数は、「2e-3」(0.002の場合)「10.5」のように表記してください。 文字列型の定数は、「"」で囲って記述してください。「"」を使用する場合は、「CHR$($22)」のように記述することが出来ます。 <一般命令> 以下、x, y, z等は整数値を、x$, y$, z$は文字列を、x#, y#, z#は浮動小数点型実数値を指します。xxx, yyy, zzz, www等は任意のステートメントを指します。[ ]は省略可能である事を示します。|(縦線)は、左右のどちらかの表記が使えることを示します。 命令同士を「:」で区切ることにより、一行で複数のコマンドを処理することが出来ます。 ALIGN4 コンパイルオブジェクトに於いて、次の命令のコードのアドレスの下位2ビットがゼロになるようにする。Type Pのみで使える。 BGCOLOR r,g,b 背景色指定。 BREAK FOR-NEXT, DO-LOOP, WHILE-WENDループから抜け出す。 CDATA x[,y[,z[...]]] データー列を8ビット整数値で指定する。 CLEAR すべての文字列型変数と整数型配列を破棄し、整数値を0とする。また、 PCGの使用をやめ、表示キャラクターをリセットする。 CLS スクリーン消去。 COLOR x テキスト色指定。 CONTINUE FOR-NEXT, DO-LOOP, WHILE-WENDループ中で、以降のコードをスキップする。 CURSOR x,y カーソル位置指定。 CDATA xxx[,yyy[,zzz[...]]] データー列を8ビット整数値で指定する。 DATA xxx[,yyy[,zzz[...]]] データー列を整数値もしくは文字列で指定する。 DELAYMS x Type Pで使用可能。x ミリ秒の時間、実行を停止する。 DELAYUS x Type Pで使用可能。x マイクロ秒の時間、実行を停止する。 DIM xxx [, yyy [, zzz [, ... ]]] 整数型もしくは浮動小数点型の配列を割り当てる。xxx,yyy,zzzは、例えば「A(10)」のように記述する。この場合、A(0)からA(10)までの11個の整数型変数が確保される。浮動小数点型配列の場合は、「A#(10)」の様に記述する。多次元配列も、宣言することが出来る。 DO WHILE x|x# LOOP xまたはx# が0以外の場合、DO文からLOOP文までのステートメントを繰り返し実行する。 DO UNTIL x|x# LOOP xまたはx# が0の場合、DO文からLOOP文までのステートメントを繰り返し実行する。 DO LOOP WHILE x|x# DO文からLOOP文までのステートメントを実行し、xまたはx# が0以外の場合、繰り返す。 DO LOOP UNTIL x|x# DO文からLOOP文までのステートメントを実行し、xまたはx# が0の場合、繰り返す。 DRAWCOUNT x DRAWCOUNT値を指定する。DRAWCOUNT値に付いては、DRAWCOUNT()関数を参照。 END BASICプログラムを停止する。 EXEC x[,y[,z[...]]] 機械語を実行する。ただし、x,y,zは、Type Z, Type Mでは32ビット整数値、Type Pでは16ビット整数値。 FOR x=yyy TO zzz [ STEP www ] NEXT yyyで示された計算結果をxに代入し、xの値がzzzになるまで次のNEXT文までのステートメントを、繰り返し実行する。繰り返しのたび、xの値はwwwずつ増加する(省略された場合は1ずつ)。「NEXT」の次に何も記述しないことに注意。 GOSUB xxx [, yyy [, zzz [, ... ]]] 現在の実行位置を記憶し、xxx行目(もしくはラベル)に移動する。yyy, zzz等は、サブルーチンに引き継がれる引数(ARGS()関数を参照)。 GOTO xxx xxx行目(もしくはラベル)に移動する。 IF x|x# THEN yyy [ ELSE zzz ] xまたはx#が0以外のとき、yyyを、0のときzzzを実行。yyyおよびzzzは、複数のステートメントを「:」で挟んで記述可能。 IF x|x# THEN xxx [ELSEIF y|y# THEN yyy] [ELSE zzz] ENDIF xまたはx#が0以外の時xxxを、それ以外で且つyまたはy#が0以外の時(記述された場合)yyyを、それ以外の場合にzzzを実行。ELSEIFステートメントは、複数記述可。各行で、THENステートメントの次には何も記入しないことに注意。 LABEL xxx GOTO/GOSUBのジャンプ先を登録する。xxxは、英数字6文字以内の文字列。 [LET] x=yyy yで示された計算結果を、x(整数型変数)に代入する。「LET」は省略可。 [LET] x#=yyy yで示された計算結果を、x(浮動小数点型変数)に代入する。「LET」は省略可。 [LET] x$=yyy yyyで示された文字列(もしくは連結結果;連結演算子は「+」)を、x$に代入する。「LET」は省略可。 MUSIC x$[,y] BGMを演奏する。詳細は、下記の項を参照。Type Mでは、y=1の時右側だけ、y=2の時左側だけ、y=3もしくは省略した場合に両方から音が出る。 PLAYWAVE x$[,y] 音楽用のWAVEファイル(ファイル名をx$で指定)を演奏する。WAVEのフォーマットは、Type Mの場合はステレオもしくはモノラル(Type Zではモノラルのみ)、ビット長は8、サンプリング周波数が15700 Hzの物を指定する。16000 Hzでも再生出来るが、音程と再生速度が少しずれる。yを指定した場合、指定の箇所から再生される(1秒目から再生したい場合は、15700を指定)。x$に長さ0の文字列を指定すると、現在再生中の音楽が停止する。 PALETTE n,r,g,b パレット指定。 PCG x,y,z ASCIIコードがxの文字の表示キャラクターを変更する。y,zは、キャラクターデーター。詳細は、下記の項を参照。 POKE x,y xで示される物理的アドレスに、yで示される値(1バイト値)を書き込む。 POKE16 x,y xで示される物理アドレスに、yで示される値(16ビット値)を書き込む。xが奇数値の場合、例外停止するので注意。 POKE32 x,y xで示される物理アドレスに、yで示される値(32ビット値)を書き込む。xが4の倍数で無い場合、例外停止するので注意。 PRINT [ xまたはx$またはx# [ ,または; [ yまたはy$またはy# [ ... ]]]] ディスプレイに、整数値または文字列を表示する。「;」を使用した場合、次の表示が続けて行われる。「,」を使用した場合、10文字ずつに区切って表示される。どちらも使用しない場合、次の表示は行を変えて行われる。 REM xxx 何も実行しない。コメント文の挿入に用いる。 RESTORE xxx DATA読み出し開始位置を指定。xxxは行番号もしくはラベル。 RETURN 最後に実行されたGOSUB文の次のステートメントに移動する。戻り値を指定することがができる。この場合の戻り値はGOSUB()関数にて取得が可能。 SCROLL x,y 画面を横方向、もしくは縦方向(斜めも可)に動かす。動かす方向と大きさは、x, yでそれぞれ、横方向の移動度、縦方向の移動度として指定する。 SOUND xxx[,y] 効果音を再生する。詳細は、下記の項を参照。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文字までの変数名(Type Pではさらに長い名前も使用可能)を使用できるようにする。このステートメント以降でxxx, yyy等の長い変数名が使用可能となる。 VAR xxx [, yyy [, zzz [, ... ]]] サブルーチン内で使う、ローカル変数を指定する。xxx, yyy等は、A-Zのアルファベットもしくは変数名で指定する。 WAIT x xで示された時間、プログラムの実行を停止する。xが60の場合、約1秒間停止。 WHILE x|x# WEND xまたはx# が0以外の場合、WHILE文からWEND文までのステートメントを繰り返し実行する。 WIDTH x[,y] キャラクターディスプレイの横幅を文字数で指定。xは30、36、40、48、もしくは80。Type Pの場合1-40の範囲で指定する。また、y=1を指定するとディスプレイが縦長、y=2で横長となる(Type Pのみ)。 <整数型関数> 以下、x, y, zは整数値を、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()」関数も参照。 DATAADDRESS(xxx) xxxで示されたラベルの物理アドレスを返す。Type Pで使える。 DRAWCOUNT() DRAWCOUNT値を得る。DRAWCOUNTは16ビット整数値で、1/60秒ごとに1ずつ増える。 FUNCADDRESS(xxx) xxxで示されたラベルのコードアドレスを返す。Type Pで使える。 GOSUB(xxx [, y [, z [, ... ]]]) GOSUB命令と同じだが、戻り値(RETURNを参照)を得ることが出来る。xxxは、ラベルもしくは行番号。。yyy, zzz 等は、サブルーチンに引き継がれる引数(ARGS()関数を参照)。 INKEY([x]) xを指定しない場合、現在押されているキーのASCII値を返す。押されていない場合は、0。ASCII値でxを指定した場合、そのキーが押されているかどうかを返す。Type Pでは、無効。 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、Type Pでは、その限りではない。 LEN(x$) 文字列の長さを返す。 MUSIC() BGMの演奏の残り数を返す。 NOT(x) x=0の場合に1を、そうでない場合に0を返す。 PEEK(x) xで示される物理アドレスから1バイト読み取り、返す。 PEEK16(x) xで示される物理アドレスから2バイト読み取り、16ビット値で返す。xが奇数値の場合、例外停止するので注意。 PEEK32(x) xで示される物理アドレスから4バイト読み取り、32ビット値で返す。xが4の倍数で無い場合、例外停止するので注意。 PLAYWAVE([x]) xを指定しない場合、もしくは0を指定した場合、再生中のWAVEファイルの残りサンプリング数を返す。1を指定した場合、現在再生中のサンプリング番号を、2を指定した場合、WAVEファイルの総サンプリング数を返す。 READ() DATA文の後から、一つずつデーター(32ビット整数値)を読み出す。「CREAD()」関数も参照。 READKEY() キーボードバッファーから一文字読み込み、返す。バッファーが空の時は0を返す。戻り値は24ビット整数で、内容は以下の通り。 bits 0-7 : ASCII コード bits 8-15 : 仮想キーコード bits 16-23 : シフトキー押下状態。 上位から<0>。 RND() 0から32767までの擬似乱数を返す。 SGN(x) xの符号(-1, 0, または1)を返す。 STRNCMP(x$,y$,z) 2つの文字列のうちz文字分を比較し、結果を返す。同じ文字列の場合は0。 TVRAM([x]) ビデオRAMのx番目の内容を、バイト値で返す。xを省略した場合、ビデオRAMの開始位置の物理アドレスを返す。 VAL(x$) 10進数もしくは16進数文字列としての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# の小数部を実数値で返す。 NOT#(x#) x#が0の場合1を、0以外の場合0を返す。 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$) 10進数文字列としてのx$の値を、実数値で返す。 <文字列型関数> A$(x [,y])など xの値が0の場合、文字列全体を返す。 xの値が正の場合、xで示される位置より右側の文字列を返す。 xの値が負のとき、文字列の右側x文字を返す。 yが指定された場合、y文字分の文字列を返す。 ARGS$(x) サブルーチン中で、GOSUBもしくはメソッドに渡されたx番目の引数を文字列として取り出す。 CHR$(x) xをアスキーコードとする文字を返す。 DEC$(x) xの値を、10進数の文字列として返す。 FLOAT$(x#) 実数値x#を、10進数の文字列として返す。 GOSUB$(xxx [, y [, z [, ... ]]]) GOSUB命令と同じだが、戻り値(RETURNを参照)を文字列として得ることが出来る。xxxは、ラベルもしくは行番号。。yyy, zzz 等は、サブルーチンに引き継がれる引数(ARGS()関数を参照)。 HEX$(x [,y]) xの値を、16進数の文字列として返す。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 2つの整数値が等しい場合に1、そうでないときに0 x != y 2つの整数値が等しい場合に0、そうでないときに1 x < y xがyより小さい場合に1、そうでないときに0 x <= y xがyより小さいか等しい場合に1、そうでないときに0 x > y xがyより多きい場合に1、そうでないときに0 x >= y xがyより多きいか等しい場合に1、そうでないときに0 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# 2つの実数値が等しい場合に1、そうでないときに0 x# != y# 2つの実数値が等しい場合に0、そうでないときに1 x# < y# xがyより小さい場合に1、そうでないときに0 x# <= y# xがyより小さいか等しい場合に1、そうでないときに0 x# > y# xがyより多きい場合に1、そうでないときに0 x# >= y# xがyより多きいか等しい場合に1、そうでないときに0 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と同じ。 Type Pの場合 この命令により、画面がクリアーされる。常に、グラフィックとキャラクターの両方が、使用可能。ただし、x=2の場合、パレットも初期化される。 GCOLOR(x,y) グラフィック座標(x,y)の表示中パレット番号を返す。 <ファイル関連命令と関数> ファイルは、最大2つまで同時に開く事が出来ます。 FCLOSE [x] ファイルを閉じる。引数(x)がある場合は、そのファイルハンドルで指定されたファイルを閉じる。 FEOF() FOPENで開いたファイルの現在のファイル位置が、末端に到達しているかどうかを返す。1で末端に到達、0で未到達。 FFIND$([x$[,y$])) ディレクトリー中の、文字列x$(「*.BAS」など)で示されたファイルのファイル名を返す。x$を指定した場合は最初のファイル名と、x$を指定しない場合は2番目以降のファイル名を返す。ファイルが見つからない場合、空の文字列を返す。y$を指定した場合は指定のディレクトリーを、指定しない場合は現在のディレクトリーを検索する。 FGET x,y バッファー(xに配列として指定)にyバイト読み込む。関数として呼ばれた場合は、読み込みに成功したバイト数を返す。 FGETC() FOPENで開いたファイルから1バイト読み込み、整数値として返す。ファイル末端に到達しているなどで読み込みに失敗した場合、-1を返す。 FILE x アクティブなファイルハンドル(1もしくは2)をxに指定する。 FINFO(x) FFIND$()で見つかったファイルの情報を返す。 x=0の時:ファイルのサイズをバイト数で返す。 x=1の時:ファイルの作成日時を、16ビット整数で返す。ただし、 bit 15:9 1980年を起点とした年が 0..127 で bit 8:5 月が 1..12 の値で bit 4:0 日が 1..31 の値で、それぞれ入る。 x=2の時:ファイルの作成時刻を、16ビット整数で返す。ただし、 bit 15:11 時が 0..23 の値で、 bit 10:5 分が 0..59 の値で、 bit 4:0 秒/2が 0..29 の値で、それぞれ入る。 x=3の時:属性フラグを返す。ただし、 bit 0: 読み取り専用 bit 1: 隠しファイル bit 2: システムファイル bit 4: ディレクトリー bit 5: アーカイブ FINFO$(x) FFIND$()で見つかったファイルの情報を返す。 x=0の時:ファイルの作成の日時・時刻を、ISO-8601 文字列で返す。 x=1の時:ファイルの作成の日時を、文字列で返す。 x=2の時:ファイル作成時の時刻を、文字列で返す。 x=3の時:属性フラグ情報を、文字列で返す。ただし、 読み取り専用のとき"r"、そうでないとき"w" 隠しファイルのとき"h"、そうでないとき"-" システムファイルのとき"s"、そうでないとき"-" ディレクトリーのとき"d"、そうでないとき"-" アーカイブのとき"a"、そうでないとき"-" x=4の時: ファイル名を返す。 FINPUT$([x]) FOPENで開いたファイルから、xで示された長さの文字列を読み込む。xが省略された場合は、行の最後まで読み込む(改行コードが含まれる)。 FLEN() FOPENで開いたファイルのファイル長を、バイト数で返す。 FOPEN x$,y$[,z] x$で示される名前のファイルを、y$で示されたモードで開く。同時に開けるファイルの数は、2つまで。関数として呼ばれた場合は、ファイルハンドルを返す。y$としては、次のものが有効。 "r" :ファイルを読み込みモードで開く。 "r+" :"r"と同じだが書き込みも可能。 "w" :ファイルを書き込みモードで開く。同名のファイルが在る場合は、 以前のファイルは消去される。 "w+" :"w"と同じだが、読み込みも可能。 "a" :ファイルを書き込みモードで開く。同名のファイルが在る場合は、 ファイルは消去されず、ファイルの最後尾から書き込まれる。 "a+" :"a"と同じだが、読み込みも可能。 zには、割り当てたいファイルハンドル(1もしくは2)を指定する。省略した場合、1が指定される。 FPRINT [ xまたはx$またはx# [ ,または; [ yまたはy$またはy# [ ... ]]]] PRINT命令と同じだが、画面ではなくファイルに情報が書き込まれる。 FPUT x,y バッファー(xに配列として指定)のyバイト分を書き込む。関数として呼ばれた場合は、書き込みに成功したバイト数を返す。 FPUTC x xで示される1バイトのデーターをファイルに書き込む。関数として呼ばれた場合は、書き込みに成功したバイト数(1もしくは0)を返す。 FREMOVE x$ x$で示される名前のファイルもしくは空のディレクトリーを、SDカードから削除する。関数として呼ばれた場合は、削除に成功したか(0)、失敗したか(-1)を返す。 FRENAME x$,y$ x$で示されたファイル名もしくはディレクトリ名を、y$に変更する。関数として呼ばれた場合は、成功したか(0)、失敗したか(-1)を返す。 FSEEK x xで示されるファイル位置に移動する。 FSEEK() FOPENで開いたファイルの、現在のファイル位置を返す。 GETDIR$() カレントディレクトリーを文字列として返す。 MKDIR x$ x$という名のディレクトリーを、新たに作成する。関数として呼ばれた場合は、成功したか(0)、失敗したか(-1)を返す。 SETDIR x$ カレントディレクトリーをx$に移動する。関数として呼ばれた場合、成功すれば0を、エラーが有れば0以外を返す。 <タイマー関連命令と関数> タイマーは、通常タイマーとコアタイマーの2つがあります。通常タイマーは速度の設定や値の変更など出来る、汎用タイマーです。コアタイマーは、CPUクロックと同期した特殊なタイマーで、値を読む事は出来ますが設定する事は出来ません。 CORETIMER コアタイマーを用いた割り込みの時期を設定する。コアタイマーの値を変更するわけではない事に注意。コアタイマーの周波数は、Type Mで95.45453 MHz、Type Zで57.27272 MHz (グラフィック使用時は、53.693175 MHz)、Type Pでは1 MHz。 USETIMER x タイマーを開始する。xはタイマーの速度を、μ秒で指定(175769以下の値)。 TIMER x 現在のタイマー値を32ビット整数(x)で設定する。 CORETIMER() 現在のコアタイマーの値を、32ビット整数値として返す。 TIMER() タイマーの現在値を、32ビット整数値として返す。 <割り込み命令> INTERRUPT xxx,yyy[,z1[,z2 ... ]] 割り込みを設定する。xxxは割り込みの種類、yyyは割り込み時のサブルーチンをラベルで指定。z1, z2等を指定すると、割り込み用サブルーチンの引数となる。使用可能な割り込みの種類は以下の通り。 TIMER タイマー割り込み。タイマー値が1増えるごとに割り込みがかかる。 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列では、32ビット整数値として、交換音を表現します。この整数値の下位16ビットは周波数の指定です。2048が440Hz(ラの音)に対応します。値が大きくなるほど、より低い音が出ます。上位16ビットは、音の長さです。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以外の時)する。 SYSTEM(250,x) ゼロで初期化されたxバイトの領域のメモリーを割り当て、アドレスを返す(callocに相当; Type Pのみ)。 SYSTEM(251,x) xバイトの領域のメモリーを割り当て、アドレスを返す(mallocに相当; Type Pのみ)。 <入出力命令・関数> 入出力機能は、Type MとType Pで使えます。 ANALOG(x) Type Mでは、PORTBの下位からxビット目のアナログ入力値(10ビット値;0-1023の値)を返す。但し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。Type Pでは、GP26-29のアナログ入力値(12ビット値;0-4095の値)を返す。ただし、x=0, 13, 26でGP26、x=1, 14, 27でGP27、x=2, 15, 28でGP28、x=3, 16, 29でGP29が、指定される。 IN(x) Type MではPORTB、Type Pでは指定I/Oポートの下位からxビット目の入力値(1ビット値;1か0)を返す。但し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。入力はPIC内部でプルアップされる。 IN8H() Type MではPORTB、Type Pでは指定I/Oポートの上位8ビットの入力値(8ビット値)を返す。入力はPIC内部でプルアップされる。 IN8L() Type MではPORTB、Type Pでは指定I/Oポートの下位8ビットの入力値(8ビット値)を返す。入力はPIC内部でプルアップされる。 IN16() Type MではPORTB、Type Pでは指定I/Oポートの入力値(16ビット値)を返す。入力はPIC内部でプルアップされる。 PWM x[,y[,z]] PWM出力を行なう。xにはデューティー比を、0-1000の値で指定する。yはパルスの周波数を、Hzで指定する(省略した場合は、1000;有効値は6-95454)。 Type Mの場合、z=1でPORTD10に、z=2でPORTD11に出力される。zを省略した場合は、PORTD10。 Type Pの場合、z=1, 2, 3で、それぞれ、指定のPWM1, PWM2, PWM3に出力される。 SERIAL x[,y[,z]] シリアル通信を開始する。xにはボーレートを指定する(シリアル通信の使用を終了する場合は、x=0を指定)。y=0の場合パリティ無し、y=1の場合偶数パリティ、y=2の場合奇数パリティ、y=3の場合9ビットパリティ無し。yを省略した場合は、y=0と同じ。zには受信バッファーの文字数を指定する。zを省略した場合、1/60秒の連続受信が保証される大きさのバッファーを確保する。 SERIALIN([x]) シリアル通信で、一文字受信する。受信が無い場合は、-1を返す。x=1を指定すると、受信バッファーの文字数を返す。パリティ有り8ビットの受信の場合は、パリティエラーが起きた場合、0x100以上の値を返す。 SERIALOUT x シリアル通信で、一文字送信する。 OUT x,y Type MではPORTB、Type Pでは指定I/Oポートの下位からxビット目に、yで示された値(1ビット値;1か0)を出力する。但し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。PORTE5, 6, 7は、オープンドレイン出力であることに注意。 OUT8H x Type MではPORTB、Type Pでは指定I/Oポートの上位8ビットに、xで示された値(8ビット値)を出力する。 OUT8L x Type MではPORTB、Type Pでは指定I/Oポートの下位8ビットに、xで示された値(8ビット値)を出力する。 OUT16 x Type MではPORTB、Type Pでは指定I/Oポートに、xで示された値(16ビット値)を出力する。 I2C [x] I2C利用をマスターモードで開始する。xは、クロック数をkHz単位で指定(有効値は、12-3409)。省略した場合は、X=100。 I2CWRITE x[,y[,z[, ... ]] I2C固定長送信を行なう。xは7ビットのスレーブアドレス。y, z等はオプションの送信コードで、バイト値で指定。Type Pの場合、yの指定がないと、通信が全く行われないので注意。 I2CREAD(x[,y[,z[, ... ]]) I2C固定長送信の後、1バイトの受信を行なう。xは7ビットのスレーブアドレス。y, z等はオプションの送信コードで、バイト値で指定。成功した場合に8ビット値を返す。エラーの場合、-1を返す。 I2CWRITEDATA x,y,z1[,z2[,z3...]] I2C複数バイト送信を行なう。xは7ビットのスレーブアドレス。yは送信する内容を含むバッファーへのポインター。z1はバッファーのバイト数。z2, z3等はオプションの送信コードで、これらのバイト値がまず送信され、続けてバッファーyの内容がz1バイトに渡って送信される。 I2CREADDATA x,y,z1[,z2[,z3...]] I2C複数バイト受信を行なう。xは7ビットのスレーブアドレス。yは受信する内容を格納するバッファーへのポインター。z1は受信するバイト数。z2, z3等はオプションの送信コードで、これらのバイト値がまず送信され、続けてz1バイトのデーターを受信してバッファーyに格納する。 I2CERROR() 直前のI2C送受信でエラーが在った場合に0以外を、なければ0を返す。 SPI x[,y[,z1[,z2]]] SPI利用をマスターモードで開始する。xは、クロック数をkHz単位で指定(有効値は、93-47727)。yは、1ワードのビット数を8/16/32で指定(省略した場合は、8)。z1は、SPIクロックの取り扱い方を指定(省略した場合は、0)。詳細は、下記に。z2は、CSラインにどのポートを使用するかを指定する。 Type Mの場合、z2を省略した場合は、0x39(PORTD9)。他のポートを使う場合、例えばPORTB5なら0x15、PORTB3なら0x13とする。 Type Pの場合、z2を省略した場合は、3 (GP3)。他のポートを使う場合、例えばGP4(I/O bit4)なら4、GP27(I/O bit14)なら27もしくは14とする。 z1=0:アイドル時にL、データー変更はLに変化する時(CKP=0,CKE=1; CPOL=0,CPHA=0) z1=1:アイドル時にL、データー変更はHに変化する時(CKP=0,CKE=0; CPOL=0,CPHA=1) z1=2:アイドル時にH、データー変更はHに変化する時(CKP=1,CKE=1; CPOL=1,CPHA=1) z1=3:アイドル時にH、データー変更はLに変化する時(CKP=1,CKE=0; CPOL=1,CPHA=0) SPIWRITE x[,y[,z[, ... ]] SPI固定長送信を行なう。x, y, z等は送信コード。 SPIREAD([x[,y[,z[, ... ]]]) SPI固定長送信(オプション)の後、1ワードの受信を行ない、返す。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ワードに渡って繰り返す。 <オプション> Type ZとType Mでは、OPTIONステートメントを使って、コンパイル時もしくは実行時に色々なオプションを指定する事が可能です。Type Pでは、「OPTION CLASSCODE」のみが有効です。次のオプションが有ります。 OPTION NOLINENUM コンパイル時に、行番号を指定する命令を挿入しない。このオプションにより、プログラムサイズを小さくして実行速度を増加する効果が見込める。ただし、エラーが発生した場合に、どの行でのエラーかは分からなくなる。 OPTION FASTFIELD クラスを2つ以上使っている時、パブリックフィールド名の重複がない場合に、フィールドへのアクセスを高速化する。ただし、存在しないオブジェクトのフィールドにアクセスしてもエラーにならない場合があるため、予めBASICコードにエラーがない事を確認してから用いる事が望ましい。なお、クラスを一つだけしか使っていない場合は、指定しなくてもこのオプションは有効になっている。 OPTION CLASSCODE このオプションの後に、クラスを記述するコードを書く事が出来る。但し、ファイル名を「クラス名.BAS」として保存する事。この機能を用いれば、クラスを一つだけ使うコードなら、1ファイルに収める事が出来る。クラスの開発用に用いると、便利。 <クラス・オブジェクト関連機能> クラスとオブジェクトの利用方法について、詳しくはclass.txtを参照して下さい。以下は、関連する命令と関数です。 USECLASS x[,y[,z[, ... ]]] クラスの利用を宣言する。x,y,z等は、クラス名を6文字以内の英数字(Type Pでは8文字まで可能)で指定。 FIELD [PUBLIC] x[,y[,z[, ... ]]] クラスファイル中で、パブリックフィールドを宣言する。"PUBLIC"は省略可。x,y,z等はフィールド名を6文字以内の英数字(Type Pでは長い名前も可能)で指定。 FIELD PRIVATE x[,y[,z[, ... ]]] クラスファイル中で、プライベートフィールドを宣言する。x,y,z等はフィールド名を6文字以内の英数字(Type Pでは長い名前も可能)で指定。 STATIC [PUBLIC] x[,y[,z[, ... ]]] クラスファイル中で、パブリックスなタティック変数を宣言する。"PUBLIC"は省略可。 STATIC PRIVATE x[,y[,z[, ... ]]] クラスファイル中で、プライベートなスタティック変数を宣言する。USEVARと同じ。 METHOD x クラスファイル中で、メソッドを宣言する。xは、メソッド名を6文字以内の英数字(Type Pでは長い名前も可能)で指定。 NEW(x[,y[,z[, ... ]]]) クラスオブジェクトを作成し、オブジェクトへのポインターを返す。xはクラス名を指定。y,z等はコンストラクターがある際に利用される引数。 DELETE x[,y[,z[, ... ]]] 作成されたオブジェクトを破棄する。x,y,z等は、オブジェクトを格納する変数名。 CALL x xで指定されたオブジェクトのメソッドを呼び出す。「CALL」は省略可。 <リアルタイムクロック> リアルタイムクロックは、Type Pで使えます。WiFi 対応の Type P で使うときは、起動時にNTPサーバーに接続するように MACHIKAP.INI を設定するか、NTP 命令で NTP サーバーに接続する事で、現在時刻をセットしてください。WiFi 非対応の Type Pで使用する場合は、SETTIME 命令で現在時刻をセットしてください。一連の命令・関数で扱う ISO-8601 文字列は、次の例のような書式です(日付と時刻の間に「T」が挟まれています)。 2023-09-01T13:00:00(2023年9月1日午後1時0分0秒の場合) GETTIME$([x$[,y]]) (現在)時刻を文字列として返す。x$を指定しない場合は現在時刻を、ISO-8601 文字列として指定した場合は、その時刻が用いられる。yを指定した場合、y 秒後の時刻を返す(負の秒数を指定する事も可能)。 SETTIME x$ 現在時刻をセットする。x$には、現在の時刻を ISO-8601 文字列で指定する。 STRFTIME$(x$[,y$]]) (現在)時刻から、所定の情報を抽出して文字列として返す。x$には、どの情報を抽出するかを文字列で指定。y$を指定しない場合は現在時刻、ISO-8601 文字列として指定した場合は、指定時刻が用いられる。x$に指定する文字列の書式はドキュメントの strftime.html の通りだが、日本語ドキュメントはC言語のstrftime()を参照の事。例えば、 https://www.ibm.com/docs/ja/i/7.1?topic=ssw_ibm_i_71/rtref/strfti.html https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strftime.3.html <ヒント> 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"というエラーがでて、停止することがあります。この場合は、文字列を扱う命令を独立した行するか、文字列関連の演算を幾つかのステップに分けて、それぞれ1行ずつの記述にして試してみて下さい。 割り込み関数中でグローバル変数にアクセスする際は、注意が必要です。同名の変数がいずれかのサブルーチン内でVAR指定されてローカル変数としても使われている場合、いつ割り込みがトリガーされるかによって、変数値がグローバル変数の物になるかローカル変数の物になるか、不定になってしまいます。従って、割り込み関数中でグローバル変数を扱いたい場合は、同名の変数をVAR指定しないようにして下さい。 <バージョン履歴> ・KM-1505 2024年2月公開。  ・液晶を使わない場合に、SPI命令でspi1を使う事を可能にした。  ・PUTBMP命令で、横幅が長い画像を表示する際の不具合を修正。  ・ファイル一覧表示の際、ファイル更新日時の表示を可能にした。  ・ファイル一覧表示の際の、ファイル名・ファイル更新日時による表示順に対応。  ・ILI9488液晶で縦置の際の表示不具合を修正。  ・FRENAME, MKDIR 命令及びFRENAME(), MKDIR()関数の追加。  ・補助コード(auxcode)を追加できる機能を実装。 ・KM-1504 2023年10月公開。  ・embed用のBASICプログラムで、ファイルの読み取りに対応。  ・embed用に組み込むことができるファイル数が、合計16個に増加。  ・浮動小数点の表示や文字列の扱いの際、間違った値になる不具合を修正。 ・KM-1503 2023年9月公開。  ・Raspberry Pi Pico W を用いた WiFi 接続に対応。次の命令・関数を追加: DNS$(), IFCONFIG$(), NTP, TCPACCEPT(), TCPCLIENT, TCPCLOSE, TCPRECEIVE, TCPSEND, TCPSERVER, TCPSTATUS, TLSCLIENT, WIFIERR(), WIFIERR$()  ・GCOLOR()関数の不具合を修正  ・一部USBキーボードでのキー入力不具合に対応  ・EOFの時、FGETC()関数が-1を返すようにした  ・embed用にXIAO RP2040, RP2040-Zero, and Tiny-2040に対応  ・SPIの対応ポートをINIファイルで指定出来るようにした  ・SERIALステートメントの第3引数を省略した時の不具合を修正  ・例外をトラップして画面表示するようにした  ・CORETIMERが電源投入後およそ2000秒後から不具合を起こす事を修正  ・ILI9488に対応  ・RTC(Real Time Clock)をサポート。次の命令・関数を追加: GETTIME$(), SETTIME. STRFTIME$()  ・ファイル保存時の日時設定をサポート  ・NTPサーバーによるRTCのセットをサポート  ・SYSTEM 201 呼び出しにより、ボード付属のLEDのオン・オフを出来るようにした  ・メモリーアロケーションの不具合を修正  ・FREMOVE/SETDIR等のファイル関連命令を使用時の、ガベージコレクション不具合を修正  ・WAVEプレーヤーの安定性を改善  ・クラスのスタティックメソッド呼び出し不具合を修正  ・FFINGD$(), FINFO(), FINFO$()の3つの関数を追加。ファイル一覧の作成が可能に  ・REM 文に「"」を含む際のコンパイル時の不具合を修正 ・KM-1502 2023年1月公開。  ・USBキーボード及びエディターがサポートされたことに伴い、INKEY()・READKEY()・INPUT$()の3つの関数と、INKEY割り込み機能を整備  ・クラスファイルコンパイル時に一部の環境で生じる不具合を修正  ・ALIGN4ステートメント・DATAADDRESS()関数・FUNCADDRESS()関数を追加  ・タイマー割り込みのタイミングが少しずれていたのを修正  ・SYSTEM()に、メモリーアロケーション関連の機能を追加  ・文字列で「\r」「\t」のエスケープシークエンスが使用可能に  ・OPTION CLASSCODEに対応  ・BASICプログラム実行中でのカードの抜き差しが可能に ・KM-1501 2022年10月公開。  ・NOT#()関数を追加  ・クラス中で別のクラスを使うとコンパイルできない不具合を修正  ・クラスのスタティック関数呼び出しの不具合を修正  ・オブジェクトのフィールドに、文字列・配列を割り当てることを許可  ・一定時間後にWAVEファイルの再生が止まる不具合を修正  ・割り込み中でのWAIT・DELAYMS・DELAYUSステートメントの使用を許可  ・MUSICステートメントが一部の環境でエラーで停止する不具合を修正 ・KM-1500 2022年8月公開。 ・KM-1303 2019年5月公開。  ・タイマー機能(USETIMER,TIMER, CORETIMERステートメントとTIMER(), CORETIMER()関数)を追加。  ・割り込み機能(INTERRUPTステートメント)を追加。  ・オプション機能(OPTIONステートメント)を追加。  ・アイドル機能(IDLEステートメント)を追加。  ・READKEY()関数を追加。  ・EXEC()関数を追加。  ・変数名などで、英数字に加えてアンダースコアーが使用可能に。  ・PRINTでカンマを使った時の表示不具合を修正。 ・KM-1302 2019年3月公開。  ・オブジェクト指向プログラミングに対応  ・args(0)で引数の数を取得できるようにした  ・POKE16, POKE32, PEEK16(), PEEK32()を追加  ・&演算子を追加  ・GETDIR$()関数とSETDIRステートメントを追加 ・KM-1301 2018年12月公開。  ・I2C機能を搭載  ・SPI機能を搭載  ・PUTBMPの第5引数に長い名前の変数が使えなかったバグの修正 ・KM-1300 2018年8月公開。