このフォントデータの無駄に気が付いたので、データの削減を行うことにしました。

この状態ではデータのサイズは 84バイトです。文字のサイズは 4×7ドットです。横4ドットは PC-8001mk2では 1バイトです。そのため、1文字のデータサイズは 7バイトで、それが 12種類あるので 84バイトとなっています。上下の余白は、文字そのものを目立たせるために赤枠の中に黒文字とするためです。文字だけにするのが、データサイズ的には最も小さくなるのですが、この文字はゲーム画面内に、リアルタイムでメインループの毎実行後に表示されるため、速度を優先した結果となります。
この速度優先の状態のまま、データの並びを変えるだけで、サイズが縮む魔法の並びがこちら。

横並びから縦並びに変えただけです。ですが、これだけで、バイナリサイズは 73バイトと 87%の圧縮になっています。サイズが縮む理由ですが、それは上下の行間部です。この行間部、今までは1文字に付き 2バイト使っていました。ところが縦並びに変えると、1文字で凡そ 1バイトと半分になるのです。その理由が行間部の共有化です。しかも、今までは 1文字 7バイト区切りでしたので、アドレス計算が ×8 して -1 の 7倍だったのが、2倍+4倍の 6倍計算に変わりますので、実行速度も 4clk速くなるというオマケ付きです。

横並びから縦並びに変えただけです。ですが、これだけで、バイナリサイズは 73バイトと 87%の圧縮になっています。サイズが縮む理由ですが、それは上下の行間部です。この行間部、今までは1文字に付き 2バイト使っていました。ところが縦並びに変えると、1文字で凡そ 1バイトと半分になるのです。その理由が行間部の共有化です。しかも、今までは 1文字 7バイト区切りでしたので、アドレス計算が ×8 して -1 の 7倍だったのが、2倍+4倍の 6倍計算に変わりますので、実行速度も 4clk速くなるというオマケ付きです。
このような小さな小さなデータ削減の積み重ねで、1キャラでも余分に画像を入れよう、1つでも余分に特殊処理を入れようと考えてます。縦並びの際に、並び順が逆に見えるのは、私の今作ってるゲームの特性上の問題で他意はありません。気になるとは思いますが、気にしないでください汗
※ 遂に出た?27W 5V5A ACアダプタです。PSEマークは書いてありますが、本物かどうかはご自身でご判断ください。まあ、Geekworm ですから(略

※20240311-1900追記
文字フォント形状が単純なのを利用して、各フォント文字を重ねてしまうという荒業で、現在はデータを保持しています。文字コードの順番にデータは並びませんので、表示に必要な文字だけを厳選してデータ化しています。データは1行1バイトなので、文字データは直接オフセットコードとしています。例えば 300 と表示したい場合は、$0A, $05, $05, $FF とデータを並べてます。$FF は終了コードです。250 の場合は、$0C, $0E, $05, $FF となります。一気にデータサイズが小さくなっていますよねw
コメント