2014.11.17

前へ
次へ
ホームページトップへ戻る

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第67回]


●倍精度実数演算プログラムの組込み

また間が空いてしまいました。
前回も書きましたように、少し前からMYCPU80にZB3BASICを移植する作業に取り組んでいます。
この数日間集中して取り組みました結果、あとはほとんど倍精度実数演算を残すのみというところまで出来ました。
しかしその倍精度実数演算が難物でこの3日ほど苦戦しております。
やっとのことで倍精度実数の表示機能のみ組み込むことができました。

下は今朝になってからやっとまともに表示されるようになったばかりの倍精度の円周率を表示させているところのログです。

logfile nd80zlog\11171028.txt open
zb3dos3m 2014.3.31 by Chunichidenko

MYCPU80に接続しました

*** nd80z3 basic ****
>10p.pi#
>.
    10 PRINT PI#
>r.
 3.141592653589793

>/close
logfile closed at Mon Nov 17 11:04:38 2014

そんなものはどうせ組込み済みの定数をただ表示させているだけではないか。
そんなに大層なものでもあるまい。
とお思いかもしれませんが、どうしてどうしてそんな簡単なものではありませぬ。
確かに倍精度の円周率は定数として組み込んではおりますが(それは単精度の円周率も同じですが)、表示に適するような形ではなくて、倍精度実数演算にすぐ使える形で組み込んでいます。
ですのでそれを表示するにはかなり複雑な倍精度実数の表示プログラムを必要とします。
ちなみにZB3BASICに組み込まれております倍精度の円周率は下のような形で組み込まれています。

              ;;;PAI=3.141592653589793
779D 5F       FPAI:DB 5F
779E B4       DB B4
779F 10       DB 10
77A0 51       DB 51
77A1 ED       DB ED
77A2 87       DB 87
77A3 64       DB 64
77A4 02       DB 02
77A5 00       DB 00

;;;PAI=...
のところはコメントですからプログラムでは参照されません。
プログラムで参照されるのはFPAI:以下の
00 02 64 87 ED 51 10 B4 5F
です。
プログラムの都合で上記の逆順で組み込まれていますが、これが16進数で組み込まれた倍精度の円周率です。
00は符号部で02は指数部です。
その次からの7バイトが仮数部です。
この16進数は浮動小数点数になっています。
これを十進数に変換して、それからASCII文字に変換してやっと表示することができるようになります。
なかなかハンパなプログラムではありません。

ちなみに上記の数が円周率であることは以下のようにして確認することができます。

Windowsの電卓を開きます。
以下はWindows7の場合です。



最初に念のため[MC](メモリクリア)を押してください。

[表示]をクリックしてメニューを開き、[関数電卓][プログラマ]を選択します(2014.11.22 間違いに気が付きましたので訂正いたしました)。



関数電卓プログラマ電卓になりました。



左の枠の中で16進数を選択します。
さきほどの円周率の仮数部をそのまま入力します。

10進数に切り替えます。



ここで[M+]を押してメモリに記憶します。
Windows7の電卓はこうしないとそれからあとの演算がおこなえません。
Windows98はこのまま実数計算に進むことができました。

そのあと[普通の電卓]に切り換えます。



[MR](メモリリコール)を押すと演算可能な実数として表示されます。



/256/256/256/256/256/256/128*4=
と続けて入力します。
最後の*4は指数部の2の処理です。

十進数の円周率になりました。



MYCPU80でCP/Mを![第67回]
2014.11.17upload
2014.11.22語句訂正

前へ
次へ
ホームページトップへ戻る