復活!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$' |