ラインバッファポインタ「$CC14」で躓く ^^;;;

FLEX上でのアスキーファイルのやり取りができるツールをリモート側で全て操作できるように、改造中のこと・・・・

ファイル名を通信回線からラインバッファにセットしFCBに渡そうとしたところ、ファイル名をうまく受け取ってくれません。
そこで、仕組みはそのままにINBUFFでキーボードからファイル名を入力してみると正常に動作します。

メモリ内容を直接確認してみると通信回線からラインバッファへのセットはうまくいっている様子。

どうやらファイル名をFCBに渡すためにGETFILを呼ぶ場合、ラインバッファポインタに先頭の文字位置を渡さなければいけないようで、色々調べると原因が見えてきました。

ラインバッファポインタは2バイトあるようですが、メモリ内容を観察してみると
私のFM-7では上位バイトは$C0固定
下位バイトは$80を先頭にデリミタまでの文字数が入っているようです。

通信回線から入力したファイル名はラインバッファの先頭からセットしているので$80で渡してみると動作ok
なぜ$80なのか、上位は$C0固定なのか、色々不明ですがとりあえずやりたいことはできそうです。

恐らく次回も躓くのでちとメモ・・・

とりあえず使えるものが完成
DSC09551
端末側からコマンドでアップロード、ダウンロード操作が可能なので使いやすくなったような気はするのですが、使ってみると不満も多い^^;;;

ラインバッファへのバックスペース処理やファイルエラー時の処理、ファイル一覧表示なども欲しいし・・・・

しかし優先順位としてはACIA対応かな^^;;;;

スポンサーリンク

「ラインバッファポインタ「$CC14」で躓く ^^;;;」への2件のフィードバック

  1. yuyamaです。こんにちは。
    ファイル名をラインバッファ(LINBUF $C080~$C0FF)の先頭からセットしているので、ラインバッファポインタ(LINBFX $CC14,15)にセットすべき値は$C080で良いはずです。
    >私のFM-7では上位バイトは$C0固定
     既定のLINBUFを使う限り$C080の上位バイトですから$C0となります。
    >下位バイトは$80を先頭にデリミタまでの文字数が入っているようです。
     INBUFFはLINBUFの先頭から入力していきます。その実行直後のLINBFXはキーボードから入力した文字列の先頭位置(つまり、次に処理すべき文字列の先頭アドレス)を示すので、LINBUFの先頭アドレスの下位バイトの$80になっているはずですが、デリミタのアドレス(文字数ではなく位置ですね)が入っているということは、その文字列(コマンド)がまだ処理中である状態でLINBFXを見ているのではないでしょうか。適当なプログラムを用意し、その先頭でLINBFXの値を出力させてみると、そのプログラム名のデリミタの位置を指しているはずです。

    1. yuyamaさま
      コメントありがとうございます(^^)
      おかげさまで、FLEX用のアスキー転送ソフトも使いやすくなってきました。
      これまではWindows側のターミナルソフトを専用にして転送していましたが、汎用の通信ソフトで昔のBBSのようにコマンドで操作したほうが便利かと色々変更しています。
      ファイル名を外部から受け取る仕組みは簡単そうでしたが、手探りでFLEXを弄っているので疑問点ばかりです。
      ラインバッファポインタはゼロ番地からのポインタだったんですね。ラインバッファの先頭($C80)からの値かと勘違いしておりました^^;;;
      なぜ2バイトのあるのかと考えていたのですが、0番地からの位置ということでは上位は$C0は当然でした^^;;;;
      FLEXの英文取説を少しずつ整理してみます^^

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。 本文に全角文字を2文字以上含めて下さい (スパム対策)