
隣同士のデータの組み合わせ(2バイト)を1バイトに圧縮して「辞書」を作ります。以後、既に使われた組み合わせのデータは「辞書」から、新たに見つけた組み合わせは「辞書」を作って…の繰り返しとなります。
出来上がった圧縮ファイルには必ず辞書のバッファが含まれます。バッファサイズは可変できますので、組み合わせが少ない単純なデータは辞書のバッファを減らすことで実ファイルのサイズを減らすことができます。逆に組み合わせが多い複雑なデータは辞書のバッファを増やすことで多くの組み合わせに対応させ、実ファイルのサイズを減らすことができます。
辞書のバッファサイズはユーザーが圧縮時に調節します。そのデータに最適なバッファサイズを見つけて、圧縮ファイルのサイズを最小限に抑えましょう。
それどころか、BPE圧縮は展開スピードを重要視したアルゴリズムである為、他のアルゴリズムでは到底真似できない、非常に高速な展開速度を叩き出します。展開後32KBになるデータをわずか0.5秒(turboR, R800-DRAMモード時)で展開すると言えば、その高速ぶりが理解できるものと思われます。
CGから見た圧縮率から言えば、特にscreen 8以上のCGの圧縮率が良く、MAG形式のようにタイルパターンに頼らずとも圧縮率が期待できます。また、COPY形式の矩形CGデータは矩形のまま圧縮でき、展開時にロジカルオペレーションと展開方向を指定することができます。TPSETしながら展開する等、夢は膨らみます(笑)。
BPE圧縮は可逆圧縮(データが100%復元する)ですので、CG以外のデータでも有効利用できます。VRAMの他に「RAMへの展開機能」も用意しましたので、BGMデータやマシン語等のバイナリデータ、テキスト、その他何でも指定されたメモリへガンガン展開できます。
BPE圧縮ツールは3種類あります。マシンに併せてご利用下さい。
※矩形圧縮データ以外を _extcopy で使用するとエラーになります。逆に矩形圧縮データを _ext で使用してもエラーになります。BPE圧縮データには圧縮前のデータ形式が記述してあり、展開時にこのパラメータを読んでいます。
※COPY形式は展開番地を指定するわけではありませんので、x座標、y座標に @ を付けても無効になります。
圧縮時にデータ形式が認識されるものは以下の通りです。
※データ形式は圧縮ツールのオプション指定で変更も可能です。
圧縮方法について、詳しくは佐野友則@早稲田大さんの「解説・BPE圧縮」をご覧ください。
第1章 概要
1.1 "Byte Pair Encoding"とは
「C MAGAZINE(ソフトバンク刊)」にて紹介された、新しい圧縮アルゴリズムです。
1.2 BPE圧縮のメリット
BPE圧縮は他の圧縮アルゴリズムと決してひけを取らない圧縮率を誇っております。さすがにLZ法を超える圧縮率は出せませんが、あと少しでLZ法と肩を並べる程度の圧縮率が期待できます。
第2章 DMシステム2での使用方法
2.1 BPE圧縮データを作る
まず、圧縮しないことには話になりませんね。
※EBPE.EXEはWindows 95のMS-DOSプロンプトからでも実行できます。
A>EBPE [.<出力ファイルの拡張子>] [-|/<options>] <圧縮するファイル名>
options:
-h ヘルプメッセージを表示します
-b# 辞書のバッファサイズを変更します (# ← 0〜16384)
-i# DMシステム2のデータ形式を直接指定します (# ← 16進数で)
-m 出力ファイルにMSXのBSAVEヘッダを付けません
-m- 出力ファイルにMSXのBSAVEヘッダを付けます (デフォルト)
※出力ファイルの拡張子を省略すると .BPE になります。
※辞書のバッファサイズを省略すると最大値になります。
※MSX用EBPEMの最大バッファサイズは 8192 です。
※MSX用EBPEMSXの最大バッファサイズは 12288 です。

![]()
DM-BPE encoder
EBPESET.LZH (23KB)
![]()
MSX用BPEエンコーダ&デコーダ
BPEMSX.LZH (13KB)
2.2 圧縮データの展開
RAM及びVRAMに配置されたBPE圧縮データを展開します。
CALL EXT (展開元アドレス,展開先アドレス)
事前にBPE圧縮データを所定のアドレスへ配置しておく必要があります(配置されていない場合は、エラーを出します)。
アドレスの先頭に @ を付けるとVRAMを指定することになります。
ex.)
_ext (&HD800,&HC000)
← D800h(RAM)に配置したデータを C000h(RAM)へ展開
10000h(64KB)以上のVRAMを指定する場合は10進数で指定してください。(16進数ではOverflowでエラーになります)
ex.)
_ext (&HD800,@0)
← D800h(RAM)に配置したデータを 0000h(VRAM)へ
_ext (@&H4000,&HC000)
← 4000h(VRAM)に配置したデータを C000h(RAM)へ
アドレスの指定は変数でもOKです。計算式も書けます。
ex.)
_ext (@65536,@98304)
← 10000h(VRAM)に配置したデータを 18000h(VRAM)へ
ex.)
_ext (-16384,VAL("&H"+A$)*256+4096)

