TTA-8

TinyBASIC改 文法書 v1

TTA-8 のための小さな BASIC。PC(ブラウザ/Node.js)の上で TTA-8 の機械語に「翻訳(コンパイル)」してから動かす。

BASIC  --(tools/tbasic.js)-->  アセンブリ  --(tools/tta8asm.js)-->  機械語 (program.hex)

1. プログラムの形

2. 変数と数

もの 書き方 説明
変数 $A〜$Z、$0〜$5 全部で32個。0〜255 の数が1つ入る
数 12、0b101010、0x2A 10進・2進・16進。0〜255

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 メモ コメント(行ののこりは全部無視)

5. できないこと(v1)

できないこと 理由・代わりの方法
< > で比べる <> を使ってくりかえす(例:IF $I <> 10 THEN GOTO 20)
かっこ ( ) 式を2行に分ける
GOSUB の中で GOSUB 戻り先を1つしかおぼえられない(スタックがない)
PEEK($A) のように番地を変数で指定 TTA-8 の命令は番地が決まっている
PRINT / 文字 画面がない。LED に OUT する

6. どう翻訳されるか(例)

40 $C = $A + $B

↓

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. 使い方

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 を参照。