2012.6.14
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第150回]


●シーケンシャルファイルにランダムアクセスをする

前回説明をしましたファンクションコール24Hのテストは、[第111回][第113回]で書いたことをそのまま再現するような形で行ないました。
ファンクションコール24Hは、シーケンシャルファイルのレコードを読んで、その次のレコードbゥらランダムアクセスできるようにするためのアクセスキーを取得します。
なんだかわかったようなわからないような機能ですが、とにかく[第111回][第113回]と同じようにテストして、そのときと同じ結果を得ることができました。
ファンクションコール24Hのテストにつきましては、それで終わりです。
[第113回]では、「次回でさらに進んでファンクションコール24Hのテストをします」と書いておりますが、結局それはしておりません。
ちょいといい加減ですけれど、ファンクションコール24Hの使い方や目的が今ひとつピンときませんから、そういうことでも、まあいいかと。

ところで、その次の回の[第114回]からは、シーケンシャルファイルのままで、ランダムアクセスする、などというとんでもないことを書いています。
一般的な使い方から外れたイレギュラーなやり方ですので、そういうものは再現しなくてもよい、のですけれど、互換性の確認という観点からしますと、そういうものにつきましても検証のためにやっておいて無駄にはならないと思います。

ということで、余計な作業ですけれど、[第114回]から先に行ないましたことも、そのままCP/M互換DOSの上で再実行してみることにしました。

[第114回]では、FTST20−4.COMを使って、作成済みのシーケンシャルファイルTEST.SAFの一部のレコードにランダムアクセスして、その内容を書き換えてしまいます。
実行に先立って、ランダムリードするためのレコード番号表を作成します。
また後で結果の確認ができるように、一部のレコードの内容を書き換えておきます。
そのあと、
ftst20−4 test.saf[Enter]を実行します。

[第115回]ではFTST24−2.COMを使って、TEST.SAFの内容をランダムに読み出しています。
こちらもあらかじめレコード番号表を作成して、それにしたがってシーケンシャルファイルTEST.SAFを「ランダムリード」します。
ftst24−2 test.saf[Enter]の実行です。

そして[第116回]ではFTST24−4.COMを使って、前回と同じことをしています。
しかし今度は「シーケンシャルファイル」を「ランダムリード」を使って「ランダムにリード」するのではなくて、「シーケンシャルファイル」を「シーケンシャルリード」を使って「ランダムにリード」します(ちょっと苦しい日本語です)。

今回もそれと同じことをしてみます。

まず最初は[第114回]の再現です。

logfile nd80zlog\06030830.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>cm 8500
8500 C8-15
8501 01-1f
8502 20-13
8503 00-10
8504 09-07
8505 C1-03
8506 0C-ff
8507 05-
>cm 8d80
8D80 03-ff
8D81 03-ff
8D82 03-ff
8D83 03-ff
8D84 03-
>dm 8d80,8d8f
8D80  FF FF FF FF 03 03 03 03-03 03 03 03 03 03 03 03  ................
>cm 8f80
8F80 07-ff
8F81 07-ff
8F82 07-ff
8F83 07-ff
8F84 07-
>dm 8f80,8f8f
8F80  FF FF FF FF 07 07 07 07-07 07 07 07 07 07 07 07  ................
>/ld ftst20-4.bin,8100
loading FTST20-4.BIN ...0098(152)bytes loaded,from 8100 to 8197
>jp d233

CMコマンドで8500H〜にレコード番号表を作成しました。
それからTEST.SAFのレコードbRとレコードbVの一部のデータをFFで置き換えてしまいました。
ND80ZVのRAM上に作成した仮RAMディスクだからこそできる芸当です。
/LDコマンドで8100HからのトランジェントエリアにFTST20−4.BINをロードしてから、JP D233[Enter]で、CP/M互換DOSを起動しました。

下はCP/M互換DOSを起動してからあとに行なった作業のログです。

A>dir
A: FTST23   COM : TEST     SAF : FTST24   COM : FTST25   COM

A>save 1 ftst20-4.com

A>ftst20-4 test.saf
done

A>end of ZBDOS
>dm 8800,88ff
8800  00 46 54 53 54 32 33 20-20 43 4F 4D 00 00 00 02  .FTST23  COM....
8810  01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8820  00 54 45 53 54 20 20 20-20 53 41 46 00 00 00 20  .TEST    SAF... 
8830  02 03 04 05 0B 09 00 0A-00 00 00 00 00 00 00 00  ................
8840  00 46 54 53 54 32 34 20-20 43 4F 4D 00 00 00 02  .FTST24  COM....
8850  06 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8860  00 46 54 53 54 32 35 20-20 43 4F 4D 00 00 00 02  .FTST25  COM....
8870  07 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8880  00 46 54 53 54 32 30 2D-34 43 4F 4D 00 00 00 02  .FTST20-4COM....
8890  08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
88A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
>dm 8d80,8d9f
8D80  03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03  ................
8D90  03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03  ................
>dm 8f90,8faf
8F90  07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07  ................
8FA0  07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07  ................
>dm 9a80,9a9f
9A80  15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15  ................
9A90  15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15  ................
>dm 9d80,9d9f
9D80  1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F  ................
9D90  1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F  ................
>dm 9e00,9e1f
9E00  10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10  ................
9E10  10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10  ................
>dm 9f80,9f9f
9F80  13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13  ................
9F90  13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13  ................
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jun 03 08:38:52 2012

