BSAVE / SAVEM 前史 #2 [プログラム]
2010/03/18 タイトルを変更しました
この記事は「BSAVE / SAVEM 前史 #1」の続きです。
シーケンシャルファイルだと収納効率が悪いので、ランダムファイルを使用した方法を考えてみます。
PEEK() 関数で読み込んだデータを FIELD 命令を使ってバッファにセットするというのはどうでしょう。
ファイルバッファのサイズは 256 bytes 固定なので、256 個の要素を持つ整数配列を使用してその中に格納するようにします。
1 byte をセットするのにループを2回繰り返すため効率が悪いので、2個のループをまとめてしまいます。
この処理をコアにしてオプションパーツをコテコテと貼り付け、N-BASIC 用の MOUNT / REMOVE 処理を振りかけたモノが以下のプログラムです。
バイナリデータセーブ サンプルプログラム(N-BASIC)
セーブしたいデータ個数分だけループを回し、データバッファが満杯になるとディスクへ書き出しています。
でも、ループ内でやっている事と言えば、メモリ上にあったデータがバッファ内に、そっくりそのままコピーされただけなんですよね。
コピーするだけなら、もっと賢い方法があるんじゃないかという事で、次回に続きます。
つづく
この記事は「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 処理を振りかけたモノが以下のプログラムです。
バイナリデータセーブ サンプルプログラム(N-BASIC)
セーブしたいデータ個数分だけループを回し、データバッファが満杯になるとディスクへ書き出しています。
でも、ループ内でやっている事と言えば、メモリ上にあったデータがバッファ内に、そっくりそのままコピーされただけなんですよね。
コピーするだけなら、もっと賢い方法があるんじゃないかという事で、次回に続きます。
つづく