復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第31回]
●Bdos Errの解明(2)
前回の続きです。
もう一度簡単にまとめてみます。
エラーメッセージが表示される直前のアドレスC4A5にブレークポイントを設定して、ブレークしたときのレジスタダンプは以下の通りでした。
A F B C D E H L A'F' B'C' D'E' H'L' PC SP IX IY I SZ H PNC F1B3 000F 805C C3EF F1B3 000F 805C C4D5 C4A5 C3A5 0044 F1A1 FF 10110011 |
>d.,c390,c3af C390 20 21 F0 C3 B6 C2 09 BE-C3 82 BF 00 00 00 00 96 !.テカツ.セテ.ソ..... C3A0 BC 73 BE EF C3 0D C4 08-81 5F C3 00 00 24 24 24 シsセ.テ.ト.._テ..$$$ |

2012/1/16 17:49 T1520.TXT
END=814A
; cp/m t1520 オウヨウcp/m p.82
;12/1/16
;
ORG $8100
FCB=$805C
FCBCR=$807C
DMABF=$8080
DIRPOINT=$8790
BDOS=$C409
;
8100 0E0F START:LD C,0F;=15
8102 115C80 LD DE,FCB
8105 CD09C4 CALL BDOS
8108 FEFF CP FF
810A CA3181 JP Z,OPNERR
|
A F B C D E H L A'F' B'C' D'E' H'L' PC SP IX IY I SZ H PNC F1B3 000F 805C C3EF F1B3 000F 805C C4D5 C4A5 C3A5 0044 F1A1 FF 10110011 |
AレジスタはF1になっています。
Cレジスタは0Fですから、SBC A,Cは、
00−0F=F1という計算が行なわれた、と推測できます。
当然結果は0ではありませんから、Zフラグは立ちません。
つまりアドレスC40AのCALL NZ,ERROR2は、ERRO2ルーチンをコールしてしまったのです。
ちなみに、スタックアドレスのダンプリストをもう一度よく見てみますと
>d.,c390,c3af C390 20 21 F0 C3 B6 C2 09 BE-C3 82 BF 00 00 00 00 96 !.テカツ.セテ.ソ..... C3A0 BC 73 BE EF C3 0D C4 08-81 5F C3 00 00 24 24 24 シsセ.テ.ト.._テ..$$$ |
2012/1/16 17:49 T1520.TXT
END=814A
; cp/m t1520 オウヨウcp/m p.82
;12/1/16
;
ORG $8100
FCB=$805C
FCBCR=$807C
DMABF=$8080
DIRPOINT=$8790
BDOS=$C409
;
8100 0E0F START:LD C,0F;=15
8102 115C80 LD DE,FCB
8105 CD09C4 CALL BDOS
8108 FEFF CP FF
810A CA3181 JP Z,OPNERR
|