BSAVEスクリーンデータとグラフサウルスデータを表示します。
- ファイル名を拡張子まで含めて入力するとファイル名からフォーマットを判断します。
- インターレース画像として扱われる拡張子の場合、2枚セットで読み込んで表示します。
このローダーの場合、BSAVEデータもグラフサウルスデータも画素情報の読み込みは同じです。
(ヘッダIDによって圧縮データ展開かそのまま転送か切り替えます)
Note
BSAVE拡張子でもヘッダIDが圧縮タイプであればちゃんと展開表示します。
ですので、違いはカラーパレットが本体に含まれているか別ファイルになっているかの違いだけになります。
- グラフサウルス:
カラーパレットは別途PLTファイルを読み込む。
- BSAVEデータ:
VRAMに読み込まれたパレットテーブルを読み込む。
ファイル名は拡張子まで入力してください。 拡張子によって処理を変更します。
拡張子は BSAVEスクリーン画像とGRAPH ZAURUS画像を参照ください。
入力 | 動作 | 補足 |
---|---|---|
カーソルキー左右 | パレットトラック(バンク)切り替え | (トラックは0~7) |
文字"P" | カラーパレットファイルを書き出す。 | ファイル名はベース名+".PL"+HEX$(SCREEN番号) |
文字"B" | BSAVEでファイルを書き出す | ファイル名はベース名+".SC"+HEX$(SCREEN番号) インターレース画像は ベース名+".S"+HEX$(SCREEN番号)+"0" ベース名+".S"+HEX$(SCREEN番号)+"1" |
カーソルキー上下 | 縦スクロール(実験) | |
SPACE | 表示ページ切り替え(実験) | |
それ以外 | ファイル選択へ戻る | パレットセーブ、BSAVEも実行した後はファイル選択に戻ります |
自分の使用例
- BSAVEファイルをグラフサウルスで扱うためにPL?ファイルを書きだす。
- グラフサウルスで作った画像をパレットトラックを選んでBSAVE形式で保存する。
-
ヘッダ埋め込みの終了アドレスは無視して、ファイルサイズから転送サイズを決定します。
-
開始アドレスはヘッダの指定に従います。
-
開始アドレス+サイズがページを跨ぐ場合、ページの終端で終わり、残りは無視します。
-
RAMの&HB000-&HCFFFをロードバッファとして使用します。
-
機械語プログラムは&HD00-&HD400(程度)にロードされます。
処理は分かりやすさ優先なので、多用したい方はリファクタリングするなどしてください。
プログラムに関して再利用などは自由です。断りもいりません。
その代わりサポートはすごくゆるめです。
トラブルが発生した場合も責任は持ちません。
安全の為、扱うファイルはバックアップを取っておきましょう
Note
プログラム拡張しながらデバッグしている際に、誤って上書きしてしまうなどの事故が起こりました。
人生、何があるかわかりません。諦めるか、ある程度の備えをお勧めします。
VRAMイメージバイナリ。ピクセルデータとパレットデータを含むVRAMイメージ。
BSAVE"ファイル名",開始アドレス,終了アドレス,s
で保存したものBLOAD"ファイル名",s:color=restore
で表示できる
画面モード | 拡張子 | 説明 | 自動インターレース表示1 |
---|---|---|---|
SCREEN5 | SC5 | 画素情報 & カラーパレット | |
S50 | 画素情報 & カラーパレット | インターレースページ0 | |
S51 | 画素情報 & カラーパレット | インターレースページ1 | |
SCREEN6 | SC6 | 画素情報 & カラーパレット | |
S60 | 画素情報 & カラーパレット | インターレースページ0 | |
S61 | 画素情報 & カラーパレット | インターレースページ1 | |
SCREEN7 | SC7 | 画素情報 & カラーパレット | |
S70 | 画素情報 & カラーパレット | インターレースページ0 | |
S71 | 画素情報 & カラーパレット | インターレースページ1 | |
SCREEN8 | SC8 | 画素情報のみ | |
S80 | 画素情報のみ | インターレースページ0 | |
S81 | 画素情報のみ | インターレースページ1 | |
SCREEN10/11 | S10 | 画素情報のみ | |
SRA | 画素情報のみ | ||
SA0 | 画素情報のみ | インターレースページ0 | |
SA1 | 画素情報のみ | インターレースページ1 | |
SCREEN12 | S12 | 画素情報のみ | |
SC0 | 画素情報のみ | インターレースページ0 | |
SC1 | 画素情報のみ | インターレースページ1 |
オフセット | サイズ | 内容 | 補足 |
---|---|---|---|
+0 | 1 | ID | 値は$FE |
+1 | 2 | 開始アドレス | |
+3 | 2 | 終端アドレス | ピクセルデータサイズは(終端アドレス-開始アドレス+1) |
+5 | 2 | 開始アドレス | SCREENセーブでは未使用。0に固定 |
ピクセルデータとパレットデータに分かれている。
- パレットデータは16色の8トラック(バンク)切り替えに(画像表示中にカーソル左右)
- 圧縮が利用可能
画面モード | 拡張子 | 説明 | 自動インターレース表示[^2] |
---|---|---|---|
SCREEN5 | SR5 | 画素情報(ベタまたはラレングス圧縮) | |
PL5 | カラーパレット(16色トラック0~8個) | ||
R50 | 画素情報(ベタまたはラレングス圧縮) | インターレースページ0 | |
R51 | 画素情報(ベタまたはラレングス圧縮) | インターレースページ1 | |
SCREEN7 | SR7 | 画素情報(ベタまたはラレングス圧縮) | |
PL7 | カラーパレット(16色トラック0~8個) | ||
R70 | 画素情報(ベタまたはラレングス圧縮) | インターレースページ0 | |
R71 | 画素情報(ベタまたはラレングス圧縮) | インターレースページ1 | |
SCREEN8 | SR8 | 画素情報(ベタのみ) | |
SCREEN12 | SRS | 画素情報(ベタのみ) |
オフセット | サイズ | 内容 | 補足 |
---|---|---|---|
+0 | 1 | ID | 値はベタ形式が$FE で、圧縮形式が$FD |
+1 | 2 | 不明 | 不明。(開始アドレス互換? 0以外の値は見たことが無い) |
+3 | 2 | データサイズ | ピクセルデータサイズ(終了アドレスではない) |
+5 | 2 | 不明 | 不明。0が入っている |
- グラフサウルスにはTILEデータなどもあるのですが、そちらは未確認です。
LOADSRDの機械語プログラムが大きい為、フリーエリアが$D500より若いアドレスになっていると動作しません。
フリーエリアが足りない場合はリセットしてCTRLを押しながら起動するなどしてメモリを開ける必要があります。
MSX-JEがアクティブな時などもフリーエリアが小さくなりますので、ANKモードでの使用をしてください。
ファイル | 説明 |
---|---|
LOADSRD.BAS | グラフィックローダープログラム本体(アスキーセーブ版) |
LOADSRD.BIN | グラフィックローダー機械語プログラムバイナリ |
LOADSRD.dsk | グラフィックローダーセット(中間言語版) |
おまけ |
ファイル | 説明 |
---|---|
samples | グラフィックデータサンプル |
asm | 機械語プログラムのアセンブラソース(TNIASM用) |
SRX.BIN | 機械語プログラムバイナリ(グラフィックローダー+VDPコマンド+スプライト時計) |
SRX2.BIN | 機械語プログラムバイナリ(グラフィックローダー+VDPコマンド+スプライト時計+スプライトエンジン試作) |
etc/CLS.BAS | PAGE0と1を$CCで埋める |
etc/CLS.BAS | PAGE0と1を$CCで埋める |
etc/CC.BAS | SCREEN8で128LINEを$CCで埋めてその範囲をBSAVEする |
etc/55.BAS | SCREEN8で128LINEを$CCで埋めてその範囲をBSAVEする |
解析したグラフサウルス圧縮形式のメモになります。
基本はRLE(ランレングス圧縮)ベースになっていて非常に単純です。 グラフサウルス独自の工夫として、カラーコード0番を使用しないことを前提に圧縮効率を高めているようです。
基本はBSAVE形式と同一ですが、ヘッダIDの値が拡張されています。
- 無圧縮ベタデータのヘッダIDはBSAVEと同じ
$FE
です。 - 圧縮データの時はヘッダIDは
$FD
です。
オフセット | サイズ | 内容 | 補足 |
---|---|---|---|
+0 | 1 | ID | 値はベタ形式が$FE で、圧縮形式が$FD |
+1 | 2 | 不明 | 不明。(開始アドレス互換? 0以外の値は見たことが無い) |
+3 | 2 | データサイズ | ピクセルデータサイズ(終了アドレスではない) |
+5 | 2 | 不明 | 不明。0が入っている |
+7 | 以降全て | データ本体 | 圧縮またはベタのピクセルデータ |
- 1byte単位で処理します。
- SCREEN5~7は4bitカラーなので、2ピクセル単位での処理になります。
- データモードは3つあります。
動作名(仮) | サイズ | 説明 |
---|---|---|
直接描画 | 1 | 1byte目が16以上の場合、その値を直接書き込む |
連続書き込み1 | 2 | 1byte目が1~15の場合、その回数だけ、2byte目で指定された値を書き込む |
連続書き込み2 | 3 | 1byte目が0の場合、2byte目で指定された数だけ、3byte目で指定された値を書き込む |
-
ピクセル値$00~$0Fが多く点在すると異常に効率が悪くなるものの、 そうでないデータでは、元サイズよりも小さなデータに圧縮されることが期待できます。
-
カラー0は透明色扱いであるため、基本的にそのような画像を扱う事は少ないと思います。 半透明風網掛けパーツなどの場合、連続するので連続書き込みによって圧縮されます。
-
3ドット単位の透明色タイリングで埋め尽くしたデータが最も効率が悪く、ベタデータよりも大きくなると思われます。
ソースコードやプログラムの、改変・再配布はご自由にどうぞ。 ただし、サポート・保証などはございません。
ただし、画像についての再利用はご遠慮ください。
このプログラムを使用して起きた問題については補償いたしかねますので、 ファイル・ディスクは常にバックアップを取って使用してください。
Footnotes
-
自動インターレース表示される拡張子は個人的な独自仕様。LOADSRDで表示する際にインターレース画像として表示される。 ↩