復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第506回]
●RS232Cプログラムにバグがありました
前回お見せしたE−80ミニコンのCP/M互換DOSのBIOSプログラムにバグがありました。
E−80ミニコンの動作テストをしていただいている大分県のH様から、RS232C受信がうまくできないという連絡をいただいていました。
ZB3BASICではうまく受信できるのですが、CP/M互換DOSのファンクション03を実行すると、全く受信できないとのことでした。
ところが私のところではそのようなことはなくてまともに受信できています。
H様はRS232CのテストにTeratermというソフトを使ってみえるのだそうですが、そうするとそのソフトの問題かとも考えました。
しかしそれならばZB3BASICでも受信できないはずで、それがZB3BASICのREAD#やH様が作られたマシン語のプログラムではうまくいって、CP/M互換DOSのファンクション03を使うと受信できないということですから、ここはCP/M互換DOSのBIOSを疑うべきでした。
ですけれど、私のところではまともに受信できてしまいます。
そうなると、ハードウェアか?
と考えてしまいます。
そこでE−80ミニコンを送り返してもらって調べてみたのですが、全く問題はありませんでした。
私のところでRS232C送受信テストを行なうと何の問題もなく正しく受信できてしまいます。
結局、原因は不明のまま、おそらくH様が1台の同じパソコンにE−80ミニコンを接続して動作させつつ、その同じパソコンの上でTeratermを実行して、かつRS232C−USB変換ケーブルを使って送受信テストを行なっていることに問題があるのではないか、という結論になりました。
マシン語のプログラムやZB3BASICでは問題は発生しないのですけれど、CP/M互換DOSのファンクション03をコールするときだけ異常が発生するという、ちょっといかにも苦しい結論でありますが、それしか他に考えられないという状況でありました。
H様にもそのようにご返事をさしあげたのですが…。
そのH様からファンクション03のバグを指摘するメールをいただきました。
「
アドレスE426のCA10E4がおかしいのではありませんか?
そこをCA23E4に変更したところ、正しく受信できるようになりました。
」
下が前回お見せした、その部分のリストです。
; ;PUNCHER OUT(RS232C OUT) ; E404 ED PUNCHJ:DB ED;IN0 A,[04] E405 38 DB 38 E406 04 DB 04 E407 E602 AND 02 E409 CA04E4 JP Z,PUNCHJ E40C ED DB ED;OUT0 [06],C E40D 09 DB 09 E40E 06 DB 06 E40F C9 RET ; ;READER IN ; E410 2274E2 READERJ:LD (HLWK),HL E413 210000 LD HL,$0000 E416 39 ADD HL,SP E417 2276E2 LD (SPWK),HL E41A 2A74E2 LD HL,(HLWK) E41D 3100E9 LD SP,BSP E420 AF XOR A E421 D339 OUT (39),A E423 CD0904 CALL RSRDSB E426 CA10E4 JP Z,READERJ E429 79 LD A,C E42A C379E3 JP CONSTJ1 |
メールをいただいてはじめて気が付きました。
うむむ。
全く気がつきませんでした。
ご指摘の通りでありました。
確かにこのプログラムはおかしいです。
CALL RSRDSBを繰り返すべきところを、先頭まで戻って繰り返しています。
これではせっかく保存したSPの値が失われてしまいます。
こうなると、私のところでのテストがまともに行なわれていたことのほうが奇跡だということになります。
いやあ。お恥ずかしい。
まことに汗顔の至りです。
さっそく修正いたしました。
; ;PUNCHER OUT(RS232C OUT) ; E404 ED PUNCHJ:DB ED;IN0 A,[04] E405 38 DB 38 E406 04 DB 04 E407 E602 AND 02 E409 CA04E4 JP Z,PUNCHJ E40C ED DB ED;OUT0 [06],C E40D 09 DB 09 E40E 06 DB 06 E40F C9 RET ; ;READER IN ; E410 2274E2 READERJ:LD (HLWK),HL E413 210000 LD HL,$0000 E416 39 ADD HL,SP E417 2276E2 LD (SPWK),HL E41A 2A74E2 LD HL,(HLWK) E41D 3100E9 LD SP,BSP E420 AF XOR A E421 D339 OUT (39),A E423 CD0904 READERJ2:CALL RSRDSB E426 CA23E4 JP Z,READERJ2 E429 79 LD A,C E42A C379E3 JP CONSTJ1 |
H様。
いつもいつもご協力いただき有難うございます。
今後ともご協力のほど、よろしくお願いいたします。
ワンボードマイコンでCP/Mを![第506回]
2013.11.4upload
前へ
次へ
ホームページトップへ戻る