2017/12/01

SC-3000のBASIC環境に関するメモ(その2)

BASIC LEVELⅢBとHOME BASICの差異について調べた事のメモ。

※BASIC LEVELⅢBについてはEnriさんの解析された資料を参照させて頂きました。

(以下メモ)

格納アドレス

  • BASIC LEVELⅢB:9800H~ (8160H,8161Hに先頭アドレスを格納)
  • HOME BASIC:9B0AH~ (8602H,8603Hに先頭アドレスを格納)

構造

10 PRINT"SC-3000"
…と入力した場合
  • BASIC LEVELⅢB
    0A  - プログラム長さ
    0A 00  - 行番号
    00 00
    91 22 53 43 2D 33 30 30 30 22  - PRINT"SC-3000"
    0D  - 行の終わり
    00 00  -  エンドマーク
  • HOME BASIC
    0B  - プログラム長さ
    0A 00  - 行番号
    00 00
    01 91 22 53 43 2D 33 30 30 30 22  - PRINT"SC-3000"
    0D  - 行の終わり
    00 00  -  エンドマーク
何らかの状況で値が変化するのかもしれないが、HOME BASICはプログラム行の開始が命令、変数にかかわらず先頭に01Hが付加されるようだ。

中間言語について 

BASIC LEVELⅢとHOME BASICの命令に差異があるが、両方に含まれるコマンド、ステートメント、演算子の中間言語は殆ど同一のようだが、関数については全く異なる。

※余談だが、HOME BASICに『PLENISCOIN(中間言語6DH)』という命令があるが、何をするものだろう?

あとは数値の実数・整数型の際による表現方法も異なるはず。(未確認)

変換できそうな気もするが、 今の自分のレベルだと、変換方法を考えるより手打ちした方がまだ速そう…。

おわり


(追記)
HOME BASICのBASICプログラム格納アドレスについて、プログラムの有無にかかわらず『NEW』コマンドを入れる毎に開始アドレスが9B3EH,9B72H…とズレてしまう様子。
実機では未チェックだが、eSC-3000とMAMEの両方で同じ状態になる。

これを繰り返すことでオーバーフローするのかまで調べるつもりは無いが、バグなのか解析ミスなのか…。

(追記2)
HOME BASICのバグ(?)について、SC-3000実機でも同じ状況であることを確認した。
エミュレータ上でのチェック時は未確認だったが、
PRINT FRE
と入力した時の値も減少している。

フリーエリアはリセットボタン押下や、8602H,8603Hの値を書き直してみても回復せず、電源スイッチOFF-ONしなければならないようだ。
まあ、これで困るほどプログラム書き溜めていないんだけれど…。

1 件のコメント: