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

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

[第136回]


●ファンクションコール1A(DMAアドレスセット)

前回は[第51回]で作成しましたテストプログラム(FTST5CPY)を使ってファイルコピーをしました。
正しくコピーが行なわれたかどうかを確認するために、[第55回]では、ファイル内容の比較プログラム、FTST6CMPを作りました。
FTST6CMPを使った実際の比較作業は[第58回]で行なっています。

そこで今回は[第58回]で行なったのと同様にして、前回のファイルコピー作業によって作成されたTESTDAT2.TXTとコピー元のファイルFTEST4−1.TXTのファイル内容を、FTST6CMPによって比較してみることにします。
FTST6CMPは、ファンクションコール1A(DMAアドレスセット)のテストプログラムでもありますから、FTST6CMPを実行することで、同時にファンクションコール1Aの動作確認にもなります。

[第58回]と同じように、
/LD FTST6CPY.BIN,8100
を実行して、トランジェントエリアにFTST6CPY.BINをロードしたあと、CP/M互換DOSを起動して、
SAVE 2 CMP.COM
を実行して、CMP.COMのファイル名でAドライブにセーブしました。

下の画像はそのあと、
CMP FTEST4−1.TXT TESTDAT2.TXT
を実行したところです。



これは[第58回]でも書いたことですが、2つのファイルが完全に一致したときは、何も表示されません。
これでは本当に正しく比較が行なわれたのかどうか、ちょっと不安になります。
そこで[第59回]では、内容が一部異なる短いファイルを用意して、それを比較することで、CMP.COMが正しく動作していることを確認しました。

しかし今回はもっといい方法を思いつきました。
それが上の画像で、CMP.COMを実行したあとで行なっている作業です。
そこで比較を行なった2つのファイルFTEST4−1.TXTとTESTDAT2.TXTが仮RAMディスク上で保存されているメモリアドレスは、前回の終わりの方で表示しております、ディレクトリエリアのメモリダンプから知ることができます。

FTEST4−1.TXTがセーブされているのはブロックbW、9で、TESTDAT2.TXTがセーブされているのはブロックbQと6です。
1ブロックは4セクタで1セクタは128バイトです。
ブロックbヘ0から始まっていて、メモリアドレス8800Hからスタートしています。
するとブロックbQはアドレス8C00H〜8DFFHになり、またブロックbUは9800H〜99FFHになります。

上の画像では、その2つのブロックの始めのところを、それぞれDMコマンドを使って表示させています。
それぞれ2つのファイルの先頭の部分であることがわかります。
2つの内容は完全に一致しています。

そこで、次にCMコマンドを使って、片方の内容を一部書き換えてしまいます。
こういうことが簡単にできてしまうのが、この仮RAMディスクシステムの非常に大きなメリットです。
そのようにしてから、CP/M互換DOSを起動して、もう一度
CMP FTEST4−1.TXT TESTDAT2.TXT
を実行しました。

その実行の結果は、上の画像にありますように、内容を書き換えたところのみが不一致として表示されました。
これによって、CMP.COMが正しく機能していることと、COPY.COMが正しく機能したことが確認できました。

なお[第56回]では、「ファンクションコール1AによってDMAアドレスを変更すると、次にファンクションコール1Aを使うかリブートされるまで、DMAアドレスが変更されたままになるので、プログラムを終了するときにはデフォルトのDMAアドレスに戻しておかなくてはならない」ということを書きました。
これは「応用CP/M」(村瀬康治著。アスキー出版局)にそのような記載があったため、当時はまだCP/Mについてまだ余り理解が進んでいなかったこともあって、それを鵜呑みにしてしまいました。

実際はそのようなことはありません。
プログラム中でユーザーが設定したDMAアドレスはプログラムの中だけで有効で、プログラムが終了するとCCPによってデフォルトのDMAアドレスが再設定されます。
したがってFTST6CMPの最後で行なっているDMAアドレスをデフォルトに戻すためのファンクションコール1Aの実行は無駄作業でした。
ま、しかし。
わざわざその部分を削除する、というほどのこともありませんから、それはそのままにしておくことにいたします。

●かなり作業が進みました

ここ2〜3日馬力をかけてがんばったおかげで、かなり作業が進みました。
[第133回]のファンクションコール一覧表をご覧ください。
もうすでにほとんどが検証済みで水色で着色してあります。
検証作業は進んでいるのですけれど、それを記事にまとめようとしますとなかなかに大変です。
一度にはとてもUPできませんから、何回かに分けて少しずつUPしていく予定です。
今回はまだ[第136回]ですけれど、原稿としては[第144回]まで進んでいます。
がんばったおかげで1週間分の記事がプールできました。
記事を書くのはなかなかに疲れる作業ですので、これで少しは楽ができそうです。
[第133回]のファンクションコール一覧表は検証作業の進行に合わせて完了するまで毎日更新しますからときどきはご覧になってくださいませ。

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

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