2023-12-13 20:58 — asano
カテゴリー:
NS32016ボードのコメントにちょっと書いたようにNS32081 FPUを搭載してみました。
空きエリアに24ピンソケットを置いてNS32081D-10を載せます。
このFPUはたったの24ピンしかないのにバスは16ビットあります。接続は簡単でデータシートの通りにNS32016の同名の信号と接続するのみ、CPU空間のデコードを必要とするMC68881などよりシンプルです。あ、クロックだけはNS32201から引っ張ってきます。
ハードウェア的に接続出来たら次はソフトウェアですが......
試しにSETCFG
で"F"ビットを立てておいてゼロ除算を実行してみたところSlave Processor Trapが無事発生して動いている(石が生きていて、正しく接続されている)らしいことが確認できました。
これだけでは何なのでMN1613のときと同様にマンデルブロ集合を試すことにします。
単精度(32ビット)ならレジスタが8つ使えるのでワークエリアを使わずレジスタのみでサラサラと書けます。それで一気に書き上げて実行してみたところ......
Slave Processor Trapが発生してしまいました。アドレスから終了判定の乗算命令であることまではわかりましたが、それ以上の情報が全くありません。念のためFSRのIEN, UENビットを落とすようにしてみましたが変化ありません。(両ビットは初期状態で0だったようです)
このままでは埒が明かないのでトラップ時にCPUレジスタだけでなくFPUレジスタも表示するようにUniversal Monitorを変更します。
再度実行するとトラップ時のFSRの値は00000042HでこれはOverflowを表しています。問題の命令はMULF F4,F4
なのでF4の値はというと0EEF2B582H、これではさっぱりなのでネットの変換ツールで10進にしたところ-3.75574...e+28で確かにこれを2乗したらオーバフローすることがわかります。
同様に他のレジスタの値も確認し、コードも見直していったところ......
終了判定のBcond
命令を誤って終了せずに発散してしまっていたのでした。
これを修正したところ動作しました。
実行時間は約5秒ほどで約7秒だったMN1613よりも少し速いですね。こちらはまだ暫定のクロック発振器のままで2.5MHz動作なので、CPU, FPUの定格である10MHzまで上げればMN1613の約5倍くらいの速度となるでしょう。
あとNS32082 MMUもあるのですが、もう載せる場所がありません。
載せるなら下駄対応かなぁ。
コメントを追加