写真なくてすみません。
画面はスクリーン5で255ドットx192ドット、16色です。
裏VRAMを多く確保するために縦212ドットではなく192に設定しています。
画像はランレングスで圧縮しています。
サイズは256x144ドット、38枚を100Kバイトに圧縮して裏VRAMに読み込んでいます。
画像はキャプった物をトレースしています。
圧縮フォーマット
・データサイズ[2バイト]
・パレットデータ[32バイト]
・データ[1バイト、上位4ビット:パレット番号、下位4ビット:ドット長]、データ、データ・・・・
※但し、データ長が14、15の場合は次の1バイトをデータ長とします。
データの展開は以下のようにしています。
・上位4ビットがパレット番号(色番号)、下位4ビットがドットが連続する長さ(ドット長、実際にはこの値に1足したドット数になります)
・ドット長が14「以外」の時は、描画する色の1ドット目を黒(パレット番号:0)にします。
・ドット長が0(描画するドットが1つ)の場合は、パレット番号で描画します。
・ドット長が14以上の時は次の1バイトがデータ長になります。
・ドット長+1のドットをパレット番号で描画します
圧縮例 ※16進数表記です
(元データ) 01 11 02 77 77 60 33 33 33 33 33 33 33 33
(圧縮データ)13 21 7e 03 60 3f 10
・0の後に1が3連続するので「13」になります。
・0の後に2が1連続するので「21」になります。
・0の後に4が3連続するので「43」
・7が4連続するので「7e 03」
・6が1つなので「60」
・0の後に3が16連続するので「3f 10」
連続する色の最初の1ドット目に黒が来る事が多い画像に特化したフォーマットです。(要するに黒い枠線があるアニメ調の絵に特化)
逆に色の切り替わりに黒ドットが無いと圧縮効率は落ちます。
タイルパターンには全く向きません。元の4倍のサイズに膨れます。
なので、瞳と影以外は極力簡略化しています。
展開速度は3.58MHzのZ80で1秒くらいです。(以前よりも高速化しました)
画像表示について
H-FORTHの「LDIRVM」命令でメインRAMからVRAMに転送しているだけです。
コンパイラの作者の頑張りのおかげで、私は何の苦労もせずに高速転送しています。
ちなみにVDPコマンドでRAM→VRAM転送を行うと遅いです。
最後にすみませんが、データの配布は考えていません。
画像と音楽データ、MSX-DOSを抜いた部分なら出来ますが・・・
最近のコメント