復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第186回]
●ブレークプログラム(CP/M互換DOSのための変更)
[第180回]から[第185回]まで6回にわたってブレークプログラムについて説明をしてきました。
その中で何回か書きましたように、ブレークプログラムはND80ZVのROMに書かれているZB3BASICプログラムの一部です。
当然のことながらそのままでは、フルRAMの状態では使うことができません。
ところがすでに書きましたように、MBASICやFORTRAN80をCP/M互換DOSのもとで実行しようとしたところ、最初はうまく動作してくれなかったために、どうしてもブレークポイントを設定してデバッグしなければならないことになってしまいました。
そのためには、フルRAMの状態でもブレークプログラムが機能するように、プログラムを書き換えなくてはなりません。
基本的な考え方は[第163回]でDMコマンドの変更作業のところで説明したのと同じことなのですが、それで果たしてブレーク処理がうまくいくのかやや心配なところもありました。
しかし実際にプログラムを書き換えて試してみましたら、[第180回]に書きましたように、フルRAMの状態でも問題無く機能してくれました。
今回は、そのフルRAMのためにブレークプログラムに対して行なった変更作業について説明をいたします。
●BP
まずはブレークポイントの設定(BPコマンド)のプログラムです。
変更前のプログラムリストは[第182回]でお見せしました。
そのときと今回のリストとではプログラムアドレスが少し異なっています。
プログラムを変更した結果、その変更箇所から後のプログラムが変わってしまいました。
大幅な変更ではありませんから、アドレスは少し異なっていますが、プログラムの中味はほとんど同じです。
;;; ;;;BP SET 1BD1 3EC3 BP:LD A,C3 1BD3 32CCFF LD (RST7JC),A 1BD6 21531B LD HL,BROUT 1BD9 22CDFF LD (RST7JA),HL 1BDC 13 INC DE 1BDD D5 PUSH DE 1BDE CD4510 CALL ASHX4 1BE1 DAFC1B JP C,BPST3 1BE4 C1 POP BC 1BE5 2280F0 LD (BRKAD),HL 1BE8 3E80 LD A,80 1BEA 3283F0 BPST2:LD (BRKCK),A 1BED CDCE1C CALL MEMRD2 1BF0 3282F0 LD (BRKBF),A 1BF3 3EFF LD A,FF 1BF5 CDE11C CALL MEMWR2 1BF8 77 LD (HL),A 1BF9 C3A418 JP ENTRY 1BFC D1 BPST3:POP DE 1BFD 1A LD A,(DE) 1BFE FE44 CP 44 1C00 CA1F1C JP Z,BPST4 1C03 FE30 CP 30 1C05 C23010 JP NZ,WHTDP 1C08 3A83F0 LD A,(BRKCK) 1C0B B7 OR A 1C0C CAA418 JP Z,ENTRY 1C0F 2A80F0 BPST6:LD HL,(BRKAD) 1C12 3A82F0 LD A,(BRKBF) 1C15 CDE11C CALL MEMWR2 1C18 AF BPST5:XOR A 1C19 3283F0 LD (BRKCK),A 1C1C C3A418 JP ENTRY 1C1F 3A83F0 BPST4:LD A,(BRKCK) 1C22 B7 OR A 1C23 CAA418 JP Z,ENTRY 1C26 2A80F0 LD HL,(BRKAD) 1C29 CD4E10 CALL HXDP4 1C2C CD1B10 CALL CRLF 1C2F C3A418 JP ENTRY ; |
1CE1 F5 MEMWR2:PUSH AF 1CE2 7C LD A,H 1CE3 B7 OR A 1CE4 F23FD2 JP P,RAMWR 1CE7 F1 POP AF 1CE8 77 LD (HL),A 1CE9 C9 RET |
; 1CCE 7C MEMRD2:LD A,H 1CCF B7 OR A 1CD0 F242D2 JP P,RAMRD 1CD3 7E LD A,(HL) 1CD4 C9 RET ; |