CPU実験室

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

浮動小数点テスト(2)

実数演算を含むプログラムも動きそうなのでいつものマンデルブロ集合描画をやってみます。

先ずオペランドに即値が置けないので使いそうな1,2,3,4・・・といった定数をデータ定義しておきます。また変数も領域確保のため初期値0で同様に定義します

複素数c=a+biマンデルブロ集合に属するかのチェックルーチン:mandel_chkは以下のようになりました。

浮動小数点数をスタック上で演算するという意味ではNS32032の処理と同じなのでソースをそっくり持ってきて移植することができます。ただNS32032ではよく参照する変数a,b,x,yはFPUのレジスタF0,F2,F4,F6に保持することができましたがトランスピュータではメモリ上に持つしかないので都度FPLDNLDB/FPSTNLDB命令でメモリ⇔レジスタ(スタックトップFAreg)間の転送をしなければなりません

初期化と実部処理

虚部処理と絶対値判定

ループと脱出処理

逆ポーランド記法で演算を処理していく流れは全く同じで見通しは良いです。ただしNS32032のスタックはメモリ上にあってスタックオーバーフローはほぼ考慮しなくていいですがトランスピュータはCPU内蔵ハードウェアで3段しかありません。さらにデータの収納アドレスもスタックに積まれるし古いデータは問答無用で押し出されてしまうので果たして処理できるか心配でしたが案外入ってしまうようです。

 

キャラクタ座標80カラム×40ラインで実軸a:-2~+1(a=(X/80)*3-2)、虚軸b:-1.5~+1.5(b=(Y/40)*3-1.5)、打切り回数NMAX=256mandel_chkを回し、発散しなかったところはスペース(0x20)、発散した時の回数をスペース(0x20)に加算したASCII文字で描画しいつもの結果が得られました。

プログラムサイズは0x208=520バイト、処理時間は3.5秒でした