TownsOS V2.1のフォントファイルの仕様
- 公開日: 2026/09/29
- 更新日: 2026/09/30
概要
TownsシステムソフトウェアV2.1のCDの \\FJ2\\FONT ディレクトリには、拡張子 FNT のビットマップフォントファイルと、アウトライン・ビットマップ混在のFontCityフォントが含まれている。このうちビットマップフォントの仕様を解析したのでその結果を以下に説明する。
FNTファイル
FNTファイルは、FONT1、FONT2、半角・1/4角フォントの3種類のフォーマットがある。この3種類はファイルの先頭を見ることで区別できる。
FONT1
FONT1は(少なくともTownsシステムソフトウェアに収録されている範囲では)24ドットの全角フォントである。 GOTH24.FNT (ゴシック体)、 KYOU24.FNT (教科書体)、 MARU24.FNT (まる文字)、 MINN24.FNT (明朝体)の5種類のフォントが収録されている。収録されている文字は基本的にJIS X0208準拠だが、8区(JIS X2028-1983では罫線領域とされた)から15区に富士通拡張文字が、91区から94区に縦書き用文字が収録されている。縦書き用文字の方はなぜか10文字ずれて収録されており、ひらがなの「う゛」までしかない。
文字種ととしては、異体字の入れ替え・追加についてはJISX0208-1983準拠だが、字形変更(「鰯」など)についてはJIS X0208-1978準拠となっている。例外的に「辻」は1983準拠(しんにょうの点が一つ)である。JIS X0208の字形変更については図書館員のコンピュータ基礎講座の「JIS83制定時の変更点」を参考にさせていただいた。
FONT1ファイルは、先頭16バイトのヘッダに続き、1文字当たり74バイトの文字データが94x94=8836組あるというフォーマットである。従って、ファイルサイズは16+74x8836=653880バイトとなる。ヘッダの構造は以下の通り。
ADDRESS |
DATA |
|---|---|
0x00 - 0x04 |
ASCIIコードで ”FONT1" |
0x05 - 0x07 |
0x20(スペース)を3文字 |
0x08 |
0x00 |
0x09 |
0x01 |
0x0A - 0x0B |
0x0018(ビッグエンディアン) おそらく1文字当たりの水平ドット数 |
0x0C - 0x0D |
0x0018(ビッグエンディアン) おそらく1文字当たりの垂直ドット数 |
0x0E - 0x0F |
0x2284(ビッグエンディアン) 94x94つまりJISの区点コードで 収録可能な最大文字数 |
文字データは最初の2バイトがそれぞれ区、点をISO2022-JP準拠(つまり区・点それぞれに32を足した数字)で表したもので、続く72バイトがデータ本体となっている。各バイトは横8x縦1のドット列であり、bit7が左端、bit0が右端となる。各ビットの値0は背景、1がドットである。 最初の1バイトが文字の左上8ドット、2バイト目はその右隣、3バイト目は2バイト目の右隣、4バイト目は1バイト目の下…という形で並ぶ。
FONT2
FONT2はFONT1とは以下の点で異なる。
半角・全角双方が収録されている。
半角フォントは0x00 - 0x1Fのコントロールコードや、昔のFMシリーズのGRAPHフォント(0x80 - 0x9F、0xE0 - 0xFE)も収録されている。ただし0x7FのコードDLは空白。
半角0x7Eは波線ではなく直線のオーバースコア
各文字のデータは、FONT1とは違って先頭2バイトには文字コード番号はなく、先頭から文字データ本体である。
文字データの並びはFONT1と同じ。横方向のドット数が8で割り切れない場合は、8で割り切れるように右にドットを補う。つまり、20ドットフォントの場合は、全角であれば横1列当たり3バイトで1文字当たり60バイト、半角であれば横1列(10ドット)当たり2バイトとなる。補われたドットは背景つまり値0のビットである。
ファイルの先頭16バイトの構造は以下の通り。
ADDRESS |
DATA |
|---|---|
0x00 - 0x04 |
ASCIIコードで ”FONT2" |
0x05 - 0x07 |
0x20(スペース)を3文字 |
0x08 |
0x00 |
0x09 |
0x01 |
0x0A - 0x0B |
0x00XX(ビッグエンディアン) おそらく全角1文字当たりの 水平ドット数 |
0x0C - 0x0D |
0x00XX(ビッグエンディアン) おそらく1文字当たりの垂直ドット数 |
0x0E - 0x0F |
0x2284(ビッグエンディアン) 94x94つまりJISの区点コードで 収録可能な最大文字数 |
半角・1/4角フォント
基本的にFONT1からヘッダ部分を除去した構造である。
半角であるがデータサイズは24x24ドット分あり、右半分は全て0である。
各文字のデータ列の先頭2バイトはJIS X0201の8ビットエンコーディングをビッグエンディアン16ビットで標記したものである(つまり、実質的には2バイト目が文字コードである)。
FONT2とは異なり、制御コードは0x1C - 0x1Fの矢印のみ収録、0x80 - 0xFFはJIS X0201相当部分のみとなっている。
ファイル名が ~HH.FNT となっているものはカナ部分がひらがな、 ~HK.FNT となっているものはカナ部分がカタカナ、 ~QK.FNT となっているものは1/4角文字(カナ部分はカタカナ)である。
1/4角文字は、以下の例外を除き24x24ドットの左上と左下に同じ文字が収録されている。
カナ部分は濁点(0xDE)、半濁点(0xDF)のみ収録
0x1C - 0x1Fの矢印、0x5E(^)、0x5F(_)、0x60(`)、0x7B({)、0x7D(})、0xDE(濁点)、0xDF(半濁点)は左下部分のみに収録
0x22(ダブルクオーテーション)、0x27(シングルクオーテーション)は左上が開始、左下が終了と別のフォントが設定されている。
0x28(左丸カッコ)、0x29(右丸カッコ)、0x2C(カンマ)、0x2D(ハイフン)、0x2E(ピリオド)、0x3C(<)、0x3D(=)、0x3E(>)、0x5B([)、0x5D(])は左上が縦書き用である。
FontCity
FontCityは(おそらく)Windows用のフォントとして用意されたものである。Windows対応後のTownsシステムソフトウェアの他、FMVのWindows3.1プレインストールモデルにも添付されている。このバージョンは独自フォーマットのフォントだが、後継製品のFontCity2 [#]_からTrueTypeフォントとなった。
Townsシステムソフトウェアに付属するFontCityはモトヤのOEMのゴシック体と明朝体が1書体ずつ、これに加えてカナフォント2つである[1]。各書体は、JIS X0201とX0208コードに加え、富士通独自拡張の文字を扱えるようになっている。ファイル構成は以下の通り。
FCMGO.* : FCゴシック体/JIS X0201およびX0208(1~8区、16~84区)
FCMGOIN.* : FCゴシック体/拡張(13区、89~92区、115~119区)
FCMGOFJ.* : FCゴシック体/富士通拡張(87区~94区、120区、132区、215~222区)
FCMMIN.* : FC明朝体/JIS X0201およびX0208(1~8区、16~84区)
FCMMININ.* : FC明朝体/拡張(13区、89~92区、115~119区)
FCMMINFJ.* : FC明朝体/富士通拡張(87区~94区、120区、132区、215~222区)
*.D08 : 8ドットフォント
*.D12 : 12ドットフォント
*.D16 : 16ドットフォント
*.D20 : 20ドットフォント
*.D24 : 24ドットフォント
*.D32 : 32ドットフォント
*.FNC : おそらくアウトラインフォント
ビットマップファイルのデータ構造は以下の通りとなっている。
ADDRESS |
DATA |
|---|---|
0x000 - 0x11F? |
0x0d,0x0a,0x09,フォント名(シフトJISコード), 0x20,バージョン標記(Ver 1.1),0x0d,0x0a,0x09, COPYRIGHT FUJITSU LIMITED 1993,0x0d,0x0a, 0x0d,0x0a,0x1a,残りは0x00 |
0x120 - 0x1FF |
フォント名(シフトJISコード),残りは0x00 |
0x200 - 0x21F |
FC,フォント名(シフトJISコード),残りは0x00 |
0x220 |
書体コード(0x10なら明朝、0x30ならゴシック) |
0x221 |
0x80 |
0x222 - 0x229 |
通常フォント・拡張フォントの区別
|
0x314 |
半角フォントの縦ドット数 |
0x316 |
半角フォントの横ドット数 |
0x31C |
全角フォントの縦ドット数 |
0x31E |
全角フォントの横ドット数 |
0x340 - 0x35F |
フォントデータが非圧縮なら全て0x00、 圧縮されていれば全て0xFF |
0x400 - 0x7FF |
4バイト(リトルエンディアン)のアドレスの並び。 先頭から半角、区画1~区画255。 データの無い区はアドレス0x00000000となる。 |
0x800 - |
フォントデータ格納エリア。圧縮か非圧縮かで構造が違う |
フォントデータ本体はFNTファイルと同様に1バイトを横8x縦1、ビット7が一番左でビット0が一番右となるようなドットパターンとするが、各バイトの並べ方が異なる。具体的には、先頭のバイトが左上、次が先頭の下と続き、縦ドット分並べたら次のバイトは先頭バイトの右側になる、という並べ方になる。1文字の横サイズが8で割り切れない場合はFNTファイルと同様右に背景ドットを追加する。
非圧縮の場合のフォントデータ
非圧縮フォントの場合は、先頭からフォントデータが隙間なく配置される。例えば24ドットフォントの場合は半角が48バイト、全角が72バイトであるので、半角・全角双方ある場合は0x800から半角フォントデータが256字分あり、続いて全角フォントデータが区ごとに94字分あることになる。
圧縮ありの場合のフォントデータ
圧縮フォントの場合は、アドレス0x400 - 0x7FFで定義された各区の先頭アドレスから6バイトx文字数[2]分のアドレス領域が確保されている。この6バイトは先頭4バイトが文字ごとのフォントデータの先頭アドレス、続く2バイトがフォントデータのバイト数として記録されている。どちらもリトルエンディアンである。
フォントデータは、半角フォントなら先頭8バイト、全角フォントなら先頭16バイトが続くデータ本体の表示方法を示す属性データとなっている。具体的には属性データの各ビットを7ビット目から逆順にチェックし、そのビットが0なら前列と同じ、1ならデータ本体から1バイト読み出す、という仕組みである。属性データの最初の1バイトの7ビット目が0である場合は、フォントの右上8ドットは0x00つまり全て背景扱いとなる。従って半角スペースであればフォントデータは属性データのみの8バイトとなる。
[#] 半角フォントなら256文字、全角フォントなら94文字
を付与しています。