#11 Article 3535 Posted at 1989/09/14 23:18:24 by NOZOMU (MAP041) [DOC.ML1]

Subject: ML1仕様書

*** ML1 VER1.0 仕様 ***

 解像度    横160ドット 縦100ドット

 ドット縦横比 1:1

 色数     ドット毎に729色(RGB各9階調)中128色表示。

 データ形式  バイナリ形式。 ヘッダー96byte+データコア

 upload形態  専用のテキストコンバータ"MX1"形式による。


 *** ML1 VER1.0 ヘッダー形式 ***

$00.b : '100',$1a
$04.b : 西暦年を100で割ったあまり
$05.b : 月
$06.b : 日
$07.b : 時
$08.b : 分
$09.b : 秒
$0a.w : 左上X座標(=0)
$0c.w : 左上Y座標(=0)
$0e.w : 右下X座標(=159)
$10.w : 右下Y座標(=99)
$12.b : ハンドル 12文字に満たない場合は残りは$00
$1e.w : ファイルサイズ
$20.b : 機種名 16文字に満たない場合は残りは$00
$30.b : エディター名 16文字に満たない場合は残りは$00
$40.b : コメント 32文字に満たない場合は残りは$00

以上です。 .wは、先に上位8Bit、後に下位8Bitです。(68系にあわせてね。)
ファイルサイズは、ヘッダー先頭からデータ部最終バイトまでのバイト数です。


 *** ML1 VER1.0 データ形式 ***

 ML1のデータはビット単位で圧縮されています。

 ○まず最初に、色圧縮モードが2ビットあります。

  色圧縮モード = 0 : パレットデータは128色記録する。
               色コードは7ビット固定。

           1 : パレットデータは使用色だけ記録。
               色コードは7ビット固定。

           2 : パレットデータは使用色だけ記録。
               パレットデータは使用量でソートして記録。
               色コードはwyle符号(後述)で記録。

 ○次にパレットデータがあります。これは先の色圧縮モードにより形式が違います。

  色圧縮モード = 0

   パレットコード10ビット(0~728)×128 = 1280ビット

  色圧縮モード = 1

   1.使用色数-1を7bitで保存。
   2.(カラーコード7ビット+パレットコード10ビット)×色数
   *画面上で使用している色数が75色までのときは、色圧縮モード0より
    こちらの方がデータ量が少なくなります。

  色圧縮モード = 2

   1.使用色数-1を7bitで保存。
   2.(カラーコード7ビット+パレットコード10ビット)×色数
   データ形式は色圧縮モード1と一緒です。
   圧縮データに記録される回数の多い順に色データをソートして記録します。
   これはwyle符号によって、使用頻度でデータ長を変える事により、圧縮
   効果を出すためです。

 ○次に圧縮データが記録されています。これはデータ形式と一緒に圧縮手順に
  ついても説明します。

  データは、「次の変化点までの長さ,変化色コード,連鎖」を一組とし、全画面分
  続いています。

  ML1では、データ圧縮のために、まず色が変化する点を抽出します。 画面左上から
  右方向に調査し、右端まで来たらそのまま1ドット下の左端から続けます。
  そして、以後この変化点と変化した色を圧縮して行きます。

  次の変化点までの長さは、変化点の抽出を行ったのと同じ順序で、次の変化点まで
  の長さから1を引いて記録します。wyle符号を使用します。

    wyle符号とは、

                0n                0 -    1
               10nn               2 -    5
              110nnn              6 -   13
             1110nnnn            14 -   29
            11110nnnnn           30 -   61
           111110nnnnnn          62 -  125
          1111110nnnnnnn        126 -  253
         11111110nnnnnnnn       254 -  509
        111111110nnnnnnnnn      510 - 1021
       1111111110nnnnnnnnnn    1022 - 2045
      11111111110nnnnnnnnnnn   2046 - 4093
     111111111110nnnnnnnnnnnn  4094 - 8189
    1111111111110nnnnnnnnnnnnn 8190 - 16381

    以上のようなビットデータで、nは0か1です。


   ただし、長さのチェックは、連鎖のチェックをした後に行います。
   長さが16000ならばデータ終了です。

  変化色コードは、変化点により、以後何色になるのかを記録します。

   色圧縮モード0,1 なら、そのまま色コードを7ビット記録します。

   色圧縮モード2の場合は、色コードをwyle符号で記録します。
   使用頻度が高い色程小さいコードナンバーに割り当てると、データ量を
   減らすことができます。 ただし「使用頻度が高い」というのは、画面
   上のドット数を数えても判りません。 データを圧縮した際に、変化色
   コードとして何回記録されるかを数えなければいけません。
   変化色コードを数えるには、2パスで圧縮しなければならないので、メ
   モリー容量的にも時間的にもかなり負担が大きいので、8ビットマシン
   では、色圧縮モード0か1の圧縮のみというのもありですね。
   再生の方はどちらでも1パスでできますから、両方サポートしましょう。
   また、使用色数が多く、使用頻度に偏りが少ない場合、色コードをwyle
   符号で記録するより、7ビット固定にした方がデータ量が少なくなる
   場合もありますから、そういう場合も色圧縮モード0か1で記録することに
   なります。

  連鎖とは、画面の縦方向の圧縮です。

   まず連鎖の有無のフラグ(1ビット)を記録します。 連鎖がある場合は1、
   ない場合は0です。

   連鎖のチェックは、今注目している変化点の1ドット下のラインに、同じ色の
   変化点があるかどうかをチェックします。 注目している変化点の真下ならば
   0、1ドット右なら100、1ドット左なら101、2ドット右なら1110、2ドット
   左なら1111、連鎖無しなら110を記録し、連鎖が無くなるまで、チェックし続
   けます。


 **************************************

 以上がML1のデータ形式です。 MX1の仕様書もいるんだけど、「後で」ね。