
---------------------------------------------------------------------
                   book.bin (v2.0) ファイル構造について
---------------------------------------------------------------------

このフォルダ内にある probe.c, key.h は book.bin から指手を読み込むプロ
グラムです．サンプルとして参考にして下さい．なお，このサンプルプログラ
ムでは，記録方式がリトルエンディアンであることを仮定しています．

book.bin は主に序盤の局面を記憶したファイルであり，インデックスとデー
タベースの 2つの部分により構成される．

    位置（バイト）
  0x00000 - 0x17fff  インデックス
  0x18000 - 終端     データベース

インデックス部には，局面のハッシュキーからデータベースの位置を求めるテー
ブルが格納されている（ハッシュキーについては probe.c を参照）．0x4000
個の要素を持ち，局面に対応する要素の番号は，ハッシュキーと 0x3fff の論
理積により求める．一要素の大きさは 6バイトである．

    位置（バイト）   要素の番号
  0x00000 - 0x00005           0
  0x00006 - 0x0000b           1
          .
          .
          .
  0x17ffa - 0x17fff       16383

前半 4バイトはデータベースの位置をファイルの先頭からバイト単位で数えた
値，後半 2バイトはデータベースのサイズをバイト単位で数えた値を指す．

  0x00000 - 0x00003    要素 1番目のデータベース位置
  0x00004 - 0x00005    要素 1番目のデータベースサイズ
  0x00006 - 0x00009    要素 2番目のデータベース位置
  0x0000a - 0x0000b    要素 2番目のデータベースサイズ
          .
          .
          .

データベース部は幾つものセクションに分かれている．局面に対応したセクショ
ンの位置とサイズは，前述のインデックス部により記述される．

  データベース部 (0x18000 から)：セクション...

更に，セクション内部は多数個の要素に分かれている．

  セクション：要素...

それぞれの要素に，この要素のサイズ (バイト単位)，1局面のハッシュキーに
対応する指手と頻度が羅列される．

  要素：サイズ (1byte), ハッシュキー (8byte)，指手 (2byte),
        頻度 (2byte)

2byte (16bit) からなる指手部には，駒の移動先，移動元，成り・不成りを記
す．位置は将棋盤の升目を左上から右へ数え，0 - 80 の値であらわす．持ち
駒を打つ場合，移動元の値は 81 (歩)，82 (香)，83 (桂)，84 (銀)，85 (金)，
86 (角)，87 (飛) のように表す．

  xxxxxxxx x1111111  移動先の位置
  xx111111 1xxxxxxx  移動元の位置，もしくは打つ駒の種類
  x1xxxxxx xxxxxxxx  成る場合は 1, それ以外は 0
