MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第38回]
●Dレジスタがおかしい?そしてRBレジスタがクリアされてしまう?
前回の続きです。
テストプログラムを作って実行してみたところ、アドレス820Bから8221の間で異常が発生していることがわかりました。
テストプログラムのその部分ではRBレジスタの仮数部を右にシフトしています。
FAレジスタに加算するためにFAレジスタに桁位置を合わせるためです。
FAレジスタの指数部は00で、RBレジスタの指数部はFA(−6)ですから、RBレジスタの仮数部を右に6ビットシフトするとともに、RBレジスタの指数部を00にします。
プログラムを見ますと確かにそういう処理を行なっています。
;shift right RB & RBE++;till A=0 8206 47 RBFA4:MOV B,A 8207 3A10F1 LDA RB7 820A 57 MOV D,A 820B CD1D83 CALL FADSP 820E 210FF1 RBFA42:LXI H,RB6 8211 0E04 MVI C,04 8213 AF XRA A;reset cf 8214 7E RBFA43:MOV A,M 8215 1F RAR 8216 77 MOV M,A 8217 2B DCX H 8218 0D DCR C 8219 C21482 JNZ RBFA43 821C 14 INR D 821D 05 DCR B 821E C20E82 JNZ RBFA42 8221 CD1D83 CALL FADSP 8224 7A MOV A,D 8225 3210F1 STA RB7 8228 3AFFF1 RBFA5:LDA FA8 |
820B 800052AEF000017801CC 00FA481075D1 FA95 0684 FA12 F200 8221 800052AEF000017801CC 00FA00000000 0044 0000 FF12 F10B |
820B 800052AEF000017801CC 00FA481075D1 FA95 0684 FA12 F200 8221 800052AEF000017801CC 00FA012041D7 D744 0000 0012 F10B |