TinyBASIC改 文法書 v1
TTA-8 のための小さな BASIC。PC(ブラウザ/Node.js)の上で TTA-8 の機械語に「翻訳(コンパイル)」してから動かす。
BASIC --(tools/tbasic.js)--> アセンブリ --(tools/tta8asm.js)--> 機械語 (program.hex)
1. プログラムの形
- 1行に1つ、行番号(10, 20, 30 …)から書きはじめる。行番号は下の行ほど大きくする。
: で区切ると、1行に文をいくつも書ける。
- 大文字・小文字はどちらでもよい。
2. 変数と数
| もの |
書き方 |
説明 |
| 変数 |
$A〜$Z、$0〜$5 |
全部で32個。0〜255 の数が1つ入る |
| 数 |
12、0b101010、0x2A |
10進・2進・16進。0〜255 |
- 255 をこえると 256 をひき、0 より小さくなると 256 をたす(8bit なので)。
- コンパイラが使う変数:WAIT を使うと
$4、GOSUB を使うと $5、OR を使うと $3 を使う。ぶつかるとエラーで教えてくれる。
3. 式
項 [ 演算子 項 ] [ 演算子 項 ] ... (左から順に計算する。かっこはない)
| 項 |
意味 |
|
演算子 |
意味 |
5 |
数 |
|
+ |
たし算 (ALU_ADD) |
$A |
変数 |
|
- |
ひき算 (ALU_SUB) |
IN |
ボタン(S1=1, S2=2, 両方=3) |
|
AND |
どちらも1のビットだけ1 |
PEEK(番地) |
番地を読む(番地は数だけ) |
|
OR |
どちらかが1のビットは1 |
| |
|
|
NAND |
AND の反対 (ALU_NAND) |
4. 文
| 文 |
例 |
意味 |
| 代入 |
$A = $B + 1、LET $A = 3 |
変数に入れる |
OUT 式 |
OUT 0b000001 |
LED に出す(1 のビットが光る。右はしが bit0) |
POKE 番地, 式 |
POKE 127, 5 |
番地に書く(番地は 0〜127 の数だけ) |
IF 式 = 項 THEN … |
IF $M = 1 THEN GOTO 300 |
おなじなら THEN のあとを実行 |
IF 式 <> 項 THEN … |
IF IN <> $M THEN GOTO 100 |
ちがうなら THEN のあとを実行 |
GOTO 行 |
GOTO 100 |
その行へ飛ぶ |
GOSUB 行 / RETURN |
GOSUB 900 |
その行へ行き、RETURN で戻る |
WAIT 式 |
WAIT 50 |
式 × 0.01秒 待つ(50 で 0.5秒) |
END |
END |
おわり(そこで止まる) |
REM |
REM メモ |
コメント(行ののこりは全部無視) |
THEN のあとには GOTO 行、行番号だけ、またはふつうの文を書ける。: で続けた文も、条件が合うときだけ実行される。
- 比べられるのは
= と <> だけ(TTA-8 には「0 かどうか」しか調べる仕組みがないため)。
- プログラムの最後まで来ると、自動で止まる。
5. できないこと(v1)
| できないこと |
理由・代わりの方法 |
< > で比べる |
<> を使ってくりかえす(例:IF $I <> 10 THEN GOTO 20) |
かっこ ( ) |
式を2行に分ける |
GOSUB の中で GOSUB |
戻り先を1つしかおぼえられない(スタックがない) |
PEEK($A) のように番地を変数で指定 |
TTA-8 の命令は番地が決まっている |
PRINT / 文字 |
画面がない。LED に OUT する |
6. どう翻訳されるか(例)
↓
READ $A ; V = $A
WRITE ALU_A ; ALU_A = V
READ $B ; V = $B
WRITE ALU_B ; ALU_B = V
READ ALU_ADD ; V = ALU_A + ALU_B
WRITE $C ; $C = V
IF $M = 1 THEN GOTO 300 は「ALU_A = $M − 1 を計算して、0 なら JZ でジャンプ」になる。
WAIT は 1回 10命令のループで、CPU が1秒に1000命令なので 1回 = 0.01秒。
7. 使い方
- ブラウザ:デバッガ(debugger/index.html)の「BASIC」タブで「かきかえる」→「くみたてる」。
- コマンド:
node tools/tbasic.js programs/basic/flasher.bas → .asm / .hex / .lst ができる。
.hex を hdl/program.hex にコピーして FPGA に書きこむ。
- テスト:
node tools/test.js(式・IF・GOSUB・WAIT・エラーなど 32 項目)
8. サンプル(programs/basic/)
| ファイル |
内容 |
大きさ |
| flasher.bas |
LED フラッシャー(ボタンで4つの模様) |
170 バイト |
| add.bas |
3 + 5 を LED に出す |
20 バイト |
| count.bas |
LED で 2進数カウンター |
34 バイト |
| multiply.bas |
6 × 7 をたし算のくりかえしで(答え 42 = 101010) |
38 バイト |
わり算のサンプル programs/basic/divide.bas と解説は 発展1 を参照。