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

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

[第414回]


●本日も時間がありません

本日も朝からずっとMYCPU80組立キットの作業やそのほかのご注文品の作業をしておりました。
まだ片付きません。
ですので今回もほんの少しだけしか書けません。

[第412回]の終わりのところでLOAD.COMのエラーについて少しだけ書きました。
このエラーです。

A>load dump2

INVALID HEX DIGIT
LOAD  ADDRESS 0100
ERROR ADDRESS 0100
BYTES READ:
0100: 

このところお客様から相次いでご指摘いただいた不具合は、ファイルシステムに関係しているものが多く、そのあたりをもう一度しっかり見直した結果、ファイルシステムの基本的なところを書き換えてしまうことになりました。
それまではそれなりにうまく動作していたところを根本的に見直して作り変えてしまったものですから、一時はそれまで動いていたものまでがまったく動かなくなってしまい、惨憺たる有様となってしまいました。
こんがらがった糸をほぐしていきながら、少しずつシステムの再構築を進めました。
昨日になってようやくなんとか元通りに動くようになって、かつそれまでの不具合もかなり解消されるようになりました。

で。
上のLOADのエラーなのですが、この数日思いっきり脳細胞を酷使しました結果、エラーは出なくなったのですが、どこをどうやったら出なくなったのか、というあたりを思い出そうとしてみましたところ、さっぱり思い出せません。

むむ。
確かに、もうろくしております。
それで。
お客様に差し上げたメールを再度読み直してみましたところ、やっと思い出しました。

●シーケンシャルREADのレコード

ファンクション14H(シーケンシャルREAD)のレコードbェ問題でした。
あのLOADのエラーメッセージは、HEXファイルにおかしなところがある、と言っているようでしたので、最初はファイルそのものを疑っていたのですが、デバッグしていくうちに意外なことに気が付きました。
シーケンシャルファイルですから、当然最初のレコード(レコードbO)から読むべきなのに、読んでいないことがわかりました。
シーケンシャルREADではFCBの33バイト目が次に読むべきレコードbノなっています。
ファイルを読むときは、ここを00にしたうえでファンクション14H(シーケンシャルREAD)をコールします。
ファンクション14Hはレコードを読んだあと、そこを+1しますから次からはただファンクション14Hをコールするだけで順番にレコードを読み出すことができます。
その最初のレコードbO0が設定されていないのです。

どうやらLOAD.COMはなにも設定しないでいきなりファイルオープン〜ファイルREADを行なっているようです。
CCPの機能によって、コマンドのパラメータ部分からFCBがセットされますけれど、まさかその33バイト目までお膳立てするとは思ってもいませんでした。
CCPのルーチンの中でコマンドパラメータからFCBを作成するときに33バイト目に00を書き込んでおくようにしたところ、LOAD.COMが正常に働くようになりました。

これで、やっと一件落着です。

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

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