FT245RL用BASICリスト移動ユーティリティー、その2

前回の続きになります。

・下のURL使い、BASICリストの移動アルゴリズムを簡単に
説明します。尚、中間言語の先頭アドレスは $790 とします。
https://imgur.com/a/AKF2Piz

尚、ソースも併せて御覧下さい、上はイメージです。

PCで保管してる「F-BASIC 中間言語」ファイルを変数領域
(メモリ)に読み込みます。FM-7 に展開してる時は $790
から格納されてましたがPCのメモリに読み込んだ時は、先頭
位置は 0x0000 ですので「cur_pos」は「0x0000」です。
また「cur_idx」はFM-7上の「0x790」で先頭アドレスです。
先頭2バイトには次のリストの(FM-7上での)先頭アドレスが
格納されてます。しかしPCのメモリ上では次のアドレス位置は
計算しなければ判りません。そこで下のように計算します。
list_len = next_idx - cur_idx;

この計算により、次のリストまでの距離が判りますので
next_pos = cur_pos + list_len;
と計算してPCの変数領域(メモリ)の絶対位置が判ります。

リスト構造ですので、記入されてない部分はテーブルと
考えてください。テーブルを完成した後にリンクポインタの
再設定をしても良いのですけど、この時点で「cur_pos」の
位置で示されたPCの変数領域は使わないので移動後のFM-7の
環境に合わせた先頭アドレスをPCの変数領域に設定します。
移動後のリンクポインタの計算式は下です。
tmp_adr = next_idx + offset;

次に下の行を一段上に移動することによりアルゴリズムは、
この繰り返しになり、C言語ソースでは下のループ部分です。
do { } while(0 != next_idx);
このユーティリティーのメイン機能です。恐らく FM-7 でも
リンクポインタの再設定では同様なアルゴリズムでないかと
考えます。もっともFM-7では6809のマシン語でしょうけど
ソースがC言語であれば他機種でも利用可能ではと。

・ユーティリティーの使い方
C言語のソースの2行目のようにターミナルから起動します。
./FBASIC_MOVE20200914 FT245TST0790088D.BAS

因みに1行目はコンパイル方法です。C言語のソースの他に
サンプル用の「FT245TST0790088D.BAS」もアップロード
します。起動すれば各自の環境に合わせた、(FM-7の)
中間言語の先頭アドレスを入力して下さい。メッセージは
「テキスト先頭番地を入力してください」と出力します。
中間言語の先頭アドレスは FM-7 の $33、$34 で確認
して下さい。サンプル用の「0790088D」の意味は、この
ファイルでは先頭4文字 0790 は中間言語の先頭アドレスを
示し、末尾4文字 088D は単純変数の先頭アドレスを示して
ます。ユーティリティー実行後に単純変数の先頭アドレスを
出力します。 変更後のファイルをFM-7 に転送した後には
$35、$36 に単純変数の先頭アドレスを設定して下さい。

また、「F-BASIC 中間言語」のデータを FM-7 から PCに
転送する際は容量が16の倍数になるように端数を切り上げる
注意をお願いします。 Windows用のドライバの都合上で、
そのような仕様になりました。尚、変更したファイルを更に
変更しないで下さい。中間言語の先頭アドレスをサンプル
ファイルは下のように決めてます。
#define TOP_INDX 0X0790
この辺りはPCへの転送時の環境に影響されますので、各自の
環境で「#define」値は変更して下さい。尚、サンプルの
BASICコードは「行 90」でエラーが出ますが修正方法は
判りません。(BASICは忘れましたが調べる気もないので)

C言語のソース「FBASIC_MOVE20200914.c」とサンブル
BASICコード「FT245TST0790088D.BAS」の存在場所
https://onedrive.live.com/?authkey=%21Aln7kHlkHDL28EE&id=6357DCB7DCA88133%21113&cid=6357DCB7DCA88133

今回の内容についての質問は掲示板で判る範囲で応えるように
しますが判らない時は、素直に「判りません」と応えますので
気を悪くしないで下さい。

<内容を2020/09/20(日)に一部変更しました。>
変更した部分は「単純変数の先頭アドレス」を計算で求め、
出力したことです。リストのリンクポインタを変更するので
あれば、単純変数の先頭アドレスまで求めないと使い勝手が
悪いです。終端は「0x0000」で、この終端のアドレスは
終端直前のリストのリンクポインタで判ります。
変更後の単純変数の先頭アドレスは下の計算で判ります。
「変更前の終端アドレス」+ 2 + 「offset」
「offset」はC言語のソースで変更前と後のオフセット値と
して求めた数値です。補助記憶装置としてデーターレコーダー
しか使ってない時は単純変数の先頭アドレスは $35、$36 で
管理してることは既に説明してますが、このアドレスは
「終端アドレス」+ 2 です。

尚、今回アップロードしたC言語のソースではファイルは
変更せず、変更時のリンクポインタをシミュレートする
仕様です。ファイルを変更するのであればコメントに示す
ようにリターン(return 0)の機能を無効にして下さい。
スポンサーサイト



FT245RL用BASICリスト移動ユーティリティー、その1

拙作のFT245RLを使ったデータ転送ハードを使う上で、あれば
便利なのではと考え作成しました。先ずは Linux 用ですけど
ソースは公開しますので Windows 用として利用できる方は
使ってください、C言語で作成しました。

・FT245RLを使うデータ転送ハードでは、BASICの中間言語も
データとしてPCに転送すれば2秒もかかりませんが再度FM-7に
転送し使う時に、中間言語の先頭アドレスはPCに転送した時と
同じに、更に単純変数の先頭アドレスも同じにしなければ動か
ないと言う問題が発生します。同一の環境でなければ動かない
と言うことです。中間言語の先頭アドレスは使ってる補助記憶
装置に左右されますけど、リスト構造のリンクポインタを環境
に合わせて再設定すれば他の環境でも使えると考えました。

・FM-7あるいはFM-8のBASICの中間言語は単方向リスト構造で
メモリに格納されていることは御存知の方も多いと思います。
例えば補助記憶装置としてデーターレコーダーしか使ってない
時は中間言語の先頭リストは、$790 から格納されていて、その
リストの先頭2バイトに次のリストの先頭アドレスが格納されて
います。このリスト構造を繰り返し 0x0000 で終わります。
またBASICは、中間言語の先頭アドレスを$33、$34 で管理して
ます。尚$35、$36 では単純変数の先頭アドレスを管理してます。
拙い説明ですので詳細を正確に知りたい方は、(株)秀和の
「FM-7 F-BASIC 解析マニュアル II」辺りで調べて下さい。

次回は、使い方等を説明し、ソースのあるURLを公開します。

プロフィール

vehwk3yxv7hw

Author:vehwk3yxv7hw
今から40年近く前に発売されたFM-7
と言う8ビット機のデータ管理を
現行PCでできるようにしましたが、
この程度の作業でも1年以上かかり
ました。とは言え現行PCでデータが
管理できれば昔のPCでも間接的とは
言えインターネットに接続してると
考えました。昔からFM-7用基板を
製作したい思いもありました。
FM-7の機能追加としてソフト的に
あと一つ残ってます。某ブログを
利用し公開してましたけど閉鎖に
伴いココを新発信基地とします。
思いはFM-7のハードに止まらず
昔のゲーム機の機能も拡張も考えて
います。尚写真は30年以上前です。

検索フォーム

ブロとも申請フォーム

QRコード

QR