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

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

[第138回]


●ファンクションコール11H(最初のファイルサーチ)、12H(次のファイルサーチ)

ファイル名サーチ(ファンクションコール11H&12H)のテストは[第65回]で行ないました。
そこで作ったテストプログラムはFTST10です。
ファイル名を指定して、ディレクトリの中から該当するファイルを抽出します。
そのために最初だけ使うのがファンクションコール11Hで、その次からはファンクションコール12Hを使います。

[第65回]では、FTST10.BINをトランジェントエリアにロードしたあと、CP/Mを起動して、SEARCH.COMのファイル名でAドライブにセーブしました。
今回もそれと同じことをしてみましたがディスクが一杯で(なにしろ6KBしかありませんから)、エラーになってしまいました。
まだデバッグ中なのでエラーメッセージも簡単にただ’err’とだけ表示します。
とりあえずテストが終わって不要になったファイルを削除してから、セーブしました。



[第65回]と同じように、
search ftst*.*[Enter]
と入力してみました。
ftstで始まるファイルが全てリストアップされました。

●ファンクションコール0BH(コンソールステータスチェック)

ファンクションコール0BHのテストプログラムは[第68回]で作りました。
しかしそのテストプログラムにはバグがあることがわかって、あとで訂正をしています。
ところが、このファンクションコール0BHはなかなか期待した通りの動作にはならず、その後かなりの回を費やして、いろいろなテストプログラムを作って、動作の解明をしました。
結局はBIOSを直すことで解決できたのですが、いくつか作ったテストプログラムは主にデバッグのためのものであったため、ファンクションコール0BHのためのテストプログラムとしては不向きなものになってしまいました。

そこで今回は、「応用CP/M」(村瀬康治著。アスキー出版局)で紹介されていたサンプルプログラムを参考にして簡単なテストプログラムを作りました。

こちらがソースプログラムです。

; BDOS function0B test(fnc0bt)
;2012/5/29
;
	ORG $8100
	FCALL=$8005
;
	LD E,2D
LOOP:LD C,02
	CALL FCALL
	LD C,0B
	CALL FCALL
	OR A
	JP Z,LOOP
	LD C,01
	CALL FCALL
	CP 1A;Ctrl+Z
	RET Z
	JP LOOP
;

こちらがアセンブルリストです。

2012/5/29  9:39  fnc0bt.txt
END=811A
              ; BDOS function0B test(fnc0bt)
              ;2012/5/29
              ;
              	ORG $8100
              	FCALL=$8005
              ;
8100 1E2D     	LD E,2D
8102 0E02     LOOP:LD C,02
8104 CD0580   	CALL FCALL
8107 0E0B     	LD C,0B
8109 CD0580   	CALL FCALL
810C B7       	OR A
810D CA0281   	JP Z,LOOP
8110 0E01     	LD C,01
8112 CD0580   	CALL FCALL
8115 FE1A     	CP 1A;Ctrl+Z
8117 C8       	RET Z
8118 C30281   	JP LOOP
              ;
FCALL        =8005  LOOP         =8102  


[2013.4.8注記]
このプログラムにはバグがあります。
詳しくは[第363回]をご参照ください。(注記ここまで)

たったこれだけの非常に簡単なプログラムです。
プログラムを実行すると画面に’−’が連続して表示されていきます。
何かキーを押すとそのときだけ、そのキーの文字が表示されます。
[TAB]を入力すると、TAB位置までスペースが表示されます。
[Ctrl]+[S]を入力すると、そこでキー入力待ちになって一時停止します。
このとき[Ctrl]+[D](本来は[Ctrl]+[C])を入力すると、システムブレイクしZB3BASICに戻ります。
それ以外のキーを入力したときは、実行が再開されます。
[Ctrl]+[Z]を入力すると、互換DOSに戻ります。

下の画像はFNC0BT.BINをトランジェントエリアにロードしてから、CP/M互換DOSを起動して、仮RAMディスクにセーブしたあと、それを実行している画面です。
Aドライブがディスクフルになってしまいましたので、Bドライブにセーブしています。



上から5行目で[TAB]を入力しています。
画面中ほどで[Ctrl]+[Z]を入力して実行を終了しました。
{Ctrl]+[D]についてのテストをしてなかったのに気が付きましたので、もう一度実行して最後に{Ctrl]+[S]でポーズしたあと、[Ctrl]+[D]でシステムブレイクしました。

今回のファンクションコール0BHをテストする過程で、CP/M互換DOSのファンクションコール0BHのほかにも、ファンクションコール01(コンソール入力)、ファンクションコール02(コンソール出力)も手直しが必要なところが出てきましたので一部修正をしました。

●とりあえず、テストは完了しました

連載記事としましては、まだテスト作業の途中のところなのですが、舞台裏では本日とりあえずのテスト作業は完了してしまいました。
もう少し補強、補正しなければならないところもありますから、あとしばらくはその作業を続けますが、基本的なところとしましては、CP/M2.2互換DOSは完成です。
[第133回]のファンクションコール一覧表をご覧ください。
本日はひとまずの完成を祝って金麦で乾杯です。

あ。
まだ、作業は続きます。
これからいよいよ総仕上げ、仮想RAMディスクの構築にかからなければなりません。

ワンボードマイコンでCP/Mを![第138回]
2012.6.2upload
2013.4.8注記

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