写経しつつ、変数の名前やらコードを変えてるのでのんびりやってます。
今更、Basicの成り立ちを読んでみました。
細かい差異はあるが、当時のものは概ね以下のような仕様であった。 ・単純変数はA~Zの26個のみ。 ・配列は@のみ。 ・データ型は2バイト整数のみ。 ・グラフィックやスクリーンエディットの機能はない。
豊四季タイニー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