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