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を公開します。

「FM-7のFT-245用基板」を振りかえって見ました

この基板の客観的を価値を知りたくなり、先日Old68funさまに代行依頼して
オクに出品して頂いた所、希望する方がいましたのでホッとしてます。落札
して頂いた方に御礼申し上げます。薮から棒的な依頼を引き受けてくれた
Old68funさまに改めて感謝する次第です。

と言うことで「FT-245用基板」関連で、このブログを振りかえってみました。
すると初回に「74LS244」の1ビットをバッファの状態監視に流用してるため
1バイトを2回に分けて送信してるので、このWindows部分のソースは早晩、
公開すると約束してました。遅ればせながら公開します。このブログの規約で、
他のブログと同一の内容を書くと違反になることより暫く放ておいたので公開
することを忘れてました。ただし、あくまでもイメージと言うことで。尚、
2回に分けて受信したデータを合成するFM-7側のコードを、先ずは示します。
エントリアドレスは「$FC12」になりますがポジション・インディベンドです
ので配置位置は変更可能です。

<FM-7側のコード>

ZFC08 STB MFDFD *FC08: F7 FD FD
LDA MFDFE *FC0B: B6 FD FE
CLR MFDFD *FC0E: 7F FD FD
RTS *FC11: 39
ZFC12 LDX MFC02,PCR *FC12: AE 8C ED
LDB #$01 *FC15: C6 01
ZFC17 LDA MFDFE *FC17: B6 FD FE
ANDA #$80 *FC1A: 84 80
BEQ ZFC1F *FC1C: 27 01
RTS *FC1E: 39
ZFC1F BSR ZFC08 *FC1F: 8D E7
ASLA *FC21: 48
STA MFC06,PCR *FC22: A7 8C E1
BSR ZFC08 *FC25: 8D E1
ANDA #$7F *FC27: 84 7F
ORA MFC06,PCR *FC29: AA 8C DA
STA ,X+ *FC2C: A7 80

<Windows部分のソース>

#define FT245RL_BROCK 32

static DCB dcb;
static BOOL fSuccess;

void CMainFrame::OnDataTRNS_PC2FM(){
// TODO: ここにコマンド ハンドラー コードを追加します。
DWORD dwwritten = 0;

char cdir[256];
unsigned char buf[512];
unsigned char send_buf[1024];

FILE* file;
int i, len;
errno_t error;

HANDLE hProcess;

if (NULL == hCommPort) {
return;
}

<該当ファイルをオープンする:コードは省略>

hProcess = GetCurrentProcess();
fSuccess = SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);

// printf("SEND STARAT\n");
fseek(file, 0, SEEK_SET);
do {
len = fread(buf, 1, FT245RL_BROCK, file);
if (0 == len)
break;

// printf("fread %0d\n", len);
for (i = 0; i < FT245RL_BROCK; i++) {
send_buf[2 * i + 1] = buf[i]; // 下位7ビットはそのままコピー
send_buf[2 * i] = buf[i] >> 1; // 上位7ビットは1ビット右シフトしコピー
}

fSuccess = WriteFile(hCommPort, send_buf, len * 2, &dwwritten, NULL);

} while (FT245RL_BROCK == len);

fclose(file);

fSuccess = SetPriorityClass(hProcess, NORMAL_PRIORITY_CLASS);

return;

}

<捕捉・追加>2020/09/15
上記に掲載した<FM-7側のコード>の表示が見難いので「imgur」で再掲します。
文章ではないPC用の<コード>だと見ずらくなるのかも知れません。尚、同時に
アップロードした画像は現在作成してる、BASICリストの移動用のアルゴリズム
です。順調に行けば数日中にソースを公開します。
https://imgur.com/a/AKF2Piz

今年後半の大枠の予定

今年も前半と言うか既に7月も下旬になりましたが新型コロナウイルスに
始まり新型コロナウイルスで終るのでしょうか。ArduinoMegaカードに
目処がつきそうな頃、義歯を折って治療が終るのに4ヵ月程かかりました。
6月末に治療が終わりましたけど、その他の疾病(基礎疾患ではないです)
もあったりOS(Linux)を新規にインストールしたりでノンビリしてると
半年と言う期間がアッと過ぎ去った感じです。

と言う訳で、自分は半年間、大した進展がない状況ですが同じ趣味を持つ
Old68fun様は着実に拡張カードの種類を増やしています。
https://flexonsbd.blogspot.com/2020/07/arduinomega2560.html

基板の頒布を手頃な価格で予定してると言うことなので偶にはサイトへ訪問
されることも一考かと。それと拙作のFM-7用のFT245RLを使う実装基板で
オクへの出品を頼みました。USBコードは別ですが4千円以内で入手可能です。
https://vehwk3yxv7hw.blog.fc2.com/blog-date-201909.html

尚今年の後半はファミコン用ディスクシステムの高速バックアップツールを
制作したいと考えています。(思い立ってから早数年が経過してますけど)

それではまた。

FM-7関連のオンラインイベント

FM-7関連のオンラインイベントがあるので参加することにしました。「facebook」への登録を
推奨することでしたので今回の件があり自分も踏ん切りをつけ「facebook」に登録しました。
内容はFM-7の開発に携わった方より「Z80カード」、「40ピンのインターフェース」の説明が
あるとのことです。

【オンライン】青少年は興奮する。
「永遠の少年(おじさん?)」達が往年のFMシリーズを熱く語る会!
気軽なパネルディスカッション=公開雑談会。のぞき見感覚でどうぞ。
途中参加、途中退出もOK!
https://algyan.connpass.com/event/177715/

プロフィール

vehwk3yxv7hw

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

検索フォーム

ブロとも申請フォーム

QRコード

QR