ファミリーベーシック VS ポケコン
今回もファミリーベーシックネタ。
以前、Nintendo DSiのBASICプログラミングアプリであるプチコンを取り上げた際、プチコンのBASICとポケコンのBASICで同等のプログラム走らせ完了までの時間を計りベンチマーク対決をしました。
その時の結果は当然のごとく32bit機であるプチコンの圧勝でしたが、今回はファミリーベーシックとポケコンという8bit機器同士の対決。
この対決は前々から少し興味があったので、今回は結果が非常に興味深いです。
両者のハードウェア的な簡易比較
◎ポケコン(PC-G850V)
CPU Z80互換(S1L50752F25N0) 8Mhz
RAM容量 32KB
使用可能言語 BASIC/CASL/C言語/CASL/Z80アセンブラ/PICアセンブラ(今回はBASICを使用)
◎ファミリーベーシックver2.1(内部的にはファミコンのCPUを使用)
CPU リコー製 RP2A03(6502カスタム) 1.79Mhz
RAM容量 2KB
使用可能言語 NS-Hu BASIC(ファミリーベーシック使用時)
クロック周波数等の仕様上はポケコンの方が速そうです。
ただ、ファミコンのCPUも当時の8ビットマシンの中ではかなり速いという話も聞いたこともあるので侮れません。
使用するプログラム
前回も使用した素数計算プログラムを使用します。
↓具体的には以下の様なプログラムです。
(参考)ポケコン版の素数計算のプログラムリスト
*******************************************************************
10 ‘ソスウハンテイプログラム
20 INPUT “セイスウ ヲ ニュウリョク>”;A
30 B=0
40 FOR D=2 TO A-1
50 IF A MOD D=0 THEN B=1:PRINT “/”;D;”デワリキレタ!”
60 NEXT D
70 PRINT “”
80 IF B=0 THEN PRINT A;”ハ ソスウデス”
90 IF B=1 THEN PRINT A;”ハ ソスウジャナイ”
100 PRINT “”
110 GOTO 20
*******************************************************************
↑ポケコンと同じ内容のプログラムをファミリーベーシック上にも入力
入力された任意の整数(自然数3以上の入力を想定)を単純に2から順に入力された数値まで1づつ値を増やしながら割り算をしていき、割り切れた場合はその数(約数)を全て出力し、最後に割り切れる数(約数)が1とその数自身以外一つも無かった場合は”素数です”と判定し出力します。
かなりの力技のプログラムですのでベンチマーク用には持って来いですね。ただし、以前は判定する数値に”99999”を入力し計算させましたが、ファミリーベーシックの扱える整数値の範囲が、”-32768~32767” までという何とも残念な制約があるのに加え、相当な時間がかかるのが予測されるため今回は”3999”で測定します。(約数が少なめで画面表示が分かりやすいため、キリの良い5000や4000ではなくあえてこの数にしています。)
いざ、対決!
では、ストップウォッチ片手に同時にプログラムを実行してみましょう。
以前は2つの機種をバラバラに計測しましたが、今回は同時に実行した動画をアップします。
では、対決!
・・・・・・・
↑動画でどうぞ
結果は意外な事にファミリーベーシックの圧勝でした。
具体的には
ファミリーベーシック 約10秒
ポケコン 約47秒
見かけ上のスペックとは裏腹にファミリーベーシックは予想外のスピードで計算を完走しました。
ポケコンの4.7倍です。
おそらく、NS-Hu BASICの開発には当時ソフト開発でかなりの技術を持っていたハドソンが開発に関わっているため、ファミコンのCPUに極限まで最適化されているのだろうと思います。
まぁ、前述したとおり扱える整数値の範囲もポケコンと比べると狭いですし、使える関数も少ないため一概にファミリーベーシックが優れているとはこの結果だけでは決して言えませんが、それにしても意外な結果でした。
スプライト表示もお手のもの
ベンチマークでは無いですが、ファミリーベーシックの優れている点としては、簡単にスプライト表示でキャラを動かせるという事も挙げられます。
あらかじめ内蔵されたキャラだけですが、同時に複数のキャラを呼び出して高速に動作・表示できます。
上記の動画はマニュアルに記載されているサンプルプログラムの1つを改良したものですが、キャラが結構なスピードでしかも複数同時に動かせることがお分かり頂けると思います。
(最初にキャラ番号とスピード値を入力することで任意のキャラを任意のスピードで動かせるようにしています。)
この辺はポケコンのBASICでは、表現するのはかなり難しいでしょう。簡単なゲームを作るのに特化したBASICの設計になっている事が分かります。
如何せんメモリ容量が極端に少ないのが悔やまれる
ファミリーベーシックでは、動作用の作業メモリは1982バイトしかありません。つまり、半角英数字1982文字分のプログラムしか書けないんですね。(後に後継のファミリーベーシックV3も出ましたが、それでも倍の4086バイト程度)
この容量では大したプログラムは書けないので、あまり凝ったソフトは作れません。ただ、当時はこの少ない容量でも工夫して信じられない程高度な作品が作られる事もありました。
今のほぼ容量的には制限のない時代と違い、当時のプログラマーはこういう制約の中で技術が鍛えられ、後に天才プログラマーと呼ばれる人たちも生み出した言われています。
残念ながら、ファミリーベーシックはV3の発売後、後継の商品は出ていません。まともな容量の後継のソフトが出ていれば大化けした可能性はありますが、任天堂にとっては不人気に分類されるのマイナーな周辺機器で終わってしまいました。(それでも40万台近く売れたようですが)
しかしながらその異色の存在で、後世に大きなインパクトを残したレトロソフト&ハードだったと思います。
機会があればまたいろいろといじって紹介していきたいと思います。