復活!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 |