ORANGE-light ユーザーズマニュアル

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
<< 左から右 左シフト演算子  x << y  xをyビット分左シフト
4 >>  左から右 右シフト演算子  x >> y  xをyビット分右シフト
< 左から右 関係演算子 x < y  xがyより小さい場合はに1、それ以外それ以外は0
<= 左から右 関係演算子 x <= y  xがyより小さいか等しい場合は1、それ以外それ以外は0
> 左から右 関係演算子 x > y  xがyより大きい場合は1、それ以外それ以外は0 
>= 左から右 関係演算子 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

 
 Home