Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

MSXのソフトを今から開発するのに便利なデータ圧縮・展開ルーチンまとめ

【2021.3.1更新】Exomizer3 リンク先URL間違いのお詫び を掲載しました。LZ4DMVはBSDライセンスである旨を追記しました。

 MSXZ80 CPU)向けでゲームソフトなどの組み込みに利用可能な、データ圧縮・展開ルーチンをまとめてみました。他にも見つかり次第追加してゆきます。

https://p.gigamix.jp/devmsx/cg/data-compress.png

Exomizer3

とは言え1990年代ならそれで十分だったんですけどデータ圧縮のアルゴリズムは進化していて、1994年のBPEで22196バイトだったものが2020年のExomizerなら18020バイトですよ。MSXで4KBも空くのは大きい。DMシステム2にBPEの展開機能は入っていますが、今ならExomizerや他のものを採用すべきでしょうね。pic.twitter.com/mVkKDmLH4U — Takashi Kobayashi (@nf_ban) 2021年1月2日

Exomizer3 リンク先URL間違いのお詫び(2021.3.1)

当ブログで紹介させていただいたZ80CPU向け圧縮アルゴリズム・Exomizer3のリンク先URLがzlibライセンスでないもので紹介してしまいました。正しくは内藤さんご指摘のURLです。お詫びして訂正させていただきます。申し訳ありませんでした。 — Takashi Kobayashi (@nf_ban) 2021年3月1日
 当ブログで当初紹介させていただいたExomizer3のリンク先URLがzlibライセンスでないもので紹介してしまいました。正しくは内藤さんご指摘のURLです。お詫びして訂正させていただきます。申し訳ありませんでした。

LZEe - LZE enhancement for Z80

@gorry5 さん作の -lze圧縮展開プログラムをC#にベタ移植した lze.cs -lze展開ルーチンをZ80で記述した lzdec.mac http://akiba.geocities.jp/cibi4wm5/lze_cs_z80.zip としてアップロードしました。Z80で軽い展開プログラムが欲しい方は試してみてください。 lzeについては http://gorry.haun.org/pw/?lze をご参照ください。 — Kei Moroboshi(諸星圭) (@kmoroboshi) 2019年3月11日

LZ4DMV by ipheion78(LZ4)

ROMまたはRAMにあるLZ4圧縮データをMSX2のVRAMへ直接展開するやつを作りました。ソースコードの需要があるかどうかわかりませんが上げときます。ご査収くださいませ。https://t.co/FiFwxE7Ozt #MSX pic.twitter.com/WfPIqQgGWy — むらかたとうじ/村方凍二 (@ipheion78) 2021年1月24日

BARGAIN

#MSX BARGAIN 14.23: MSX impage compression suite BARGAIN has received yet another series of optimizations. r... http://t.co/9lhLlQKVmF — MSX Resource Center (@msxorg) 2013年4月18日

MAGフォーマット(MAG形式)

MA5(孫, まご)・MA7(愛, まな)

  • 作者:夢神楽遊睡さん(Genuine Network)
  • 配布先:http://sakuramail.net/fswold/graphic.html
  • 動作環境:MSX2 以降, MSX-BASIC, MSX-DOS(2)/Nextor
  • データ圧縮環境:MSX-DOS(2)/Nextor, MAGセーバの動作する機種
  • データの配置先と展開先:RAM(ROM) → VRAM
  • 組み込みライセンス:提示条件に準拠すること

XMGS・BAMP・護送バス

  • 作者:たろさん
  • 配布先:http://sakuramail.net/fswold/basic.html
  • 動作環境:MSX2 以降, MSX-BASIC
  • データ圧縮環境:MSX-DOS(2)/Nextor, MAGセーバの動作する機種
  • データの配置先と展開先:RAM(ROM) → RAMまたはVRAM
  • 組み込みライセンス:提示条件に準拠すること

EDCOM3+MA57

  • 作者:杉山夏樹 さん
  • 配布先:https://www.vector.co.jp/vpack/filearea/other/msx/edcom
  • 動作環境:MSX2 以降, MSX-BASIC
  • データ圧縮環境:MSX-DOS(2)/Nextor, MAGセーバの動作する機種
  • データの配置先と展開先:RAM(ROM) → RAMまたはVRAM
  • 組み込みライセンス:プログラムの転載・再配布は自由。連絡不要

BPE(Byte Pair Encoding)

実機(FS-A1ST)でフロッピーディスクからデータ読み込み+BPE展開する動画。やっぱりR800モードは速いです。 pic.twitter.com/BC16fDNIA7 — Takashi Kobayashi (@nf_ban) 2021年1月2日

