復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第67回]
●CP/Mソースプログラムの修正作業
CP/Mのテストプログラムを作って動作確認をしていましたら、ときどきCP/Mが起動しなくなってしまうことを経験しました。
その原因を追求してみましたら、どうやらスタックがオーバーしてCP/M本体のプログラムを破壊してしまうことがわかりました。
どういうわけかCP/Mのシステムスタックはプログラムのど真ん中に置かれているのですよねえ。
しかもたった16バイトしかありません。
もともとの設計上はそれでよかったのかもしれませんが…。
●システムスタックの位置を変更する
とにかく16バイトでは少なすぎる気がしますし、どうもシステムプログラムのど真ん中にスタックエリアを置いておくというのは気が進みません。
ですから、CP/Mソースを書き換えて、システムスタックを移動することにしました。
CP/Mソースプログラムの最終はCPM22G.TXT([第37回])です。
これを修正して、CPM22H.TXTにします。
修正作業です。
1)CPM22G.TXTの1210行にCCPSTACKがあります。
そこを ; をつけてコメント行にします。
2)次に、15行の ; のところに、CCPSTACKの定義文を置きます。
CCPSTACK EQU 0E000H にします。
CP/M+BIOSが終わったずっと後ろのE000Hから前にシステムのスタックエリアを設けます。
●NOPにしたところを再修正する
当初のテストではちょっと都合の悪いことがあったため、ソースプログラムの一部をNOPで置き換えたところがありましたが、その後にクリアできましたので、もとのプログラムに戻します。
3)1338行の文をNOPにしていたところを、下のようにもとのRET NZに戻します。
●キー入力バッファをクリアする
上の修正作業に関係しているのですが、CP/Mにエントリしたときにキーバッファエリアに何かが入っていると、それがキー入力文字として表示されてしまいます。
これを防ぐために、BIOSからCP/Mにジャンプする前に、キーバッファをクリアするようにBIOSを変更します。
4)3804行のJP CBASEのところに、下の図のように次の3行を挿入します。
XOR A
LD (INBUFF+1),A
LD (CHARBUF),A
以上の修正を行なったら、CPM22H.TXTの名前でセーブします。
そのあと、ZASM.EXEでアセンブルします。
●CPM22H.BINをND80ZVにロードする
アセンブルによって作成されたCPM22H.BINをND80ZVにロードします。
logfile nd80zlog\03192138.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld cpm22h.bin,bc00 loading CPM22H.BIN ...1710(5904)bytes loaded,from BC00 to D30F >jp d233 a>dir A: FNC0BTST COM : FNC0BT2 COM : FNC0BT3 COM : FNC0BT4 COM a> |
/ld cpm22h.bin,bc00[Enter]
で、修正後のCP/Mをロードしました。
JP D233[Enter]
でCP/Mを起動しました。
DIRコマンドでディレクトリを表示させました。
最近作ったテストプログラムがいくつかセーブされています。
ファンクションコール0Bについてテストをしています。
ファンクションコール0Bは、コンソールステータスチェックです。
それについては次回に説明をいたします。
ワンボードマイコンでCP/Mを![第67回]
2012.3.21upload
前へ
次へ
ホームページトップへ戻る