ORANGE-lightは、いろいろなデバイスで動作することを目指した軽量BASICです。
以下の特徴があります。
・ORANGE-studioでコンパイルしたオブジェクトは、ORANGE-inside(ブートローダー+仮想マシン)が実装されたマイコンシステムで動作します。
・整数型のBASICです。
・行番号は不要です。
・変数名や名札、関数名の長さに制限はありません。
・パラメーター付きの関数を定義できます。
・関数内でローカル変数が使用できます。
・C言語で記述した関数も呼び出せます。
・豊富な演算子を装備しています。
・メモリー配列という概念で、メモリーアクセスを実現します。
・I/O制御関連の命令を装備し、簡単にI/O制御ができます。
|
1.文
ORANGE-lightのプログラムは、文で構成されます。行番号は不要です。
|
プログラム1-1 |
|
説明 |
|
a = 1 |
|
代入文 |
|
b = 10 |
|
代入文 |
|
print a + b |
|
print文 |
文と文の間を「:」で区切って、1行の中に文を複数書くこともできます。
|
プログラム1-2 |
|
説明 |
|
a = 1: b = 10: print a + b |
|
3個の文を1行に記述 |
文の詳細はリファレンスマニュアルを参照してください。
|
2.注釈
プログラム中の「'」(または「//」)から行末までは注釈(コメント)として扱い、プログラムとして無視されます。
注釈には日本語を使うことができます。
|
|
3.名札
文の前に名札(ラベル)を置くことができます。名札はgoto文やgosub文の参照先となります。
名札は名札名に「:」を付けたものです。
名札名は、アルファベット(a~z、A~Z)で始まり、アルファベット、数字、または「_」を含めることができます。
|
プログラム3-1 |
|
説明 |
|
start: |
|
名札 |
|
print 100 |
|
100を表示 |
|
goto start |
|
名札startに制御を移動 |
|
4.式
文の中には式を書くことができます。
式は整数、文字列、変数、関数、演算子などで構成されます。
|
5.整数
整数は-32768~32767までの10進数を表現できます。
数字の先頭に0xを付加すると16進数(0x0000~0xffff)を表現できます。
|
プログラム5-1 |
|
説明 |
|
print 32767 |
|
32767を表示 |
|
print 32768 |
|
エラー |
|
print 0xffff |
|
-1を表示 |
|
6.文字列
文字列は「"」と「"」で囲みます。
|
プログラム6-1 |
|
説明 |
|
print "ABC" |
|
ABCを表示 |
|
7.変数
変数は、整数のみを格納できます。
変数名は、アルファベット(a~z、A~Z)で始まり、アルファベット、数字、または「_」を含めることができます。
変数名の長さには制限がありません。
|
プログラム7-1 |
|
説明 |
|
orange_light = 10000 |
|
変数orange_lightに10000を代入 |
|
print orange_light |
|
変数orange_lightの内容表示 |
|
8.関数
式の中に関数を書くことができます。また、関数は文としても使用できます。関数の詳細はリファレンスマニュアルを参照してください。
|
プログラム8-1 |
|
説明 |
|
print rnd(6) |
|
0~5の乱数を表示 |
|
print rnd(6) + 1 |
|
1~6の乱数を表示 |
あらかじめ用意されている関数の他に、ユーザーが関数を定義することもできます。
関数定義はメインプログラムの後に記述します。
|
プログラム8-2 |
|
説明 |
|
print calc(10, 20) |
|
calc関数を呼び出し、結果を表示 |
|
end |
|
プログラムの終了 |
|
|
|
|
|
def calc(x, y) { |
|
calc関数の定義開始 |
|
retrun 10 * x + y |
|
10 * x + yの値をcalc関数の値とする |
|
} |
|
calc関数の定義終了 |
関数の定義の中で他の関数を呼びだすことができます。また、定義中の関数自身を呼ぶこともできます。(再帰呼び出し)
次のプログラムは5の階乗を計算するプログラムです。
|
プログラム8-3 |
|
説明 |
|
print fact(5) |
|
fact関数を呼び出し、結果を表示 |
|
end |
|
プログラムの終了 |
|
|
|
|
|
def fact(n) { |
|
fact関数の定義開始 |
|
if n = 1 then return 1 |
|
nが1のときは、1をcalc関数の値とする |
|
return n * fact(n - 1) |
|
n * fact(n - 1)の値をfact関数の値とする |
|
} |
|
fact関数の定義終了 |
extern文で関数を宣言しておくと、C言語で記述した外部関数を呼び出すこともできます。
(外部関数はORANGE-inside内の外部関数ハンドラーに記述します。詳細はSDKを参照してください。)
|
プログラム8-4 |
|
説明 |
|
extern mean, 1 |
|
C言語で記述した関数の宣言 |
|
|
|
|
|
print mean(1, 2, 3, 4, 5) |
|
mean関数を呼び出し、結果を表示 |
|
9.ローカル変数
関数定義の中ではローカル変数が使えます。
グローバル変数(通常の変数)はプログラム中のどこでも参照できますが、ローカル変数は関数定義内だけで参照できます。
|
プログラム9-1 |
|
説明 |
|
print calc(10, 20) |
|
calc関数を呼び出し、結果を表示 |
|
print z |
|
zの値を表示(このzはローカル変数のzではないので、0が表示される) |
|
end |
|
プログラムの終了 |
|
|
|
|
|
def calc(x, y) { |
|
calc関数の定義開始 |
|
var z |
|
ローカル変数zの宣言 |
|
z = 10 * x + y |
|
zに10 * x + yの値を代入 |
|
return z |
|
zの値をcalc関数の値とする |
|
} |
|
calc関数の定義終了 |
|
10.演算子
式の中で以下の演算子が利用できます。
一つの式の中に複数の演算子が現れた場合には、各演算子の優先順位と結合規則によって演算の順番が決まります。
「(」と「)」で囲むことによって、優先度を変更できます。
優先順位 |
演算子 |
結合法則 |
名称 |
書式 |
意味 |
1 |
+ |
右から左 |
単項+演算子 |
+x |
無作用 |
1 |
- |
右から左 |
単項-演算子 |
-x |
xの符号反転 |
1 |
! |
右から左 |
論理否定演算子 |
!x |
xの論理反転 |
1 |
not |
右から左 |
論理否定演算子 |
not x |
xの論理反転 |
1 |
~ |
右から左 |
補数演算子 |
~x |
xのビットパターン反転 |
2 |
* |
左から右 |
乗算演算子 |
x * y |
x × y |
2 |
/ |
左から右 |
除算演算子 |
x /y |
x ÷ y |
2 |
% |
左から右 |
剰余演算子 |
x % y |
xをyで割った余り |
2 |
mod |
左から右 |
剰余演算子 |
x mod y |
xをyで割った余り |
3 |
+ |
左から右 |
加算演算子 |
x + y |
x + y |
3 |
- |
左から右 |
減算演算子 |
x - y |
x - y |
4 |
<< |
左から右 |
左シフト演算子 |
x << y |
xをyビット分左シフト |
4 |
>> |
左から右 |
右シフト演算子 |
x >> y |
xをyビット分右シフト |
5 |
< |
左から右 |
関係演算子 |
x < y |
xがyより小さい場合はに1、それ以外それ以外は0 |
5 |
<= |
左から右 |
関係演算子 |
x <= y |
xがyより小さいか等しい場合は1、それ以外それ以外は0 |
5 |
> |
左から右 |
関係演算子 |
x > y |
xがyより大きい場合は1、それ以外それ以外は0 |
5 |
>= |
左から右 |
関係演算子 |
x >= y |
xがyより大きいか等しい場合は1、それ以外それ以外は0 |
6 |
= |
左から右 |
等価演算子 |
x = y |
xとyが等しい場合は1、それ以外それ以外は0 |
6 |
== |
左から右 |
等価演算子 |
x == y |
xとyが等しい場合は1、それ以外それ以外は0 |
6 |
!= |
左から右 |
非等価演算子 |
x != y |
xとyが等しくない場合は1、それ以外それ以外は0 |
6 |
<> |
左から右 |
非等価演算子 |
x <> y |
xとyが等しくない場合は1、それ以外それ以外は0 |
7 |
& |
左から右 |
ビットAND演算子 |
x & y |
xとyのビット毎の論理積 |
8 |
^ |
左から右 |
ビットXOR演算子 |
x ^ y |
xとyのビット毎の排他的論理和 |
9 |
| |
左から右 |
ビットOR演算子 |
x | y |
xとyのビット毎の論理和 |
10 |
&& |
左から右 |
論理積演算子 |
x && y |
xとyの論理積 |
10 |
and |
左から右 |
論理積演算子 |
x and y |
xとyの論理積 |
11 |
|| |
左から右 |
論理和演算子 |
x || y |
xとyの論理和 |
11 |
or |
左から右 |
論理和演算子 |
x or y |
xとyの論理和 |
|
11.メモリー配列
メモリー配列とは、実行時に確保済みの汎用に使えるメモリーのことで、特定の文または関数を通してアクセスできます。
・メモリー配列の大きさは?
固定サイズです。大きさは、ORNAGE-insideの実装により異なります。
(ORANGE-studioでは4kバイト、LPC1114版では320バイト)
・メモリー配列にデータを書き込むには?
mpoke文はメモリー配列にバイト単位でデータを書き込みます。
mpokew文はメモリー配列にワード単位でデータを書き込みます。
・メモリー配列からデータを読むには?
mpeek関数で指定したアドレスのデータをバイト単位で取得できます。
mpeekw関数で指定したアドレスのデータをワード単位で取得できます。
|
プログラム11-1 |
|
説明 |
|
mpoke 16, 1 |
|
16番地(バイト)に1を書く |
|
mpoke 17, 2 |
|
17番地(バイト)に2を書く |
|
mpokew 1, 1000 |
|
1番地(ワード)に1000を書く |
|
x = mpeek(16) |
|
16番地(バイト)にあるデータを変数xに代入 |
|
y = mpeek(17) |
|
17番地(バイト)にあるデータを変数yに代入 |
|
z = mpeekw(1) |
|
1番地(ワード)にあるデータを変数zに代入 |
|
print x + y + z |
|
x + y + zの値を表示 |
|
メモリー配列16進表示(バイト単位でみた場合)、実行前 |
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
0000 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0010 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0020 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0030 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
|
メモリー配列16進表示(ワード単位でみた場合)、実行前 |
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0010 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
|
|
メモリー配列16進表示(バイト単位でみた場合)、実行後 |
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
0000 |
00 |
00 |
03 |
E8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0010 |
01 |
02 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0020 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0030 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
|
メモリー配列16進表示(ワード単位でみた場合)、実行後 |
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
0000 |
0000 |
03E8 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0102 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0010 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
0000 |
|
|
|
|