BPE圧縮は「辞書のバッファサイズ」を可変できます。デフォルトは4096バイトで、最適なサイズは実際に圧縮しないと分かりません。調べるのが面倒なら -aオプション(自動判別)もあります。SCREEN8画像は、54279バイト 辞書 4096 → 23307バイト 自動判別 → 23436バイト …っておい!(たまにあります) pic.twitter.com/O3TvXTYwI7 — Takashi Kobayashi (@nf_ban) 2021年1月2日

 他にも便利なルーチンがありましたら情報をお待ちしております。→ twitter@nf_ban

次点:Heatshrink

 LZSSをベースにした圧縮・解凍ライブラリ。ソースコードC言語で、MSXZ80)向けのアセンブラコードがあるわけでは無さそうですが、データ展開速度の速さが魅力。

github.com

あとがき

1990年代は「MAGフォーマット(MAG形式)」が望まれていた件

 MAGフォーマットについては別記事にするかもしれませんが、とりあえずここに入れておきます。

 当クラブで採用していた圧縮アルゴリズムの「BPE(Byte Pair Encoding)」は画像だけでなくBGMデータやマシン語プログラムなど画像以外のデータ圧縮用途も想定していて当時はそこそこ高性能なものであったと自負していたのでしたが、MSXの同人ソフトを開発する個人・サークル(いわゆる「現場」)の方々にはあまり良い顔をされませんでした

www.gigamix.jp

それと、BPEというデータ圧縮のアルゴリズムを採用したことについては当時のサークルさんに色々言われた。「圧縮が遅い」…ごもっともですすみません。一番多かった要望は「MAG形式で展開したい」データファイルをMAG形式で保存して、他機種(98や68等)でも閲覧できるようにしたかったらしいです。んー — Takashi Kobayashi (@nf_ban) 2021年2月16日

 パソコン通信全盛の時代、画像のデータ圧縮と言えば「MAGフォーマット(MAG形式)」が当時のデファクトスタンダードでした。MSX・FANの付録ディスクにはMERONさん開発のMSX版MAGローダー・MAGセーバーが収録され、パソコン通信で公開された他機種のMAG形式CGも度々転載されていましたから、MAG形式はパソコン通信を利用していないMSXユーザーにも馴染みがありました。

MAG形式が好まれた主な理由(諸説あり):

  • 【相性の良さ】MAG形式は16色ないし256色の「手描きCG」に最適と言われており、色数が少ないMSXと相性が良いアルゴリズムだった(MAGフォーマットはPC-9801が発祥のコミュニティでしたがMSXからの利用も想定された仕様になっている)。
  • 【クロス開発】他機種(主にPC-9801)からMSXへ画像データを持ってくる等、他機種とのクロス開発に便利だった。
  • 【露出の拡大】MSX用のCGを他機種でも観られるように、データ形式をMAGにしておきたい。
  • 【開発の効率化】MSX用の同人ソフト(CG集や画像表示が主体のミニゲーム集)がリリースしやすい開発環境を他機種のコミュニティが欲しがった。

 ですので、一サークルの独自形式ではなくMAG形式をMSX-BASICでも利用したいというニーズが当時のMSXの同人ソフトコミュニティに現れていたと思っています。

だからさぁ…読んでもいいけど読みっぱなしはあかんよ。息子「マグロの本かと思った」いやどうみてもマグロだろう?「俺の知りたいマグロじゃなかったんだよ!」父ちゃんが昔知りたかったマグロ(MAGローダー)なんだよ!まぁいいから書棚から出したらしまってよ…という会話。 pic.twitter.com/24SuLQVYsQ — Takashi Kobayashi (@nf_ban) 2021年2月20日

 MSXの同人ソフトにおけるMAG形式の採用においては、福岡の「G-NET(Genuine Network)」主宰・夢神楽遊睡さん開発のMAGデコードプログラム「孫(まご, MA5, SCREEN5用)」「愛(まな, MA7, SCREEN7用)」の存在が大きいです。そのデコードプログラムを包括した拡張BASICシステム(いわゆるミドルウェア)も開発されていて、BASICプログラム上でMAG形式画像表示が可能になっています。

 2021年現在は圧縮率の高さで「Exomizer3」、展開速度の速さで「LZe」が優位のようです。当時の「MAG」は圧縮率の優位性と言うよりは利用シーンの多様さ、そして先行きが暗いMSXシーンからの緩やかなデータ移行手段として選ばれていた印象です。

HTML5版・MAGローダー(MAGフォーマットビュアー)

PCやクラウドストレージに溜まってる太古のMAGフォーマット画像データを見たいと思ったら、さあこのWebページへMAGファイルをドロップするのだ!助かる。 / “HTML5 まぐろーだー” https://t.co/fS4UNqplHA — Takashi Kobayashi (@nf_ban) 2020年8月30日

 今やWebブラウザ上でMAG画像が閲覧できる時代です。MAGフォーマットの画像データをお持ちの方はぜひ!