「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



相変わらず、AVRスプライトのスクロールプログラムです。

昨日寝る前にプログラムを眺めていたら、間違えを見つけて
しまいました。

しかもそれほど単純じゃなく、またしても処理時間が長くなる
ようなお話。

うーん、こまった。
と思って、どう直せばいいかを少しだけ考えてみるために、
ソースを眺めてみたところ…

あれ?なんでこんな処理しているんだろう?って疑問を
感じちゃう部分が。

ある数値を8で割って、それをその少し下で8を掛けて
いるんですよ。
同じ数を割って掛けるという必要は無いはずなのに…。
(下位3ビットの処理は別途考慮が必要だとしても)

そう思って、それぞれの計算式の意味を調べてみると、

・8で割る意味
 →1キャラクターは縦8ドットなので、キャラクタ数単位
  のY座標を求めるために8で割る
・8掛ける意味
 →横方向は1行あたり16キャラクターだが、1バイト
  あたり2キャラクターなので、結果1行あたり8バイト。
  なのでY座標を8倍するとVRAM上のアドレスが求まる

といった具合。なるほど。それぞれに意味はあるんだな!

設計どおりのプログラムになっているので可読性が高く、
仕様変更するなどは都合が良いんだけども、ただ、ループの
最も内側なんだし、もっと最適化したロジックにしないと
処理時間に影響大だから、ここは見直しが必要だな…

それ以外にも探してみると、数値の範囲が127以下しか
ない数値をバカ正直に16ビット幅で処理していたり…。
(1命令ですみそうなことを、10倍以上の手間掛けて
 処理しております…バカだなぁ…)

そこらへんを見直したら、もしかしたら大幅に処理時間を
短縮できそうだなぁ!

見直しの観点だけ忘れないようにメモしておいて、あとは
時間が有る時に考えることにしよう。
それにしても、思わぬ収穫でした…



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« この次にやり... hirax.net »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。