MAKI format Specifications ======================================================================== #### MAKIフォーマット仕様書 #### By Woody RINN (MAKIchanNET #03) ======================================================================== ● 名称等  MAKIフォーマットは、まきちゃんNETにおいて開発された、640 ×400ドットアナログ16色の画像データファイル用フォーマットです。  当フォーマットの正式名称は「MAKIフォーマット」です。  通称として「まきちゃんフォーマット」と言う場合もあります。この場合 の「まきちゃん」は開発元の「まきちゃんNET」の「まきちゃん」であり、 ひらがな表記です。 ● 概説  まずXORによって縦の差分を取り、これを領域分割して変化点の存在す る領域のみを記録するという方式です。  横2ドットをひとまとめにして、1ピクセルとしています。  仮想画面として座標系は320×400の範囲を取ります。  1ピクセルは1バイトで表現出来ます。色コードが2つ並んでいます。 MSB LSB I1 G1 R1 B1 I2 G2 R2 B2 ● データ  1)エリアの区分  データは次の5エリアに分けることが出来ます。 ヘッダ (48 bite) アナログパレット(48 bite) フラグA (1000 bite) フラグB ピクセルデータ  2)ヘッダ領域  ヘッダ領域は48バイトからなります。  データー格納方式はモトローラー式で行います。実はプロトタイプはX6 8K上でまず制作されたのですが、何故かそれがそのままになってしまって いるんです(^^;) - 1 - MAKI format Specifications オフセット 内容 サイズ 説明 ------- ----------------------- ------- ------------------------ 0 'MAKI01A ' 8 この8バイトでチェック 8 'PC98' + %USER% + EOF 23+1 機種、環境変数 USER など 32 ( 0~16000 ) 2 フラグBのサイズ 34 ( 0~64000 ) 2 ピクセルデータAのサイズ 36 ( 0~64000 ) 2 ピクセルデータBのサイズ 38 0 2 拡張フラグ 40 0 2 表示開始位置X 42 0 2 表示開始位置Y 44 640 2 表示終了位置X+1 46 400 2 表示終了位置Y+1  まず、先頭8バイトがチェックデータです。現在は"MAKI01A "又は"MAKI0 1B "の2種類が存在します。(最後のスペースも忘れずに)  その後に機種コードが来ます。GREP等で検索した時見映えがいいようにな るべく4文字に統一して下さい。(例:PC98,PC88,ESEQ,X68K,MSX2)  それからユーザー名登録があります。環境変数 USER の内容などが記録さ れます。元々はセーバーのバージョン等を記録するエリアだったので、文字 数制限がきついです。もっと余裕持って作っておけば良かった(^^;)。  USER の設定を行なってない方のデータをかなり見かけます。記名の呼び掛 けをお願いします:)  テキストデータの最後は EOF($1A) が入ります。ここまでで32バイトで す。以上はTYPE等で確認出来ます。  その後、サイズなどのデータが記録されます。表示座標は将来部分圧縮を サポートした時のためのリザーブです。現在は部分圧縮はサポートされてい ません。必ず 0,0,640,400 が記録される事となります。  ワードデーターはモトローラ式で、上位、下位の順で記録されます。すみ ません:) 例 : 640,400 == $02,$80,$01,$90  3)拡張フラグ  頭から38バイトめの2バイトを拡張フラグとして使用します。さしあた って39バイトめのビット0と1のみが使用されます。 MSB LSB XXXX XXXX XXXX XXBA A:200ラインフラグ(ビット0)  200ラインでセーブする時1にします。アスペクト比が1:2(縦長) であるという意味で、200ラインまでしかデータがないという意味ではあ りません。MSXの場合は212ラインまでセーブされます。  従来のローダーで200ラインモードの画像を見ると半分に潰れて見えま す。 B:デジタル8色フラグ(ビット1)  ここが立っていたらデジタル8色のデーターです。  88、デジタルな98等で表示する際は誤差拡散をせずにそのまま表示す るようにします。アナログな機種では関係ありません。 - 2 - MAKI format Specifications  4)パレットデータ  パレットデーターはGRBの順で各1バイト、全部で48バイトです。  0以外の時は下位ビットを1で埋めて、8ビットに拡張します。 0 ・・・ %00000000 1 ・・・ %00011111 2 ・・・ %00101111 例:16階調の場合 3 ・・・ %00111111 4 ・・・ %01001111 : : 15 ・・・ %11111111 ● 展開方法  これより画像の展開のアルゴリズムの基本形について説明します。  1)仮想画面の展開  まず、メモリ中に320×400ドット白黒の仮想画面を作ります。  フラグAを順番に1ビットづつ調べます。  もしビットが0であれば4×4ドットをクリアします。もしビットが立っ ていればフラグBより2バイト読んで、その4×4ドットのデーターとしま す。  このように、左上から4×4ドットづつセットしていき、320×400 ドット分終われば終了です。  ピクセルデータのオフセットはヘッダに記録されていますが、この時最後 のフラグBの次のデーターからをピクセルデータとしても同じことです。  2)ピクセルデータの展開  メモリの中には320×400ドット白黒の仮想画面があります。今度は その仮想画面を1ビットづつ調べます。  もしビットが0であれば、実際の画面の2ドットをクリアします。もしビ ットが立っていればピクセルデータより1バイト読んで、実際の画面に2ド ット分表示します。  なお、ピクセルデータAというのは上200ライン分、Bは下200ライ ン分です。セグメント境界対策:)  3)画像の復元  "MAKI01A "の場合、400-2ライン分、2ライン上とXORを取ります。 - 3 - MAKI format Specifications for(y=2;y<400;y++){ for(x=0;x<640;x++){ pset(x,y,(point(x,y)^point(x,y-2)); /* XORを取る */ } }  "MAKI01B "の場合は、4ライン毎になります。  ● 圧縮方法  展開の逆のプロセスを辿ります。  1)縦の差分を取る for(y=399;y>1;y++){ for(x=0;x<640;x++){ pset(x,y,(point(x,y)^point(x,y-2)); /* XORを取る */ } }  400-2ライン分2ライン上とXORを取った場合と、400-4ライ ン分4ライン上とXORを取った場合を比べ、0でないピクセルが少なくな る方を採用します。2ライン毎の場合は"MAKI01A "、4ライン毎の場合は"M AKI01B "とします。  2)仮想画面を作る  画面上を1ピクセルづつ調べ、0なら仮想画面の対応するビットを0にし ます。  0でなければ仮想画面の対応するビットを1にし、ピクセルデータをバッ ファに書き出します。上200ライン分はピクセルデータAとし、下200 ライン分はピクセルデータBとします。  3)フラグAを作る  仮想画面上を4×4ドットづつ調べ、0ならフラグAの対応するビットを 0にします。  0でなければフラグAの対応するビットを1にし、仮想画面のデータをフ ラグBに書き出します。  4)セーブ  ヘッダ、パレット、フラグAB、ピクセルデータの順にファイルにセーブ します。 - 4 - MAKI format Specifications ● 将来の展望  最初は、将来改良拡張することを前提に「まあ、とりあえずテストという ことで」リリースしたMAKIフォーマットですが、予想外に広がってしま いました:)  下手に改変とかすると混乱を起こしかねませんし、また最近は柳沢さんの PI 等の高性能高圧縮なフォーマットも発表になっているため、もし次のフ ォーマットを発表するとしたら、それはMAKIの改良ではなく、全く別の ものになる予定です。  既に色々テストは行なわれており、新フォーマットの目処も立ってます。 水面下では色々進行してますので、御期待下さい。発表の時期については未 定ですが、満足の行くものが出来るまでは外には出さないつもりです。  あ、各機種移植担当の協力者を募集しています。MAKIと同様宜しく。 ● 権利、運用に関する既定  当フォーマットは使用においていかなる制限もなく全く自由です。  但しローダー/セーバー等の運用に関する権利はプログラム制作者に帰属 します。また当フォーマットの画像の権利は、画像制作者に帰属します。そ れぞれが定める条項に従って下さい。  フォーマットの運用に依って発生したトラブルに関しての責任は、まきち ゃんネット並びにフォーマット制作に関わったメンバーは一切負いません。  本フォーマットのサポートはまきちゃんネット及びまきちゃんネットのメ ンバーが所属する各BBS上で行います。  ローダー/セーバーなどのユーティリティを作成・発表するのは自由です。  移植を希望する方は出来るだけまきちゃんネットまたはその所属メンバー に連絡をお願いします。 ● 最後に  この仕様書は配布自由です。  質問、バグレポートや希望、感想等は大歓迎です。メイルとかいただける とうれしいな、と思います。CGを愛好する方のお役にたてれば幸いに思い ます。  ではでは。  RINN - 5 - MAKI format Specifications ● 目次 ● 名称等 .................................................... 1 ● 概説 ...................................................... 1 ● データ .................................................... 1  1)エリアの区分 ............................................ 1  2)ヘッダ領域 .............................................. 1  3)拡張フラグ .............................................. 2  4)パレットデータ .......................................... 3 ● 展開方法 .................................................. 3  1)仮想画面の展開 .......................................... 3  2)ピクセルデータの展開 .................................... 3  3)画像の復元 .............................................. 3 ● 圧縮方法 .................................................. 4  1)縦の差分を取る .......................................... 4  2)仮想画面を作る .......................................... 4  3)フラグAを作る .......................................... 4  4)セーブ .................................................. 4 ● 将来の展望 ................................................ 5 ● 権利、運用に関する既定 .................................... 5 ● 最後に .................................................... 5 ● 目次 ...................................................... 6 - 6 -