PAINT命令のベンチマーク


当時、このベンチマークは、とある地域のPC8801mkIISRユーザとX1turboユーザの間で、PAINT命令の実行速度以上に物議を醸しました。

ここでは、X1turbo、PC-8801mkIIMR、PC-9801DAの結果を載せています。


お題

次の640×200ドットの画面を塗りつぶすだけの、超簡単な内容に見えますが・・・

dot

プログラム

10 INIT:CLS 4
20 FOR A=0 TO 199 STEP 2
30 LINE(0,A)-(639,A),PSET,1,&H1111
40 LINE(0,A+1)-(639,A+1),PSET,1,&H4444
50 NEXT
60 TIME=0
70 PAINT(319,99),2,1
72 'PAINT(0,0),2,1    '左上から
80 PRINT TIME

LINE命令のラインスタイルを用いて塗りつぶし用の画面を生成します。

CZ-8FB02 V1.0での実行中は次のようになります。

中央から

画面中央から、じわじわとPAINT処理が進みます。

ついでに、N88BASIC用です。

10 CLS 3
20 FOR A=0 TO 199 STEP 2
30 LINE(0,A)-(639,A),1,,&H8888
40 LINE(0,A+1)-(639,A+1),1,,&H2222
50 NEXT
60 TIME$="00:00:00"
70 PAINT(319,99),2,1
80 PRINT TIME$

ラインスタイルのビットパターンはHuBASIC逆?時刻を書き換えてるので、遊んだ後は再設定を忘れずに(書き換える前に保存しときゃいいだけですが


結果

まずは、当時はPAINTが遅いと叩かれた初代BASIC、CZ-8FB01 V1.0から。

CZ-8FB01 V1.0

おっと、これは・・・PAINT処理が遅いだけではなく、完全に塗り残し、エラー終了という悲惨な結末。

そして真打登場、CZ-8FB02 V1.0です。

CZ-8FB02 V1.0

こちらは全く問題ありません。以上、エミュレータでの結果です。

ここからは、実機でCZ-8FB02 V1.0のPAINTです。結果は、実機でも変わりません。

実機でCZ-8FB02 V1.0

X1turboではPAINT命令より高速なPAINT@命令もありますが、もっと高速化する裏技があります。

この裏技を仕込むと、PAINTの進行が均等ではなくなります。

裏技の途中

そして、10秒以上の高速化に成功しています。

裏技の終わり

さらに仕込みを強くすると、進行がさらに変化します。

さらに、

しかし、仕込み過ぎは塗り残しを起こします。

塗り残し

仕込みと言うほどの物ではないのですが、10秒短縮はCLEAR(LIMIT)命令でフリーエリア(PAINT用ワーク)を3KB程度にしています。塗り残しの出たケースでは、フリーエリアが800バイト程度です。


他機種の結果

PC-8801mkIIMR "N-88 BASIC Version 2.2"

PAINT処理の進行はX1turboと同様です。しかし、残念な結果に。

88MR

PC-9801DA "N-88 BASIC(86) Version 2.0"

PAINT処理の進行はX1turboと同様です。流石、フリーエリア600Kバイト超、塗り残し無し。

98DA

しかし、どうなんでしょうね、i386 20MHzでこの速度は・・・