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

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

[第363回]



ここ数日ずっと苦しんでおりまして、ホームページの更新ができませんでした。
ほぼ完成したと思っておりましたCP/M互換DOSで思わぬトラブルに遭遇してしまい、その原因究明に没頭しておりました。
何をやっておったのかにつきましては、少しずつ整理して説明をいたします。
再々の延期にて申し訳ありませんが、CP/M互換DOSにつきましては、もう少しお待ちいただきますようお願いいたします。
今回は予想外のトラブルに遭遇してしまいまして、だいたいのところはけりがついたのですけれど、もうあと少しなんとかしたいところがでてきてしまいまして、その作業におそらくあと数日ないしは一週間ほどはかかるのでは、と思います。
当初のレベルからは格段によくなってきておりますので、なんとかあとしばらくのご猶予をお願いいたします。

●COPYコマンドについての訂正

まずは気が付きましたことから書くことにいたします。
前回の説明の訂正です。
前回は、次のような説明をいたしました。

CP/Mの実行ファイルは拡張子がCOMでなければなりません。
ZASMで作成されるバイナリファイルの拡張子はBINです。
そこでまずそのBINをCOMに変更します。
ren vftst1.bin vftst1.com[Enter]
を実行します。

そのように説明をしたのですけれど、とんでもないポカでありました。
COPYコマンドを作りましたときに、そういう面倒な作業はしなくてもよいようにと考えて、BIN→COMへの自動変換機能を組み込んだことをすっかり忘れてしまっておりました。
自分で作成した機能を自分がすっかり忘れてしまっていたのですから情けない話です。

COPYコマンドのその機能につきましては[第200回]に書いておりました。

COPY Z:xxx.BIN

を実行しますと、仮想FDDのカレントドライブには、xxx.COMの名前でセーブされます。
こんな感じです。



●ファンクションコール0Bテストプログラムの訂正

今回遭遇しましたトラブル(ま、はっきり言ってしまえばCP/M互換DOSの不具合)を解消する過程でたまたまみつけてしまったテストプログラムのバグにつきまして、今頃になって恐縮ではありますがつつしんで訂正をいたします。
[第204回]で説明をいたしましたFNC0BT−2.TXTにバグがありました。
下にリストを再掲いたします。

; BDOS function0B test(fnc0bt)
;2012/5/29 8/24
;
	ORG $0100
	FCALL=$0005
;
	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
;


どうしてこれで動いていたのか不思議でありますが、とにかく間違っておりました。
それを訂正しましたのが、上のCOPYコマンドで仮想FDDにコピーしましたFNC0BT−3.BINです。
下はそのソースリストです。

; BDOS function0B test(fnc0bt)
;2012/5/29 8/24
;13/4/7
;
        ORG $0100
        FCALL=$0005
;
LOOP0:LD E,2D
LOOP:LD C,02
        CALL FCALL
        LD C,0B
        CALL FCALL
        OR A
        JP Z,LOOP0
        LD C,01
        CALL FCALL
        CP 1A;Ctrl+Z
        RET Z
        LD E,A
        JP LOOP
;


ファンクションコール01と02は[第122回][第197回]で説明をしております。
ファンクション01はキーが押されるまで待って、押されたキーのコードをAレジスタに入れてリターンします。
ファンクション02はEレジスタに入れたコードに対応する文字を画面に表示します。
もとのプログラムではファンクション01で入力した文字コードをEレジスタに渡すところが抜けています。
またファンクション0Bはキーが押されたかどうかをチェックして、押されてなければAレジスタに00を入れてリターンしますが、押されていないときにはEレジスタにコード2Dを入れるところにジャンプしなければならないのですけれど、もとのプログラムではそのようにはなっていません。

もとのプログラムは[第138回]で作ったテストプログラムをもとにしていますから、その[第138回]のプログラム(FNC0BT)も間違っていることになります。
こんな初歩的なミスをして全く気がつかなかったというのは、ほんとうにお恥ずかしいお話です。

●FNC0BT−3の実行

それで、あらためてFNC0BT−3を実行してみましたのが下の画面です。



実はFNC0BTやFNC0BT−2を作って実行しました当初は、どうにもキー入力の応答が遅いことにいらいらしましたが、その理由のひとつは上で説明しましたプログラムのバグによるものでした。
しかしそれを直してもまだキー入力の応答には問題がありました。
このテストプログラムではキーを押したら押している間そのキーの文字が画面に表示されるはずなのですが、以前のテストではそうはならなくて、キーを押してもすぐに反応しなかったり押しているのにぽつぽつと文字が抜けてしまうことが多く発生していました。
それにはWindowsシステムのどうしようもないお節介な機能がからんでいて、それにCP/M互換DOSのシステムがうまく対応できていなかったことが大きく関係をしていました。
この3日ばかりの間、おもにそのことの究明と対策に多くの時間を費やして悩んでおりました。
やっとのことで、なんとかなったように思います。
上の画面はその対策が済んだあとでのテストを行なったものです。
キーを押した瞬間に気持ちよく反応してくれています。そして押しただけずっとそのキーの文字が表示されています…。
と言いたいところなのですが。
実はd、e、f、gで4文字表示したあと、8回ほど’−’が表示されてそれからあとは連続してその文字が表示されているところは、ずっと連続で押していたのです。
途中で飛んでいるのはオートリピートに入るまでの空白です。
正直言ってWindowsはまったく余計なことをしてくれるものです。
オールドファッションなソフトには実に邪魔なお節介です。
これはキーボードの設定によって応答を速くすることはできますがその機能をOFFにすることはできません。
あ。
最初の1回の入力だけを有効にする設定はできるようですが、それじゃあ全く使い物になりません。
本当は今回の対策をする前は、上の大きい空白だけではなくて、オートリピートに入ったあとも小刻みにキー入力が切れて間に’−’が入ってしまいました(大体はご想像いただけるかと思います)。
その細かい「息切れ」についてはCP/M互換DOSの上での対策によってクリアさせることができました。
その対策を工夫するために、たっぷり1日以上悩んでしまいました。
そのことにつきましても、整理して説明をしていくことにいたしますが、今回はこれから説明をしていきます内容がちょいとたっぷりの量がありますので、どのあたりで説明に入れるかわかりません。

本日は時間が無くなってしまいましたので、とりあえずここまでといたします。

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

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