Arduboy 実験34

写経しつつ、変数の名前やらコードを変えてるのでのんびりやってます。
今更、Basicの成り立ちを読んでみました。

細かい差異はあるが、当時のものは概ね以下のような仕様であった。

・単純変数はA~Zの26個のみ。
・配列は@のみ。
・データ型は2バイト整数のみ。
・グラフィックやスクリーンエディットの機能はない。

Tiny BASIC - Wikipedia

豊四季タイニーBASICの基本機能を備えたものを公開します。
機能は次の2点をのぞいてパロアルトタイニーBASICと共通です。

第1に、記述の省略形がありません。
第2に、強制的な中断に使うキーは、(中略)[ESC]です。

ということでマニュアルを割愛します。

豊四季タイニーBASICのリファレンスを公開 | 電脳伝説 Vintagechips


ちょうどタイミングよく、Arduinoに移植をされている方が情報を公開して頂いてます。
豊四季タイニーBASIC Arduino版のフリーエリアを増やす実験(1) - Qiita


実験(2)のフリーエリアを増やすには?という項目。
やっぱりそうなっちゃうよなーというのが正直な感想です。

+const char kw0[] PROGMEM = "GOTO";
+const char kw1[] PROGMEM = "GOSUB";

(中略)

+const char * const kwtbl[] PROGMEM = {
+  kw0, kw1, kw2,

(以下略)

gccはほんと仕事してほしいです。
僕はこの書き方が好きではないのでメモリが増えてもいい、というトレードオフをしてるけど、
今回はこちらを採用しそうです。


ちなみにゴールは、以下のfuractal.bas(セルオートマトン)を動かすことにしました。
んー、PSET, DIMはないので手直ししないといけないなあ。

10  CLS 3
20  NX=239:NY=80
30  DIM X(240),Y(240)
35  REM --------------------------------
40  X(120)=1
50  PSET(120,0),1
55  REM --------------------------------
60  FOR K=1 TO NY-1
70    FOR I=120-K TO 120+K
80      Y(I)=(X(I-1)+X(I+1)+X(I)) MOD 2
90      PSET(I,K),Y(I)*7
100   NEXT
110   FOR I=0 TO NX
120     X(I)=Y(I)
130   NEXT
140 NEXT
145 REM --------------------------------
150 END