辞書ROM MZ-1R24のデータ構造
単漢字変換辞書 / 文節変換辞書
■単漢字変換辞書
辞書ROMアドレス+38000h に、ひらがなの(JISコード下位バイト - 20h)をインデックスとするテーブルがある。
1エントリ4バイト。
各エントリのオフセット +0 を上位バイト、オフセット +1 を下位バイトとするアドレス差分を 38180h に加算した値が、各かなに対応する変換データのアドレスとなる。差分が FFFFh の場合は変換データは無し。
オフセット +2, オフセット +3 のデータの用途は不明
・変換データの構造
読みに対する漢字を格納している。データ圧縮のため読み文字列は差分データで格納されているため、先頭のひらがなに対応するオフセットから順次処理していく必要がある。
| オフセット | 長さ | データ |
| +0 | 1 |
- Bit[7:6]
- 現在の読み文字列に対し、後続の読み文字列片を何文字目から上書きするかを指定する
例: 現在の読み文字列が "ぎょう" で、この値が 2、後続の読み文字列が "く"の場合、読み文字列は "ぎょく" になる
この値が 0 のデータが2度目に出現したら、リスト終了
- Bit[5:0]
- 後続の変換データのバイト数。このバイトは含まない
|
| +1 | 可変(N) |
- 読み文字列
- 連続するバイトのうち Bit[7] == 0 の範囲を読み文字列片として扱う
Bit[6:0]を下位バイト、24hを上位バイトとするJISコードのひらがな文字列
1バイト目から Bit[7] == 1 のバイトが出てきた場合は、ヌル文字列とする
(※何もしないのではなく、EOSを書くことで読み文字列を短縮する)
|
| +1+N | 可変 |
- 変換候補の漢字のJISコード
- 上位バイト・下位バイトの順に並んでいる
上位バイトの Bit[7] == 0 ならこのデータで変換候補漢字JISコード列は終了
下位バイトの Bit[7] == 0 の場合、JISコードとしてそのまま(Bit[7]を0にして)扱う
下位バイトの Bit[7] == 1 の場合、さらに1バイトのデータが続く
上位バイト・下位バイトのBit[7]を0にしたJISコードから、後続の1バイトの個数分の漢字を候補とする
| 例: | B5 6D | → | JISコード356Dh "牛" |
| B5 F9 03 | → | JISコード3579hから3個 "漁" "禦" "魚" |
|
■文節変換辞書
辞書ROMアドレス+36800h に、ひらがなの(JISコード下位バイト - 20h)をインデックスとするテーブルがある。
1エントリ4バイト。
各エントリのオフセット +0 を上位バイト、オフセット +1 を下位バイトとするアドレス差分を 36980h に加算した値が、各かなに対応する文節変換インデックスデータのアドレスとなる。差分が FFFFh の場合は変換データは無し。
オフセット +2, オフセット +3 のデータの用途は不明
・変換インデックスデータの構造
1エントリ5バイトのデータが並んでいる。文節変換辞書データへのオフセットを保持する。
このリストをたどることで、ある程度変換候補の範囲を絞り込んだ状態で辞書ROMデータをチェックすることができる。
データ圧縮のため読み文字列は差分データで格納されている。
| オフセット | 長さ | データ |
| +0 | 1 |
- 読み文字列に上書きする文字
- 現在の読み文字列に対し、上書きする読み文字を指定する
このバイトを下位バイト、24hを上位バイトとするJISコードのひらがな文字
上書きした文字の後はEOSとする
|
| +1 | 1 |
- Bit[7:4]
- 現在の読み文字列に対し、オフセット+0の読み文字を何文字目から上書きするかを指定する
例: 現在の読み文字列が "あい" で、この値が 3、オフセット+0の読み文字が "ち"の場合、読み文字列は "あいち" になる
- Bit[3:0]
- 変換データの辞書ROM内オフセット[17:16]
|
| +2 | 1 | 変換データの辞書ROM内オフセット[15:8] |
| +3 | 1 | 変換データの辞書ROM内オフセット[7:0] |
| +4 | 1 | 不明 |
・変換データの構造
読み文字列に対応する変換文字列を格納している。データ圧縮のため読み文字列は差分データで格納されているため、変換インデックスデータで示されるオフセットから順次処理していく必要がある。
| オフセット | 長さ | データ |
| +0 | 1 |
- Bit[7:5]
- 現在の読み文字列に対し、後続の読み文字列片を何文字目から上書きするかを指定する
- Bit[4:0]
- 後続の変換データのバイト数。このバイトは含まない
|
| +1 | 可変(N) |
- 読み文字列
- 連続するバイトのうち Bit[7] == 0 の範囲を読み文字列片として扱う
Bit[6:0]を下位バイト、24hを上位バイトとするJISコードのひらがな文字列
1バイト目から Bit[7] == 1 のバイトが出てきた場合は、ヌル文字列とする
(※何もしないのではなく、EOSを書くことで読み文字列を短縮する)
このバイトが7Ehの場合、長音記号として扱う
|
| +1+N | 1 | 不明 |
| +2+N | 可変 |
- 変換文字列
- 読み文字列に対応する変換文字列
このバイトが 21h 以上の場合、(このバイト & 7Fh)をJISコード上位バイト、(次のバイト & 7Fh)をJISコード下位バイトとする文字を変換文字列として追加する。第1バイト、第2バイトのBit[7]に従って読み文字列の読み位置を進める。
| 第1バイトのBit7 | 第2バイトのBit7 | この文字に対応する読み文字列の文字数 |
| 0 | 0 | 1 |
| 0 | 1 | 2 |
| 1 | 0 | 3 |
| 1 | 1 | 4 |
このバイトが 20h 以下の場合、このバイトの値を文字数として読み文字列からコピーし、読み文字列の読み位置を進める。
|
戻る