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
nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 2

本名荒井

窮すれば通ず、まさにそんな中から生まれてきた工夫ですね。BSAVEをあたりまえのようにサポートしているMSX使いからすれば、頭が下がる思いです。
他にもMSXではBIOSを操作して、バイナリデータを直接出力することもできました。グラフィック性能こそ劣りますが、プログラミングマシンとしてはかなり恵まれていたのだとつくづく思います。
by 本名荒井 (2010-03-17 01:26) 

Thunderbolt

本名荒井さん、コメントありがとうございます。

「窮すれば通ず」と言えば格好良いですが、『バイナリデータを効率良くセーブする方法を探していた』というのが現実です。
当時は画期的なアイデアが出されると、みんなで改良を加えて完成品に仕上げていくことが当たり前に行われていました。

>グラフィック性能こそ劣りますが、プログラミングマシンとしてはかなり恵まれていた
8001 や 8801 と比べるとMSXは完成度がはるかに高いですね。他のマシンにはBIOSの概念さえ無いモノが多かったですから。

by Thunderbolt (2010-03-17 21:18) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

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