古いCPUの話題が多いです

写真付きで日記や趣味を書くならgooブログ

Z-80で複素数の電卓を作る(24bit編)

2017-05-06 15:34:52 | 日記
みなさんこんにちは。
今回は、2009年7月8日の記事「Z-80で複素数の電卓を作る」で作成した仮数32bitの浮動小数点計算を、仮数24bitに短縮したプログラムをご紹介します。
2009年のバージョンは、1980年ごろの古いパソコン「NEC PC-8001」と「SHARP MZ-80B」の両方で利用できましたが、今回は「SHARP MZ-80B」のみご利用いただけます。但し、下記ソースコードのorg命令を上位の番地に移動し、biosを呼び出すところをPC-8001用に差し替えればPC-8001でも実行できます。
    
ソースコードを下記に示します。(コード専用のページに移動します)
Z-80で複素数の電卓を作る(24bit編)
http://sourcecode0001.seesaa.net/article/449612610.html
    
アセンブラをお持ちでない方は、下記のダンプリストをご利用ください。
Z-80で複素数の電卓を作る(24bit編)(ダンプリスト)
http://sourcecode0001.seesaa.net/article/449615946.html
    
32bitバージョンと今回の24bitバージョンで、どれだけ高速化されているか計測しました。
「sin(0.85)を1000回実行するのに何秒かかるか」
  • 自作32bitバージョン(6バイト実数・10進8桁):8.7秒(MZ-80Bで実行)
        
  • 自作24bitバージョン(4バイト実数・10進6桁):5.3秒(MZ-80Bで実行)
       
  • (参考)SHARP製BASIC SB-5520(5バイト実数・10進8桁):9.0秒
    測定方法は、FOR NEXTの1000回ループでA=SIN(0.85)を実行し、その後A=0.85に変更して両者の時間差を取った。
        
  • (参考)NEC製PC-8001 N-BASIC VER1.0(4バイト実数・10進6桁):16.7秒
    測定方法は、FOR NEXTの1000回ループでA=SIN(0.85)を実行し、その後A=0.85に変更して両者の時間差を取った。
     

自作24bitの実行速度はSHARP SB-5520の倍を目指しましたが、うまくいきませんでした。
これはアマチュアプログラマーをつとめる私が年老いて、速いプログラムを書く能力が衰えたから、と説明できるでしょう。
特に実数の四則計算のところは、ちょっと間違えると結果がひどい目に合うので、このような連休がなければ作品を残すことさえできません
なお、NECのBASICは昔から遅いことが指摘されてきましたが、これはCPUにZ-80Aを使用しているにもかかわらず、BASICは全部8080のコードしか使っていないからです。おそらく何らかの契約でそうなったのでしょう。またPC-8001のZ-80Aはノーウェイトではありません。このようなことから、単純に比較はできません。
    
自作ソースコードは高速化の余地があるように思います。読者の皆さんがご自由に変更して、高速化してやってください
私はこれらの古いCPUで高速に実数を扱うプログラミングを、自動化できないか検討しています。
人間のプログラマーを超えるコンパイラを作るのです
   

ジャンル:
ウェブログ
この記事についてブログを書く
« PCゲームの未来 | トップ | 沈黙の理由 »