ランダムアクセス

目次

概要

Z80 基本

テーブル参照&POPアクセス自己書き換え

6502基本

16bitテーブル小改良

速度判定


小改良

2014.8.9午前追記

非常に小さな改良ですが、投稿されました。小さくても大事です。小さなことからコツコツと。

まず冒頭、LDX #>DATA としていますが、例題の条件として「DATA の内容は 256ページ以内で、1ページに収まる」と書いていました。ということは、DATA はページの先頭から始まっていると想定してもよいはずで、これは LDX #0 と同じ意味になります。

すると、その次で >0 に 0 を入れるためだけに A に 0 を入れているのが無駄になります。

LDX #0 ; STX >0 とすればよい、ということですね。2クロックの短縮です。


次に、LOOP 中にあるたった一つの ADC 。計算式が足し算だったのでつい ADC を使っていましたが、ここは先にシフトを行って 0 になったところに数値を入れる、というのが目的です。ならば足し算ではなく、OR でもいい。実際、Z80 版ではそうしています。

それだけなら速度は同じなのですが、プログラムから ADC が無くなるため、前処理に入っている CLC が不要になります。これでまた、2クロック短縮。


いずれも小改良なのでプログラムは示しません。また、ループ内は変わっていないため、全体でも4クロック減るだけで、総計 1738 クロック。


地味な改良だけど、僕も、16bit テーブル化改良してくれた人も気づかなかった重要な発見です。


速度判定

2014.8.10 午前時点での比較です。


6502 は 1738 クロック。周波数を考慮して倍にすると、MSX での 3484 クロック相当の実時間になります。

Z80 は 4011 クロックなので、差は531クロック 14% ほどファミコンが速いです。


1割を超えるとさすがに速度差がある、というべきか。こういうメモリアクセスの多いプログラムは、Z80 の苦手なところなんです。


しかし、ゲームを作るならメモリアクセスは避けられない。

いくら Z80 がレジスタをたくさん持っていると言っても、動き回る多数の敵キャラクターを全て記憶できるほどではないのだから。


次の例題は…パッド入力


前ページ 1 2 3 4

(ページ作成 2014-08-07)
(最終更新 2014-08-10)
第2版 …他の版 初版

前記事:ブロック転送     戻る     次記事:パッド入力
トップページへ

-- share --

0000

-- follow --




- Reverse Link -