![]()
sample program
EXT.LZH (8KB)
2.3 COPY形式CGの展開
圧縮したデータがCOPY形式のCGデータに限り、書式はこのように変わります。
CALL EXTCOPY (展開元アドレス,x座標,y座標)
VRAMは全てのページが縦に256ドットずつ繋がっているものと考えます。y座標に256以上の数値を入れると、他のページへいきなり展開できたりします。
ex.)
_extcopy (@32768,64,0)
← 8000h(VRAM)に配置した矩形データを (64,0)へ展開
ex.)
_extcopy (@32768,64,578)
← 8000h(VRAM)に配置した矩形データを (64,578)の座標へ展開(ページ2の(64,64))
2.4 展開方向付き・COPY形式CGの展開
COPY形式特有の方向指定で、反転処理しながら矩形データを展開。
CALL EXTCOPY (展開元アドレス,x座標,y座標,方向)
方向
0 通常 (基点は左上、右下へ展開)
1 左右反転 (基点は右上、左下へ展開)
2 上下反転 (基点は左下、右上へ展開)
3 左右+上下反転 (基点は右下、左上へ展開)
ex.)
_extcopy (@32768,64,64,2) ← (64,64)から上下反転してデータを展開
2.5 ロジカルオペレーション付き・COPY形式CGの展開
BASICのcopy文と同等のロジカルオペレーションをかけつつ、データを展開。特にTPSETによる重ね合わせは便利。
CALL EXTCOPY (展開元,x座標,y座標,方向),ロジカルオペレーション
ex.)
_extcopy (@32768,64,64,2),tpset ← TPSETで展開
_extcopy (@32768,64,64,2),txor ← TXORで展開

![]()
sample program
EXTCOPY.LZH (4KB)
第3章 使用上の注意
3.1 データの圧縮について
3.2 データの展開について
第4章 圧縮時のデータ形式の分類
DMシステム2のBPE圧縮は「バイナリシステム」と組み合わせることにより、データの自動展開と即利用が指定できます。
No. データ形式の内容 拡張子(デフォルト)
0 その他(RAMへ転送するベタデータ)
1 BGMデータ .MGS .BGM
2 SEDRVに対応したSEテーブル .SE
3 RAMへ転送するバイナリーデータ .OBJ .BIN
4 DM-PALETに対応したパレットテーブル .PLn .BPn
8 VRAMへ転送するベタデータ .SCn .SRn
9 COPY形式のCGデータ .PIn .GLn
10 PCMデータ .PCM .PCP
第5章 BPEフォーマット・仕様
DMシステム2で採用しているBPE圧縮フォーマットは「ヘッダ」「実データ」の2部に分けられます。ヘッダには圧縮時のデータ形式や展開サイズなどの重要な情報が格納されています。
5.1 ヘッダ(3 bytes 又は 7 Bytes)
通常の場合 COPY形式CGファイル
+0〜+1 "Bp" +0〜+1 "Bp" +2 識別コード (ID) +2 識別コード (ID)
+3〜 圧縮データ +3〜+4 横サイズ (2バイト)
+5〜+6 縦サイズ (2バイト)
+7〜 圧縮データ
識別コード (ID)
b7 b6 b5 b4 b3 b2 b1 b0
× S S S V n n n
~~~~~~~~ ~~~~~~~~~~~ bit3〜0 識別コード(0〜15)
| ※b3はVRAMへ展開するフラグ
| 0 ベタRAMデータ (.DAT .TXT等)
| 1 BGMデータ (.BGM .MGS)
| 2 SEデータ (.SE)
| 3 RAM用バイナリー (.OBJ .BIN)
| 4 パレットデータ (.PLn .BPn)
| 5〜7 予約
| 8 ベタVRAMデータ (.SCn .SRn)
| 9 COPY形式CG (.PIn .GLn)
| 10 PCMデータ (.PCM .PCP)
| 11〜15 予約
|
+--------------- bit6〜4 スクリーンモード (5〜12:-5した値)
VRAMのCGデータ(識別コード8,9)のみ有効
sc4以下の場合は0(sc5)になる
※この情報は無くても構わない
5.2 圧縮データ
0FFh: 終了コード
Copyright (c) 1998 GIGAMIX, All rights reserved.