以前(と言っても10年前^^;)PB-1000/Cを使っていて、変数を定義しすぎると、実行速度の低下するので非常に気になっていました。
疑問に思った私は調べてみました(私にも出来そうだったので)・・・ら、意外な事実がっ!
まず、変数の「どの形式の」「変数名」や「どこに格納されているか」をメモリーマップ内の「変数テーブル」中に保管しています。
変数テーブルの位置はメモリーマップ上のラベルの
DTTB から TOSDT までです。
DTTB | PEEK(&H693C)*256+PEEK(&H693B) |
TOSDT | PEEK(&H693E)*256+PEEK(&H693D) |
変数テーブルの内容は上記のアドレス内で以下の様に構成されています。
変数B$の場合 |
アドレス (DTTBから) |
+0 | +1 | +2 | +3 | +4 | これが変数を定義した順番に 続いていきます…。 |
内容(H) | 20 | 01 | 42 | 74 | 87 | |
解説 | 20H=文字変数 28H=数字変数 |
変数の 文字数 |
変数名 (この場合は"B"の アスキーコードを示す。 設定した文字数分だけ並ぶ) |
データが収納されている アドレス(&H8774) |
1−単純変数の場合
内容が"JUN"の場合 |
アドレス (上記のアドレスから) |
+0 | +1 | +2 | +3 |
内容(H) | 03 | 4A | 55 | 4E |
解説 | 文字数 | "J"を示す。 (アスキーコード) | "U"を示す。 (アスキーコード) | "N"を示す。 (アスキーコード) |
2−配列変数の場合
DIM X$(7)で定義し、X$(0)="JUN" X$(2)="TEST"の場合(他は未定義) |
アドレス (上記のアドレスから) |
+0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +A | +B | +C | +D | +E | +F | +10 | +11 |
内容(H) | 01 | 07 | 00 | 03 | 4A | 55 | 4E | 00 | 04 | 54 | 45 | 53 | 54 | 00 | 00 | 00 | 00 | 00 |
解説 | 配列変数のヘッダ部 "01""00"は固定で "07"部分は最大配列数 |
X$(0)の内容。 "03"は文字数。 "4A 55 4E"で "JUN"を示す。 |
X$(1)の内容。 未定義の時は "00"になる。 |
X$(2)の内容。 "04"は文字数。 "54 45 53 54"で "TEST"を示す。 |
X$(3)〜X$(7)の内容。 未定義の為、"00"と なる。 |
数値変数に関しては数学的知識自体が未熟な事から解析できませんでした。(涙)←どなたか愛の手を・・。(笑)
上記の通り、最後に定義した変数を参照するには、最初に定義した変数から順々に参照していかないといけない仕組みになっています。
よって、変数の定義する順番を考えたり、定義する変数の数を抑えたりする必要がありそうです。
(これで「草薙の剣」は3回ほど作り直しました…。)
Written by JUN AMANO
※参考文献:「カシオPB-1000テクニカルハンドブック(株式会社モダン編/学習研究社発刊」