SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

DSi LLと3DS LLでのプチコン比較

しばらく日記の間が空いてしまいました。すみません。
夏のイベントが一段落して、一息吐いた所です。
先日夏休みをもらって東京へ行きまして、そのついでと言っては何ですが、3DS LLを買ってきました。
もちろんプチコンのために、デカいサイズの3DSを待ってました(笑)

これまでのDSi LLとサイズ比較。本体サイズはほぼ同じ。
上画面は横長になった分、3DS LLの方が大きいですが、プチコン画面の表示サイズはあまり変わりません。むしろドットが1対1対応しているDSi LLの方が画面は見やすく、3DS LLは文字がにじんで見えます。

さっそく過去のプチコン自作プログラムを引っ越ししてみたのですが、以前の日記に書いた「簡素ブロック崩し」をプレイした所、ボールがかなり速くなっていて、プログラム内のウェイトを増やさないと遊べない状態でした。
「やっぱり3DSは処理速度が上がっているんだな」と思った次第。

その後Twitterで、DSi3DSプチコンの速度差についてコメントをいただいたので、簡単にプログラムを作ってベンチマークを試してみました。
とりあえず、計算処理と描画処理に分けて、2つプログラムを作ってみました。

ベンチマーク1:実数計算

PRINT TIME$
FOR I=1 TO 500000
A=123*456/789
B=SQR(123456)
C=SIN(1)*COS(1)
NEXT
PRINT TIME$

ダミーの計算をくり返して、最初と最後に時刻を表示して差を見る、簡単なプログラムです。

大したプログラムじゃないですが、一応QRコード

ベンチマーク2:グラフィック描画

ACLS
PRINT TIME$
FOR I=1 TO 1000
FOR Y=8 TO 191
GLINE 0,Y,255,Y,RND(256)
NEXT Y
NEXT I
GCLS 0
PRINT TIME$

多数の水平線をランダムな色で表示して、その所要時間を計ります。

一応QRコード

で、ベンチマーク結果は…

ベンチマーク結果1:実数計算

ベンチマーク結果2:グラフィック描画

あれっ? 全然変わりません。
簡素ブロック崩しの速度差はいったい何だったんでしょう?
まあ、グラフィックを解像度変換して表示するオーバーヘッドがあることを考えると、3DSの方が実質速いとも言えるのですが…。

考えること数分。1つ思いついたのは、簡素ブロック崩しではボールの表示にスプライトを使っていることです。
スプライトの表示速度の差かも?と思って、3つめのプログラムを作ってみました。

ベンチマーク3:スプライト表示

ACLS
PRINT TIME$

CLEAR
DIM X(100),Y(100)
FOR S=0 TO 99
SPSET S,68,2,0,0,0
SPANIM S,4,10
X(S)=RND(240)
Y(S)=RND(176)
SPOFS S,X(S),Y(S)
NEXT

FOR I=1 TO 1000
FOR S=0 TO 99
X(S)=X(S)+RND(3)-1
Y(S)=Y(S)+RND(3)-1
X(S)=X(S)+(X(S)<0)-(X(S)>239)
Y(S)=Y(S)+(Y(S)<0)-(Y(S)>175)
SPOFS S,X(S),Y(S)
NEXT S
NEXT I

SPCLR
PRINT TIME$

ちょっと長くなりました。スプライトを100個表示して、アニメーションさせつつランダムに動かすプログラムです。

一応QRコード

さて、ベンチマーク結果は…

ベンチマーク結果3:スプライト表示

おお、かなり差が出ました!
つまり、計算やグラフィックの速度はほぼ同等ですが、スプライト表示には速度差があるようです。
プチコンプログラマーとして、速度が向上しているのは喜ばしいことですが、特にリアルタイム/アクション系のプログラムは、それぞれの環境で動作確認が必要になりそうです。

※訂正
その後いろいろ試したのですが、スプライト描画でも結局差が出ませんでした。
たまたまだったのか、他の要因があるのか…?
ただ、DSi3DSでのプログラム動作確認はした方がいいとは思います。