復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第420回]
●/BATで遠隔デバッグ!(2)
前回からの続きです。
N様にお送りして実行していただいたバッチプログラムには、ZCCPプログラムのファイルOPENのところにブレークポイントを設定してありました。
またシステムのFCBエリアのメモリダンプも設定してありました。
ZCCPプログラムのユーザープログラムを実行するプログラム部分では、キーボードから入力したプログラム名をシステムFCBエリアにセットしたうえで、ディスクディレクトリからそのファイル名を探してそのファイルをOPENします。
N様から/BATを実行した結果を記録したログファイルを送っていただいて、その内容を見ましたところ、ファイルOPENでこけていることがわかりました。
でもなぜ?
これには説明が必要です。
プログラムを修正するまでは、ずっとまともにOPENできていたのです。
新たに修正をおこなったプログラムをお送りしたら、ファイルがOPENできなくなってしまいました。
プログラムを修正したことが原因であることは明らかです。
どこを修正したのかといいますと。
N様と同じように、大分県のH様からもいろいろなアプリケーションの実行結果のレポートを送っていただいています。
ところがH様からいただいたバグ報告をもとにプログラムを修正しましたところ、複数のエクステントにまたがる大きなプログラムをコピーさせると、そのエクステントの数だけ繰り返しコピーが行なわれてしまう、という新たなバグの報告をいただきました。
うう。
なんともややこしい説明です。
実際このところ実にややこしくてため息がでてしまうバグ修正をしてきましたのです。
こちらを直すとあちらがだめになり、あちらを直すと今度は別のところがだめになってしまうということの繰り返しです。
CP/Mファイルのエクステントにつきましては[第148回]で説明をしています。
ディスクディレクトリのFCBエリア(ファイル名とデータブロックbネどがかかれているエリア)は32バイトで構成されています。
その32バイトは前半16バイトと後半16バイトに分かれています。
後半16バイトには2バイトずつ8個のデータブロックbェ書き込まれます。
1ブロックは16レコード2KBですから、そこに記録できるのは16KB分のデータブロックbワでです。
それでは16KB以上の大きなファイルはどうやって管理するのかといいますと、そこでエクステントbェ使われるのです。
16KBを越えるファイルの場合には同じファイル名のFCBが複数登録されます。
16KBまでのファイルの場合にはFCBは1個だけで、そのときはエクステントのbヘ00です。
エクステントbヘFCBの先頭から13バイト目に置かれています。
そのことは勿論わかっていましたから、ファイル名をサーチするときにもエクステントb確認して、それが最初の(つまりエクステントbェ00の)FCBなのかそうでないのかということもチェックするようにプログラムは組んでありました。
なので、実際にファイル名をサーチするところでは、ファイル名部分のみ(8バイト+3バイト)だけを比較するようにしてありました。
ところがH様、N様からのバグ報告を受けてその原因を追究していきましたところ、どうもファイル名サーチはファイル名部分の8+3バイトだけではなくて、その次のエクステントb煌ワめて比較しなければならないらしいということがわかってきました。
そこでそのようにプログラムを修正したのですが。
それはZBDOSのファンクションコールの部分だけで、ZCCPのプログラムは外からコールされるものではありませんから、もとのままの8+3バイトだけの比較をしていました。
つまりファイルOPENするためにシステムFCBにセットされるのはファイル名の8+3バイトだけだったのです。
それはZCCP側のプログラムでの設定です。
しかしZCCPがコールするファイルOPENルーチンはエクステントも含めて比較するように修正してしまいました。
そこで今回の問題が発生しました。
下は前回お見せしました、N様から送っていただいたログファイルの一部です。
>DM E93C,E95F E93C 00 50 49 20 20 20 20 20-20 43 4F 4D 01 00 00 0D .PI COM.... E94C 61 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 a............... E95C 0D 00 00 00 00 00 00 E8-02 00 00 E1 02 00 00 E1 ................ |