ESECデモ用おもちゃ

うちの会社の某CPUとうちの課の2DグラフィックスコアをFPGA付きのタッチパネルLCDバイスに焼き込んだ奴を使ってデモ作りまくって遊んでたら、急に ESECデモ出展とかいう話に。ちょっと困った。なんか逃げたい。

完全に遊びの範疇に入っていて、全部Cで実装。俺objシステム付き。各デモはディスパッチャからリクエストベースで起動して抜いたり付けたりが簡単にできる*1。フィードバックエフェクト使いまくったりとか、妙にこぎれいなオーバーレイメニューやら、2Dコアで擬似的にパースペクティブコレクトな3Dのテクスチャポリゴンを表示する、、、とか本当に趣味に走りまくった奴なんだけど。。。好き勝手に遊んでたら見つかって下手にウケてしまって、結局遊べなくなるというパターンだ。
もともとはLCDC非搭載でDMACを疑似LCDCとして利用していた。DMACのACK信号をドットクロック代わりにするとかいうコロンブスの卵な方式なんだけど、これだと表示データが不要な帰線期間中もドットクロックを作る為だけにDMACがバスを占有する事になって帯域が無駄になる。更に制御が非常に面倒くさすぐるので困難でありミスを誘発する危険があったため、描画中はリフレッシュを止めるとか言う暴挙に出ていた。このせいでリフレッシュレートが落ち(特に描画負荷があがると)致命的なまでに画質が落ちてしまう*2。ハッキリ言ってとても出展レベルに無かった。マッジメにコーディングしたらまあ割り込み分のオーバーヘッドだけに抑え込む事はできたんだろうけど、大変そうな割に増える帯域も知れてそうだったので結局LCDC回路を作り込んだ*3。このLCDCはLCDの速度に依存せず、内部バッファに一気に1ライン分のデータをバーストで取り込んで動作するモードがあるので、帯域をあまり消費しない。
結果恐ろしくきれいに表示されるようになった。驚いた。24MHzで動作しているとは思えない程のデモとなった。それはうれしいんだけど、やっぱ遊んでばっかりはいられないのが微妙に寂しいとかいう贅沢を言ってみたくなった。いや言ってしまった。

困ったもんだ。

*1:いやC++使えよとか聞こえてきそうな。。。実際C++でもフットプリントが大幅に違う訳でも無く、単純に趣味です

*2:LCDもリフレッシュが落ちるとドットが滲んで汚い表示になる

*3:DMACの出口を無効化するゲートを付けるだけでも良い筈、なんだだけど、仕事上での責任ということを考えると、他部署が設計したネットを弄るのって面倒なのよね。そんなもんで間違えるとも思いにくいが、上司に却下されてしまった