写経しつつ、変数の名前やらコードを変えてるのでのんびりやってます。
今更、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