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

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

[第45回]

●ファイルアクセスのための前準備(2)

前回は、何もしないですぐにシステムにリターンするプログラムTEST.COMを作って、それを下のようにパラメータをつけて実行してみました。

test abc.com xyz.txt 12345[Enter]

そして、そのあとでZB3BASICに戻って、DMコマンドでCP/Mシステムの作業エリアの内容を表示させてみました。
前回はログファイルから、その部分をお見せしましたが、今回はわかりやすいように、入力したパラメータが格納されている領域に色をつけてみました。



実はテストとしてはやや不完全でした。
本当はパラメータとして指定するファイル名にc:abc.comのようにドライブ名をつけると、もっとわかり易かったことにあとで気がつきました。
そのことにつきましては後で説明することにしまして、上のメモリダンプを見ますと、パラメータ指定をした第1のファイル名が805Dから、また第2のファイル名が806Dから格納されていることがわかります。

CP/Mではファイル名は8文字以内というルールになっていますが、ここでもそのルールに従ってファイル名が格納されています。
ファイル名の8文字に満たない部分にはスペースが追加されたあとに拡張子が置かれています。
このエリア(ここでは805CH〜807CH、本来は005CH〜007CH)は、FCB(File Control Block)エリアという名前がついています。

フロッピーディスクのディレクトリエリアで、ファイル名とその格納場所などの情報を記録している32バイトの領域のこともFCBといいます。
上記のFCBエリアに格納されたパラメータのファイル名情報は、ディレクトリに書かれているファイル名情報と同じルールで書かれています。
このように格納することで、ファイル名をディレクトリから検索し易くしていると思われます。

ところで、さきほどはFCBエリアを805CH〜807CH(005CH〜007CH)であると書きましたが、上のダンプリストを見ますと、ファイル名は805CHからではなくて、805DHから書かれています。

実はファイル名の前にある00はドライブ名情報なのです。
00はカレントディスクであることを示しています。
ここにはたとえばBドライブならば02、Cドライブならば03が入れられます。
同じように、806CHには第2パラメータのドライブ名情報が入ります。

なお、第3のパラメータ(12345)は、FCBエリアには格納されません。
ダンプリストを見ますと、8080Hからのエリアに、キー入力したパラメータ部分が、入力した通りの並びでそのまま格納されています。
ここを見ることで第3のパラメータを抽出することができます。

この8080Hからのエリア(本来は0080H〜)は、BIOSを通じてデータのやりとりを行なう際のデフォルトのDMAバッファです。
先頭の8080Hにある16Hは、入力したパラメータ全体のバイト数(16H=22)を示しています。

●ZB3BASICのDMコマンドでのコード80H〜のASCIIダンプ

[第43回]で、MSDOSのDEBUGコマンドでは、メモリダンプをするときに、コード80H〜FFHのASCIIダンプは”.”に置き換えて表示します、と説明しました。
そしてZB3BASICのDMコマンドでも同じように、80H〜FFHは”.”に置き換えます、と説明しました。

しかし。
上のダンプリストをよく見てみますと、半角カナが表示されています。
自分でプログラムを書いておいて、すぐに忘れてしまいます。
まったく困ったことです。

こういうときは、やっぱり00〜FFまでをメモリに書き込んでおいて、それをダンプしてみなければいけません。
そういうプログラムを書いて、それを実行してから、メモリダンプをしてみよう、と思いました。

でも。
むむ。
確か、前にも同じようなことをしたような…。

おお。
思い出しました。
こんなところで、やっておりました。
[第22回]です。

logfile nd80zlog\01311639.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/LD RAM0TST.BIN,8000
loading RAM0TST.BIN ...001d(29)bytes loaded,from 8000 to 801C
>JP 8000
>D.,9000,90FF
9000  00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F  ................
9010  10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F  ................
9020  20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
9030  30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
9040  40 41 42 43 44 45 46 47-48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
9050  50 51 52 53 54 55 56 57-58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
9060  60 61 62 63 64 65 66 67-68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
9070  70 71 72 73 74 75 76 77-78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~
9080  80 81 82 83 84 85 86 87-88 89 8A 8B 8C 8D 8E 8F  ................
9090  90 91 92 93 94 95 96 97-98 99 9A 9B 9C 9D 9E 9F  ................
90A0  A0 A1 A2 A3 A4 A5 A6 A7-A8 A9 AA AB AC AD AE AF  。「」、・ヲァィゥェォャュョッ
90B0  B0 B1 B2 B3 B4 B5 B6 B7-B8 B9 BA BB BC BD BE BF  ーアイウエオカキクケコサシスセソ
90C0  C0 C1 C2 C3 C4 C5 C6 C7-C8 C9 CA CB CC CD CE CF  タチツテトナニヌネノハヒフヘホマ
90D0  D0 D1 D2 D3 D4 D5 D6 D7-D8 D9 DA DB DC DD DE DF  ミムメモヤユヨラリルレロワン゙゚
90E0  E0 E1 E2 E3 E4 E5 E6 E7-E8 E9 EA EB EC ED EE EF  ................
90F0  F0 F1 F2 F3 F4 F5 F6 F7-F8 F9 FA FB FC FD FE FF  ................
>/EXIT
0000 00C3 - 
リモート接続を終了しました
logfile closed at Tue Jan 31 16:41:48 2012

ZB3BASICのDMコマンドでは、00〜1Fのほか、80〜9FとE0〜FFは”.”に置き換えて表示しますが、A0〜DFは半角カナ及び記号を表示するようになっておりました。

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

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