So-net無料ブログ作成

BSAVE / SAVEM 前史 #2 [プログラム]

2010/03/18 タイトルを変更しました

この記事は「BSAVE / SAVEM 前史 #1」の続きです。


シーケンシャルファイルだと収納効率が悪いので、ランダムファイルを使用した方法を考えてみます。
PEEK() 関数で読み込んだデータを FIELD 命令を使ってバッファにセットするというのはどうでしょう。

ファイルバッファのサイズは 256 bytes 固定なので、256 個の要素を持つ整数配列を使用してその中に格納するようにします。

FOR AD!=BA! TO EA!
    |
  FOR I=0 TO 255
    D$(I)=CHR$(PEEK(AD))
  NEXT
    |
  FOR I=0 TO 255
    LSET B$(I)=D$(I)
  NEXT
  PUT #1,RC
    |
NEXT

1 byte をセットするのにループを2回繰り返すため効率が悪いので、2個のループをまとめてしまいます。
FOR AD!=BA! TO EA!
    |
  FOR I=0 TO 255
    LSET D$(I)=CHR$(PEEK(AD))
  NEXT
    |
  PUT #1,RC
    |
NEXT


この処理をコアにしてオプションパーツをコテコテと貼り付け、N-BASIC 用の MOUNT / REMOVE 処理を振りかけたモノが以下のプログラムです。

Binary data saving sample program (N-BASIC)
バイナリデータセーブ サンプルプログラム(N-BASIC)

セーブしたいデータ個数分だけループを回し、データバッファが満杯になるとディスクへ書き出しています。
でも、ループ内でやっている事と言えば、メモリ上にあったデータがバッファ内に、そっくりそのままコピーされただけなんですよね。
コピーするだけなら、もっと賢い方法があるんじゃないかという事で、次回に続きます。

つづく

タグ:PC-8001 N-BASIC

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。