PCエンジンのプログラミング(その2)Spriteのデータ構造

nicotakuya.hatenablog.com

前回の続きです。

前回は開発環境の「HuC」を導入して、サンプルプログラムを動かすところまでやってみました。

f:id:nicotakuya:20201127121618p:plain

「PONG」に付属するボールの画像

使ってみて気が付きましたが、画像の読み込みに対応しているファイル形式が「PCX」のみで、どうにも使いにくいです。

PCXファイルというのは、こんな感じの画像ファイルです。DOSの時代には良く使われていたみたいですが、今となってはマイナーなファイル形式だと思います。PCXファイルはirfanviewで開けましたが、Photoshopでは開けませんでした。

なので、PCXファイル以外に対応する変換ツールを自作する必要が出てきました。

 

f:id:nicotakuya:20201127121329p:plain

画像/パレットデータをダンプする

まず、HuCで「#inc~」マクロでPCXファイルを取り込んだ時にどんな感じにデータ化されるのかを調べます。ドキュメントを見てもよくわからないので、上記のようなプログラムを自作しました。「BALL.PCX」はサンプルのPONGに付属する画像ファイルです。

 

f:id:nicotakuya:20201127121438p:plain

PCエンジンエミュレータでの実行結果

hucとpceasでビルドして、PCエンジンエミュレータで実行すると、こういう画面が表示されます。画面上半分が画像データ、画面下半分がパレットデータです。

これだけだと、意味不明な16進数の羅列ですが、、、

 

f:id:nicotakuya:20201127121519p:plain

画像/パレットデータの構造

 いろいろ試行錯誤しながらデータを再構築してみました。マクロの出力は次のようなフォーマットだと思われます。

「#incspr」

・スプライト用は1枚あたり16x16ピクセル。他にも32x16、16x32ピクセルも選択可。

・1枚あたり4bit=16色。透明色を除くと実質15色。

・1枚あたりのパターンはint型(16bit)×64要素=64ワード。1要素は2値16ピクセルで考える。

・16要素で1プレーン。全4プレーン。下位ビットから順番にデータを格納。

 

「#incpal」

・1パレット16色。int型(16bit)×16要素=16ワード。カラーインデックス0番から格納。

・1要素あたりは9bit(bit8~6=緑、bit5~3=赤、bit0~2=青)

・8諧調x8諧調x8諧調=512色。

・0番のカラーは透明色。

 

これで画像/パレットデータの構造がわかりましたので、次は変換ツールを自作してみたいと思います。

nicotakuya.hatenablog.com