CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

HEX変換(2)

プログラム領域のメモリダンプがうまくいったのでメモリを直接参照している1行 MOVE P:(R0),X0MOVE X:(R0),X0MOVE Y:(R0),X0に変えるだけでたちまちXDATAダンプ、YDATAダンプのメニューを追加できました。

YDATAメモリの$100~$1FFの256ワードには工場出荷時書込み済のオンチップROMがアサインされていて1周期分のサイン波データが埋込まれているとされています。この部分をダンプしてみると、

・・確かにそれっぽい値が表示されます。ですが何故か後半部分から文字化けが混ざってきています。1桁単位の変換(0...15→0...F)のHEX1ルーチンは正しく動作しているはずなのですが。

24bitデータがマイナス(最上位bit=1)のとき起きるようなのでシミュレータsim56000で化けるときの入力値でHEX6ルーチン全体でのレジスタの挙動を見てみました。その結果わかったのが

24bitレジスタを56bitアキュームレータにコピーするとき、仮想的な小数点に合わせて左詰めD47-D24へロードされる(←ここまでは既知)のはいいとして同時に拡張バイト(D55..D48)へ自動的に符号拡張する、とあります

このあとアキュームレータにロジカルなマスクをかけて必要なビットパタンを切り出しても拡張ビットに「符号のゴミ」が残ってしまいHEX1ルーチンの中の比較処理CMP A,Bに影響を与えてしまったようです