Benchmark for Gameboy


img
2ch掲示板の「昔のPC」板に【友好数探し】ベンチスレ@昔のPC板 というスレッドがあります。

BASIC の短いリストを実行すると、友好数という特別な数字を探索するのですが、
各マシンのハードウェア構成や内蔵BASIC インタプリタの性能によって、かなり結果の出る時間に差が出ます。
これを性能の指標として競おうという趣旨なのですが、FC やポケコンなど多彩なマシンが参戦していて興味深いです。
GB は言語の問題があり、そのままでは実行できなかったので、マシン語に移植して挑戦してみました。




■ 解説

ソースリスト

元のプログラムは BASIC で書かれているため、これをマシン語に移植して実行しています。
GB にも C や BASIC が一応ありますが、GB の素の性能が知りたかったのと他環境の使用経験が少ないため見送りました。

移植にあたっては、オリジナルのプログラムの流れになるべく準じるようにしました。
変数は16bit固定で、除算ルーチンも汎用の16bit/16bitのみを使用しています。
チューニングすればもっと速くなると思います。いろいろ弄りがいはありそう…というか作り変えた方が早いかも。

本家Z80では、また違った結果が出るでしょうし、16bitマシンの本気もまだまだ未知数です。
いろいろなマシンの底力を見てみたいところです。

■ 本体とソースファイル

img
エミュレータでの実行画面です。手抜きなので寂しいです。

ROMを立ち上げると画面は黒いままですが、入力受付になります。
ここでパッドの B ボタンを押すと音が鳴って計算を開始します。
結果が出るたびに音が鳴ります。時間は手動計測になります。
タイマーつきMBC3にして時間表示も…と思ったのですが面倒なので止めました。
下に掲載した結果は実機で実行中の音を録音ソフトで拾って時間計測しました。ほぼ正確だと思います。

ソースリスト付き ROM ファイルfnum_gb.zip (10KB)

■ 結果

【メーカー】任天堂
【機種名】ゲームボーイ
【CPU】Z80カスタム
【クロック数】4MHz
【メモリ】32KB ROM
【言語】機械語(アセンブラ)
【プログラムの変更点】110行の「FOR J=2 TO 1000」を、「FOR J=2 TO 10000」相当に修正。
▼スコア
【220,284】4秒6
【1184,1210】2分14秒8

※実機を用いた計測結果です。


▲ TOP