LAST:2010-01-31
CASIOの名機PB-100風BASICインタープリタをつくりました。あくまで”風”なのでPB-100のリストがそのまま動く訳ではありません。
実行にはMATH.LIBが必要です。
1ステップ1バイトです。ひとつのプログラムエリアは4KBあります。
最大9999行まで入力できます。
1行最大80文字まで入力できます。
P0〜P9まであります。
1行分の編集バッファ。ここにリストを入力していきます。
現在のエリアをクリアします。
現在の行をクリアします。
現在の行+10された行番号が入力されます。
現在の行+100された行番号が入力されます。
ひとつ前の行を表示します。
ひとつ後の行を表示します。
入力したプログラムを実行します。
よく使うBASICコマンドを入力します。
よく使う数値関数を入力します。
PBシリーズでおなじみの記号を入力します。
1行分のBASICリストを入力したら、[EXE]ボタンでバッファに格納されます。
フィールドに1行ずつリストを入れていきます。 リストが空の状態だと
10 'READY P?
と表示されています。(?は現在のプログラムエリア)
たとえば
10 PRINT"HELLO WORLD!!"
と入力して、最後に[EXE]ボタンを押せば1行入力した事になります。[EXE]ボタンを押とフィールがクリアされるので、続けて20行、30行とリストを入力していきます。
注意
改行では入力が確定したことにはなりません。
必ず[EXE]ボタンを押してください。
[RUN]ボタンで実行されます。
プログラムが正常に終了すれば”DONE.”と表示され、エラーがあればエラー行が表示されます。
[BREAK]ボタンで編集画面に戻ります。
文字列処理は2バイトコードを想定していません。
遅いです。
ARM機種でやっとE500レベルのスピードになります。
グラフィックは扱えませんがドット単位で表示が出来、フォントの色も変えられます。
まだいろいろ不具合があるかもしれません。気がつかれたらメールや、掲示板等でお知らせください。
2010-02-01
暫定版
A〜Zの26メモリが数値変数として使用できる。
$をつけると文字変数として使用できる。数値変数も文字変数も同じ領域を使用しているので、AとA$を同時に使用できない。
数値変数はdouble型の浮動小数として扱われ、文字変数は7文字まで格納される。
例)
A=10
A=1.5
A$="ABC"
A$="ABCDEFG"
また、専用文字変数$がある。$は最大62文字まで格納できる。
[PB-100との違い]
数値変数は浮動小数で扱われるので浮動小数の一般的な問題に十分注意してください。(0.1を10回足しても1にならない等)
本インタープリタでは小数点以下10桁まで認識します。
比較する時は11桁で四捨五入されます。
変数名のあとに括弧をつけて配列を指定できる。ただし、A(1)はBと同じ領域を指す。
例)
A(0)=1 Aと同じ
A(10)=1 Kと同じ
A$(0)="ABC" A$と同じ
[PB-100との違い]
ありません。
数値関数、文字関数、加減乗除、剰余、括弧がある。
優先順位は
1 −,(),関数
2 ×,÷,%
3 +,−
となる。
[PB-100との違い]
剰余”%”が追加されています。
=,≠,<,>,≦,≧が使用できる。
[PB-100との違い]
ありません。
数値演算の式。
A+B
A+100+1.005
A(5)*100+(10/2)
など。
[PB-100との違い]
ありません。
文字列の連結式。
A$+B$
B$+"AAABBB"
A$(5)+$
など。
[PB-100との違い]
ありません。
行番号 コマンド|代入文|注釈 [:コマンド|代入文]*
行番号は1〜9999まで指定できる。また、複数の命令を:で区切って1行に入力できる。
例)
10 INPUT"hoge",A$:PRINT A$
20 GOTO 10
30 END
[PB-100との違い]
ありません。
行番号は2ステップ、1行の文字数記録に1ステップ、BASICコマンド、関数は1ステップ、その他は1文字1ステップ、行末1ステップとなる。
他にバッファのアライメントを揃える為に1ステップ追加されることがある。
例)
100 IF A=0 ; PRINT"hogehoge" 20ステップ
[PB-100との違い]
1行の文字数を記録するための1ステップ、アライメントを揃えるための1ステップが余分に消費されます。
すべての変数をクリアします。
画面をクリアします。
プログラムを終了します。
左辺の変数に右辺の式の値を代入します。
LETは省略可能です。(というかいちいち書きませんよね)
'以降は注釈として扱われます。
キーボード、ガラフィティから文字列を変数に入力します。
メッセージ文がある場合は表示し、無い場合は?を表示して入力待ちになります。
入力は最下段のフィールドで受け付けます。
例)
10 INPUT "HANKEI?" , A
20 PRINT "MENSEKI"; A*A*π
リアルタイムに入力された文字コードを返します。
ハードキーは○△□×の文字コードを、上下スクロールキーは↑↓の文字コードを返します。
例1)
10 IF KEY="○" ; PRINT "OK!"
例2)
10 A$=KEY
20 IF A$="↑" ; PRINT "OK!"
30 GOTO 10
CSRで指定した位置に表示します。
数値変数は小数点以下がある場合は浮動小数形式で表示します。
PRINT文のみの場合は画面をクリアします。
;で区切ると前の表示に続けて出力します。
PRINT文のX,Y座標を設定します。
表示位置はドット単位で指定できます。
式にジャンプします。
比較式が真の場合THEN以降を実行します。
THENは;で代用できます。
FOR文からNEXT文までの間を制御変数を初期値から終値まで刻み値で変化させながら繰り返します。
4重まで入れ子にできます。
ループが終了したとき、制御変数は終値を越えた値になります。
例)
10 VAC
20 FOR A=1 TO 1000 STEP 10
30 PRINT A
40 NEXT A
サブルーチンへ分岐します。
8重まで入れ子に出来ます。
サブルーチンから復帰します。
電源をオンにしてからの経過時間を返します。(TICK値)
文字変数の文字数を返します。
$に記憶されている文字列の、指定した位置から指定文字数を取り出します。
数字を数値に変換します。
数値を数字に変換します。
三角関数を返します。
戻り値はラジアンです。
逆三角関数を返します。
戻り値はラジアンです。
常用対数を返します。
自然対数を返します。
指数を返します。
平方根を返します。
絶対値を返します。
符号を返します。
引数を越えない最大の整数を返します。
引数の小数部を値とする関数です。
0から引数までのランダムな値を返します。
引数のインデックス色にフォントカラーを変更します。