Skip to content

Latest commit

 

History

History

LOADSRD

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

LOADSRD.BAS

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も実行した後はファイル選択に戻ります

自分の使用例

  1. BSAVEファイルをグラフサウルスで扱うためにPL?ファイルを書きだす。
  2. グラフサウルスで作った画像をパレットトラックを選んでBSAVE形式で保存する。

現在の仕様

  • ヘッダ埋め込みの終了アドレスは無視して、ファイルサイズから転送サイズを決定します。

  • 開始アドレスはヘッダの指定に従います。

  • 開始アドレス+サイズがページを跨ぐ場合、ページの終端で終わり、残りは無視します。

  • RAMの&HB000-&HCFFFをロードバッファとして使用します。

  • 機械語プログラムは&HD00-&HD400(程度)にロードされます。

免責事項

処理は分かりやすさ優先なので、多用したい方はリファクタリングするなどしてください。
プログラムに関して再利用などは自由です。断りもいりません。

その代わりサポートはすごくゆるめです。
トラブルが発生した場合も責任は持ちません。

安全の為、扱うファイルはバックアップを取っておきましょう

Note
プログラム拡張しながらデバッグしている際に、誤って上書きしてしまうなどの事故が起こりました。
人生、何があるかわかりません。諦めるか、ある程度の備えをお勧めします。

BSAVEスクリーン画像

VRAMイメージバイナリ。ピクセルデータとパレットデータを含むVRAMイメージ。

  • BSAVE"ファイル名",開始アドレス,終了アドレス,sで保存したもの
  • BLOAD"ファイル名",s:color=restoreで表示できる

BSAVE画像 拡張子

画面モード 拡張子 説明 自動インターレース表示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

BSAVE 画像 ヘッダ

オフセット サイズ 内容 補足
+0 1 ID 値は$FE
+1 2 開始アドレス
+3 2 終端アドレス ピクセルデータサイズは(終端アドレス-開始アドレス+1)
+5 2 開始アドレス SCREENセーブでは未使用。0に固定

GRAPH ZAURUS画像

ピクセルデータとパレットデータに分かれている。

  • パレットデータは16色の8トラック(バンク)切り替えに(画像表示中にカーソル左右)
  • 圧縮が利用可能

GRAPH ZAURUS画像 拡張子

画面モード 拡張子 説明 自動インターレース表示[^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 画素情報(ベタのみ)

GRAPH SAURUS 画像 ヘッダ

オフセット サイズ 内容 補足
+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する

GRAPH SAURUS 圧縮形式メモ

解析したグラフサウルス圧縮形式のメモになります。

基本は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

  1. 自動インターレース表示される拡張子は個人的な独自仕様。LOADSRDで表示する際にインターレース画像として表示される。