SSブログ
English Version

ポケコン(G850)高速ライン描画 [ポケコン]

 「ポケコン(G850)用拡張基板(その8)CP/MでBadApple!!」の記事で SD カード上に置いたファイルを読込みながら動画再生できることを書きました。この時は動画が2値画像だったので 0x00 と 0xff のデータについてランレングス圧縮することで再生時のフレームレートを向上させることが出来ました。

 そこで直線で構成された線画画像やワイヤーフレームが回転するような画像であれば、ライン命令を高速に処理できれば動画再生が容易にできるのではないかとふと思いました(ライン命令はライン方向へのランレングス圧縮とも考えられる)

 ライン描画の高速化手法については例えば ここ に書かれているように両端からの同時描画ダブルステップ線分発生アルゴリズム等の手法があるようですがこれらの処理は Z80 のレジスタ上のみでの実現は難しいので今回は Z80 のレジスタ上で処理することによる高速ライン処理を実験してみました。

 冒頭に書いたように動画処理を念頭においているのでライン描画は VRAM 上で行い、1画面分の描画が完了した後に LCD コントローラに転送する方式にしています。

 下の写真がライン描画試験を行っている画面例です。LCD画面の上辺と下辺を逆方向に直線で結んでいます。X軸は4ドット間隔にして画面描画毎に1ドットずらしています。

ライン描画試験画面例


 3Dモデルを描画平面に写像してクリッピング結果をラインデータとして出力できる環境があればもっと気の利いたデモ画面ができるのですが・・・

 まぁ今回の高速ライン描画がいずれの日か役に立つこともあるかもしれませんねw


★追記 2022/01/18
 裏レジを使って上記の高速化手法である「両端からの同時描画」に対応してみました。
 元々裏レジを使っていたのでpush/popが多くなり、メインループのステート数が変更前:91、変更後:173で変更後のループ回数が 1/2 になるとすると、変更前:91 に対して変更後:86.5 になるので予想通りほとんど変わらないという結果でした。


★追記 2022/01/20
 Pset処理をLine描画ループ内に組込み、VRAMアドレス計算等を最小限にしてみました。
 予想通り、かなり高速化でき、LCDの反応が間に合わないくらいになりましたw
 動画付きのTwitterに投稿したメッセージを貼っておきます。


★追記 2022/01/22
 「ポケコン(G850)ポリラインで動画再生」の記事に高速ライン描画処理を使ったポリラインによる動画再生について記載しました。


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。