つい、「忘れないうちに!」なんて思って、ソース修正に
手を染めてしまった…
AVR用背景表示器の横スクロール機能のお話です。
横方向のオフセット値を元に1ビット単位でビットイメージ
をシフトする処理は頭の中で確かに「これでいける!」って
確信できたので、ソースの修正を始めたんですが…
1つ大事なことを忘れてましたよ。オフセット値の設定を
する際に、8ドット毎に1キャラクター分のシフトを
行わないとならないんだった…。
1キャラクター1バイトなら何の問題も無かったんだけど、
SRAM容量の都合で2キャラクターを1バイトに押し込んで
あるので、4ビット単位でスクロールしないとならないん
だった…すっかり忘れてた…
1バイトずつ読み込んで4ビットずつシフトする
必要があるんだよなぁ…AVRにはそんな便利な命令は
ないから、ゴリゴリと力技で書いて行かないと…
まぁ、乗りかかった船。仕方ないのでザッとロジックを
組んでみました。
アセンブルしてシミュレーターをかけてみると、横方向
4ビット単位のシフト処理は1回あたり64us。あぁ、
処理時間の余裕値を大きくはみ出した…
どうしようかなぁ…
ひとまず機能の実現を直近の目的において、そのあと
チューニングするなり、使用上の注意(運用留意事項
とも言うべきか)でなんとかするとか。
機能の実現自体は多分できるんだけど、処理能力の
問題で、横8ドット毎に適度なウェイト処理(もしくは
ダミーデータ出力)等行うことで、なんとか実現に
こぎつけたいなぁ…。
横スクロールの後に1~2バイトのダミーデータを
送信すれば(走査線2~4本分の時間が稼げるので)
うまく動作するはずだから、実用上は問題は無い
はずなんだけど。
ただ、個人的には、そういう「使用上の注意」って
いうのは嫌いなんだよなぁ…。
理屈どおりにシンプルに動いてくれるのが一番
勘違いやトラブルを生まないのに…
なかなか上手く行かないもんですねぇ…
まぁ、なにより動作することを最優先にすすめる
ことにしましょう。
それにしても、時間が無いってのに要らないことやって
新たな問題を掘り起こしているのは我ながらおバカですねぇ…
やるべきことを最優先しないと…
|