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

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

[第87回]

●BIOSの変更(CP/M終了時の処理)

今回は前回までの流れを受けて、ファンクションコール0Eのテストプログラムについて、もう少し書くつもりだったのですが、ちょっと予定を変更いたします。

実は前々から気になっていたことがあります。
それは、CP/Mを終了したあとに表示される、ERR:23です。
CP/Mを終了するにはCtrl−D(本来はCtrl−C)を入力するのですが、そうするとJP D233でCP/Mにエントリしていたところから、もとのZB3BASICに戻ってきます。
そこでZB3BASICのキー入力モードになって、>が表示されるのですが、ちょっとこのあたりの処理が手抜きになっておりまして、そこではZB3BASICのコマンドを入力することができません。
一旦[Enter]で改行すると、ZB3BASICの通常の入力待ち状態になります。
その改行を行なったときにERR:23が表示されてしまいます。

ERR:23が表示されても、操作そのものに影響があるわけではありませんから、当面はこのままにしておいて、仮想フロッピーディスクシステムに移行したときに直すつもりだったのですが。
毎回説明のたびにERR:が表示されたログを見るにつけ、なんとかしたい、という気がつのります。

なに。
それほど大変な作業ではありません。
できるだけCP/Mそのものについての作業を優先したい、という気持ちから、後回しにしていたのです。

ファンクション0Eについては一息つきましたので、この機会に直してしまうことにしました。

直すところは、今までCtrl−D(本来はCtrl−C)の入力によってZREENT(ZB3BASICのエントリアドレス)にジャンプしていたところです。
そのジャンプ先のZREENTを変更して、直接ZB3BASICにエントリするのではなくて、そこに処理を加えてからZB3BASICにエントリするように直します。

今回直すのはBIOS部分だけですが、今のところCP/MのCCP、BDOSと一体になったソースプログラムを使っていますから、それを修正します。
修正するところは3箇所です。

[第83回]で作成したCPM22K.TXTを直します。
あ。CPM22K.TXTもBIOS部分だけを直したのでしたね。

1)ZREENT→ZREENTJへのジャンプに変更します。
下左がCPM22K.TXTです。
それを下右のように直します(CPM22L.TXT)。



JP SETENTRY
の下に、次の1行を追加します。

ZREENT:JP ZREENTJ

上で説明しましたようにZREENT(=1033H)を、ZREENT=ZREENTJに変更して、その先に処理プログラムを書くことにします。
こうすることで、CP/M本体は手直ししなくて済みます。

2)ZB3BASICへのエントリアドレスのラベルを変更します。
ZREENT=1033Hとして使っていたところを変更してしまいますから、最終的なZB3BASICへのエントリアドレス1033Hにつけていたラベル(ZREENT)を別の名前に変更します。

下左が変更前(CPM22K.TXT)で、下右が変更後(CPM22L.TXT)です。



3784行の
ZREENT EQU 1033H
を次のように変更します(上で行追加作業を行なったため行番号はずれています)。

ZB3MON EQU 1033H

ZREENTからZB3MONにラベルを変更しました。

3)ZREENTJ:以下のプログラムを追加します。
ZREENTのジャンプ先ZREENTJ:のプログラム部分を追加します。
下左が追加前(CPM22K.TXT)で、下右が追加後(CPM22L.TXT)です。



ソースプログラムの最後(SECTRNJ:ルーチンの下)に、ZREENTJ:ルーチン(下記)を追加します。

ZREENTJ:CALL CRLFDP
	LD HL,ENDCPM
ZREENTJ2:LD A,(HL)
	CP 24H;'$'?
	JP Z,ZREENTJE
	CALL ADISP
	INC HL
	JP ZREENTJ2
ZREENTJE:CALL CRLFDP
	JP ZB3MON
CRLFDP:LD A,0DH
	CALL ADISP
	LD A,0AH
	JP ADISP	
ENDCPM:	DEFB	'end of CP/M$'

以上で変更作業は終了です。
名前をCPM22L.TXTに変更して保存します。

●アセンブル

CPM22L.TXTをZASM.EXEでアセンブルして、CPM22K.BINを作成します。



●ND80ZVへのロードと実行

CPM22L.BINをND80ZVにロードして、JP D233[Enter]でCP/Mを起動したあと、Ctrl−Dを入力して、CP/Mの終了動作を確認してみました。



CP/Mを起動したあと、DIRコマンドを使ってみました。
CP/Mは正常に動作しているようです。
そのあとCtrl−Dを入力しました。
end of CP/M
と表示されたあと、

が表示されました。
本当はここでZB3BASICのコマンドを入力すれば、そのまま実行されるのですが、念の為[Enter]を入力してみました。
ERR:23は表示されません。
>のみが表示されました。
DMコマンドを使ってみました。
そのあとJP D233[Enter]で、またCP/Mを起動してみました。

うまく修正できたようです。

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

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