save 1 ftst20−4.com[Enter]
で、FTST20−4.COMの名前でAドライブに保存したあと、
ftst20−4 test.saf[Enter]
を実行しました。

その後[Ctrl]+[D]を入力して、ZB3BASICに戻り、実行の結果を確認しました。
dm 8800,88ff[Enter]
で、ディレクトリエリアの確認を行ないました。
TEST.SAFのブロックアローゲーションエリアに、0B、09、0Aの3ブロックが追加されました。
[第114回]の実行結果と同じです。

と、そのように書いたのですが、3ブロックが追加される前がどうだったのかについて、どこにも書いていなかったことに、あとから読み直してみて気がつきました。
自分ではわかっているのですけれど、これではお読みいただいている方にはわかりませんね。
追加前のFCBは[第111回]まで戻らないと出てきません。
なので、その部分のみを下に再表示いたします。

>dm 8800,887f
8800  00 46 54 53 54 32 33 20-20 43 4F 4D 00 00 00 02  .FTST23  COM....
8810  01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8820  00 54 45 53 54 20 20 20-20 53 41 46 00 00 00 10  .TEST    SAF....
8830  02 03 04 05 00 00 00 00-00 00 00 00 00 00 00 00  ................
8840  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8850  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8860  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8870  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................

データレコードの中味についてもDMコマンドで表示させてみました。

>dm 8d80,8d9f
8D80  03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03  ................
8D90  03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03  ................
>dm 8f80,8f9f
8F80  07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07  ................
8F90  07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07  ................
>dm 9a80,9a9f
9A80  15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15  ................
9A90  15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15  ................
>dm 9d80,9d9f
9D80  1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F  ................
9D90  1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F  ................
>dm 9e00,9e1f
9E00  10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10  ................
9E10  10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10  ................
>dm 9f80,9f9f
9F80  13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13  ................
9F90  13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13  ................
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jun 03 08:38:52 2012

レコードbO3と07はFFで置き換えたところが、03、07に変わっていますから、そのレコードが上書きされたことがわかります。
またbP5、1F、10、13の各レコードが追加されたことも確認できました。
いずれも[第114回]の実行結果と同じです。

次は[第115回]の再現です。

logfile nd80zlog\06030844.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>cm 8400
8400 06-0f
8401 D2-0e
8402 C2-0d
8403 0D-0c
8404 C7-0b
8405 E1-0a
8406 C9-09
8407 CD-08
8408 09-07
8409 D2-06
840A FE-05
840B 13-04
840C C2-03
840D 20-02
840E C7-01
840F CD-00
8410 09-ff
8411 D2-
>/ld ftst24-2.bin,8100
loading FTST24-2.BIN ...00f1(241)bytes loaded,from 8100 to 81F0
>jp d233

アドレス8400H〜にレコード番号表を作成しました。
レコードをランダムに読み込むためのキーコード表ですが、どうせランダムに読み込むのならいっそのこと逆順に読み込んでみようということで作成した番号表です。
これも[第115回]で作成したのと同じです。
それからJP D233[Enter]で、CP/M互換DOSを起動しました。

下はCP/M互換DOSを起動してからあとに行なった作業のログです。


A>b:
B>save 1 ftst24-2.com

B>ftst24-2 a:test.saf
0F
0E
0D
0C
0B
0A
09
08
07
06
05
04
03
02
01
00
end

B>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jun 03 08:47:18 2012
Aドライブが一杯になってしまいましたから、FTST24−2.COMはB:ドライブにセーブしました。
[第115回]では、Aドライブをクリアして、そこにTEST.SAFを再作成したようです。
しかし、今回のようにしても、同じ結果が得られると思って、B:ドライブを利用しました。
テストですから、できるだけ機会をみつけていろいろ試してみたいと思います。

ftst24−2 a:test.saf[Enter]を実行した結果、レコードu\の通りに逆順で読み出すことができました。
[第115回]と同じ結果が得られました。

最後は[第116回]の再現です。
[第116回]では、再びAドライブをクリアして、そこにTEST.SAFを再作成していますが、今回は上と同様に、B:ドライブを利用しました。

logfile nd80zlog\06030848.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/ld ftst24-4.bin,8100
loading FTST24-4.BIN ...00ea(234)bytes loaded,from 8100 to 81E9
>jp d233

A>b:
B>save 1 ftst24-4.com

B>ftst24-4 a:test.saf
0F
0E
0D
0C
0B
0A
09
08
07
06
05
04
03
02
01
00
end

B>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Jun 03 08:49:34 2012

BドライブにFTST24−4.COMをセーブしたあと、
ftst24−4 a:test.saf[Enter]を実行した結果、[第116回]と同様、レコードu\の通りに逆順で読み出すことができました。

ワンボードマイコンでCP/Mを![第150回]
2012.6.14upload

前へ
次へ
ホームページトップへ戻る