FONTX
 
HOME
UP
FONTX
DISPV
Homepage
Blog
 

Last Update: 2005/12/01
新しいホームページに合わせてデザイン修正。
使用条件の変更。

FONTXとは

 IBM DOS Ver. J5.X/V以前の DOS/Vフォントドライバでは、

  1. フォント格納用のメモリとして、EMSやXMS等の標準的なメモリ管理システムを利用できなかった。
  2. ASCII 8*16,8*19,12*24、漢字 16*16,24*24のフォントしか取り扱えなかった。
  3. フォントをRAMに置いてあるにも関わらず、動的な変更ができなかった。
  4. フォントファイルのフォーマットが公開されていなかった。

等その仕組み上、実現できていてもおかしくなかった機能が実現されていませんでした。 その当時私は、NEC PC98用のソフトをAT互換機上で開発していましたが、DOS/VとPC98で日本語文字コードが異なる部分があったため、プログラム中でそれらの文字を使うときはわざわざPC98で入力しなければならず非常に不便な思いをしていました。 また英語版のソフトで罫線や特殊な記号がカタカナに化けてしまうのも困っていました。 もしDOS/V上で、上記の様なフォントドライバの制限を取り払ってフォントを入れ替える事ができればこの様な問題は解決できるはずだ、と作成したのが DOS/V フォントドライバと機能上位互換なこの FONTX フォントドライバです。 そのためこのフォントドライバは、既存フォントドライバを置き換えてより高機能な環境を作ったり、英語DOS環境を日本語環境にする為に用いられます。

Ver. 1.1は 1991年11月に発表し、Ver. 2.0を1992年1月に、その後いくつかのバグフィックスをして現在 Ver. 2.04になっています。 このドライバを元に商業版として 『DOS/Vスーパードライバーズ』 のFONTEX、 『DOS/Vスーパードライバーズ32』 のFONT32、 海.F.Computing社よりOEM供給 しているカスタムフォントドライバとして引き継がれていますが、機能的にはこのフリーソフト版と大差はありません。 IBM DOS/Vのオリジナルフォントドライバも IBM DOS/V Extension ver1.0以降、この FONTXと同等な機能を大幅に取り入れている為、DOS/Vを使っている人でわざわざFONTXを使う必要も減ってきましたが、MS DOS/V(にはこの様な機能が無い)の利用者や、フォントやツールの多さ等からFONTXを使っている方も多くいらっしゃるようです。

FONTX のダウンロードはこちらからどうぞ。

オンラインドキュメントの目次

FONTX 使用条件

このパッケージ(fontx204a.lzh)に含まれている全てのファイルの著作権は作者が保持します。 ただし作者は本パッケージの所持者に対して、
  1. プログラムを動作させること。
  2. 本パッケージを無変更で第三者に配布すること。
    注1:営利・非営利は問いません。
    注2:他システムの一部として組み込んで配布する場合、本パッケージも併せて配布すれば許諾は不要です。

を認めています。またこのパッケージを使用・配布した結果、いかなる損害が発生しようとも作者はそれを補償しません。 これらに同意できない場合は使用・配布をしないでください。

オンラインドキュメントの目次へ

FONTX の特徴

FONTXは以下の環境で動作します。
  1. Hardware: CPU 8086 以上。EMS、XMS、または Conventional memory に240KB以上の空き領域。
  2. Software: MS(PC) DOS 3.0 以上。(/V バージョンである必要はありません。)

FONTXは以下の様な機能を持っています。

  1. DOS/V標準フォントドライバとAPIレベルで互換。
  2. フォントパターンの格納領域にEMS,XMS,Conventional memoryを選択できる。
  3. フォンとパターンを保持するメモリ効率が標準フォントドライバより高い。
  4. 任意の大きさのフォントに対応している。
  5. 同一サイズで複数のフォントを管理できる。
  6. 文字コードを16bitの全ての領域に設定できる。
  7. 全てのフォントがプログラムから動的に変更可能。
  8. フォントファイルのフォーマットを公開している。
  9. 各種フォント作成ツールが付属している。
  10. フォントを動的・静的に変更するツールが付属している。
  11. メモリ常駐量が1KBから2KBと小さい。
オンラインドキュメントの目次へ

FONTX の導入方法

ステップ1 - ファイルのコピー
まず FONTX を導入するディレクトリを作成します。例えば C ドライブの FONTX を作る場合は、

MD C:\FONTX

と DOS のコマンドラインで入力します。その後圧縮された FONTX204.LZH ファイルの内容をそこに展開します。 圧縮には、LHA が使用されていますので、

LHA X FONTX204 C:\FONTX

と DOS のコマンドラインで入力します。

ステップ2 - フォントファイルの作成
FONTXにはフォント自身は含まれませんので、次にフォントファイルを作成します。 現在 DOS/V で日本語表示ができる環境をお使いの方は、付属の MKXFONT.EXE コマンドを FONTX をコピーしたディレクトリで実行してください。 または、他に日本語を表示できる環境をおもちの方は、PC98->MKXFNT98.EXE、J3100->MKXFNTJ3.EXE、AX->MKXFNTAX.EXE のプログラムをそれぞれのマシン上で実行し、作成されたフォントファイルを FONTX をコピーしたディレクトリにコピーしてください。 ただしこれらの他機種のフォントを使用する場合は、ご自分が所有していて個人で使うマシン以外のものは使用できません。 その他日本語環境がどこにも無い場合は、FONTX対応フォントを購入したり、他のフォントファイルから FONTX フォントへの変換をしたりしてフォントファイルを自分で作成する必要があります。
ステップ3 - 初期化ファイルの設定
FONTXが起動する時に、メモリに読み込むフォントを指定する初期化ファイル$fontx.iniの設定を行います。 パッケージに付属のMK*.EXEでフォントを作成した場合は、付属の$fontx.iniを修正せずそのまま使えば大丈夫です。 余計なフォントを削ったりフォントを追加するには、テキストエディタ等で次の様な項目を変更します。
[CODE]セクション
[CODE]から始まるセクションには、フォントファイルには含まれていない文字コード領域をあらかじめ確保する為に記述します。 ユーザフォントを使ったり、他機種専用の文字コードを使う場合などに設定します。 ここには各行に XXXX YYYY と一組の16進数で確保する文字コードの最初の番号、確保する文字コードの最後の番号を記述します。
[FONT]セクション
[FONT]から始まるセクションには、最初に読み込むフォントファイルを指定します。 ここには各行にそのフォントファイル名を記述します。
詳しくはFONTX テクニカルリファレンスを参照してください。

ステップ4 - ドライバの登録
最後にFONTXドライバを登録します。 フォント格納領域にXMSを使用する場合は$fontx.sysを、EMSを使用する場合は$fonte.sysを、Conventional memoryを使用する場合は$fontm.sysを使用します。 以下では$fontx.sysを使う場合を例にしています。 現在既に DOS/V が組み込まれている場合は、config.sysファイル中に、

DEVICE=C:\DOS\$font.sys /P=C:\DOS\ (PC-DOS/Vの場合)

DEVICE=C:\DOS\jfont.sys /P=C:\DOS\ (MS-DOS/Vの場合)

等と書かれている部分を、

DEVICE=C:\FONTX\$fontx.sys /P=C:\FONTX\

等と変更してください。 オプション設定等は、FONTX コマンドリファレンスを参照してください。

今まで DOS/V が組み込まれていなかった場合は、メモリマネージャ(HIMEM.SYSやEMM386.EXE等)の後に、

DEVICE=C:\FONTX\$fontx.sys /P=C:\FONTX\

等を追加してください。

オンラインドキュメントの目次へ

FONTX コマンドリファレンス

$fontx.sys XMS用 $font.sys 互換拡張フォントドライバー
書式 device[high]=[PATH]$fontx.sys [options]
コマンドラインオプション /P=? Font file がおいてある directory。? は directory 名。ただし最後は '\' で終わる事。Directory 名は 40 文字まで。Defaultは '\'。
/I=? Font driver の使用する割り込み番号を 16 進数で指定する。Defaultは 15(DOS/V標準)。
動作上の注意 CPU は 80286 以上であること。 この driver を登録する前に XMS driver (HIMEM.SYS や QEMM386等) を load しておくこと。 /P option で指定された directory か boot した drive の root directory にある、$fontx.ini を初期時に読み込むのでこれを用意すること。

$fonte.sys EMS用 $font.sys 互換拡張フォントドライバー
書式 device[high]=[PATH]$fonte.sys [options]
コマンドラインオプション /P=? Font file がおいてある directory。? は directory 名。ただし最後は '\' で終わる事。Directory 名は 40 文字まで。Defaultは '\'。
/I=? Font driver の使用する割り込み番号を 16 進数で指定する。Defaultは 15(DOS/V標準)。
動作上の注意 CPU は 8086 以上であること。この driver を登録する前に EMS driver (EMM386.EXE や QEMM386.SYS等) を登録しておくか、ハードウエアEMS のドライバを登録しておくこと。 /P option で指定された directory か boot した drive の root directory にある、$fontx.ini を初期時に読み込むのでこれを用意すること。

$fontm.sys Conventional memory用 $font.sys 互換拡張フォントドライバー
書式 device[high]=[PATH]$fontm.sys [options]
コマンドラインオプション /P=? Font file がおいてある directory。? は directory 名。ただし最後は '\' で終わる事。Directory 名は 40 文字まで。Defaultは '\'。
/I=? Font driver の使用する割り込み番号を 16 進数で指定する。Defaultは 15(DOS/V標準)。
動作上の注意 CPU は 8086 以上であること。この driver は、UMB に登録する事ができない。

mkxfont.exe 現在起動している DOS/V system から $fontx.sys 用のフォントファイルを作る。
書式 mkxfont
動作上の注意 DOS/V の日本語モードにおいて実行すること。 このプログラムを実行すると current directry に jpnhn8x.fnt, jpnhn12x.fnt, jpnhn16x.fnt, jpnhn19x.fnt, jpnhn24x.fnt, jpnzn8x.fnt, jpnzn12x.fnt, jpnzn16x.fnt, jpnzn24x.fnt が作成される。 これらを $fontx.sys で指定した directory に copy する。 必ず DOS/V オリジナルの $font.sys を使った環境で実行する事。 また 24 dots フォントが必要な場合は、$font.sys が24ドットフォントを使える様に設定しておく必要がある。

mkxfnt98.exe NEC PC98 のフォントROMから $fontx.sys 用のフォントファイルを作る。
書式 mkxfnt98 [options]
コマンドラインオプション /H=? ヘルプ。
/N 16 dots フォントから 19 dots フォントを作成する時に、伸張処理をせず上下に空白を付け加える。
/X Ascii code 0x20-0x7d, 0xa0-0xdf を漢字 ROM 上の半角フォントと入れ替える。
動作上の注意 NEC PC98 上で実行すること。 これを実行すると current directry に jpnhn8x.98, jpnhn16x.98, jpnhn19x.98, jpnzn8x.98, jpnzn16x.98 が作成される。 これらを $fontx.sys で指定した directory に copy する。

mkxfntj3.exe 東芝 J3100 のフォントROMから $fontx.sys 用のフォントファイルを作る。
書式 mkxfntJ3 [options]
コマンドラインオプション /H=? ヘルプ。
/N 16 dots フォントから 19 dots フォントを作成する時に、伸張処理をせず上下に空白を付け加える。
動作上の注意 東芝 J3100 上で実行すること。これを実行すると current directry に jpnhn8x.J3, jpnhn16x.J3, jpnhn19x.J3, jpnzn8x.J3, jpnzn16x.J3, jpnzn24x.J3 が作成される。 これらを $fontx.sys で指定した directory に copy する。

modfonts.exe フォントファイルのフォントを変更する。
書式 modfonts ChangeFile InputFile [InputFile...]
コマンドラインオプション ChangeFile 変更する font 情報付きの font file。その format は以下の通り。
1 byte 目 - 変更する font の幅
2 byte 目 - 変更する font の高さ
3 byte 目 - 変更する font の code の low byte
4 byte 目 - 変更する font の code の high byte
5 byte 目 - これ以降はその font data が入る変更する font の幅
これをベタで並べたものが ChangeFile になります。 変更する font code の high byte が 0 なら半角 font を変更し、そうでないときは全角 font を変更します。 InputFile に対応する size の物が無かった時は、そのフォントは変更しません。 また複数あった場合には、全てのファイルが変更されます。
InputFile 変更されるFONXフォントファイル。

modfontd.exe システムに登録されているフォントを変更する。
書式 modfontd [options] ChangeFile
コマンドラインオプション /H=? ヘルプ。
/NFontName 指定された FontName を持つ font を変更する。これが無い場合は、現在選択されている font を置き換える。
/D?
?=0 フォントを変更し画面を消去する。
?=1 フォントを変更し画面の文字を新しいフォントに書き換える。
?=2 フォントを変更し画面の文字はそのまま残す。
ChangeFile modfonts.exe の ChangeFile参照
動作上の注意 BIOS のワーク領域には、現在表示している文字の幅を格納しておく場所が無いので、 /D1, /D2 option を付けた時は、change file の最後の半角 font を変更します。 従って change file に複数の半角 font を含めるのは避けてください。

mkchf.exe フォントファイルからChangeFileを作成する。
書式 mkchf FontFile StartCode EndCode [OutputFile]
コマンドラインオプション FontFile FONTXで使用できるフォントファイル名
StartCode 抜き出すフォントの最初の文字コード。ascii文字の場合2桁の16進数、漢字の場合4桁の16進数。
EndCode 抜き出すフォントの最後の文字コード。ascii文字の場合2桁の16進数、漢字の場合4桁の16進数。
OutputFile 出力する ChangeFile のファイル名。Default(無指定)の場合は FontFile に".chf"の拡張子をつけたファイルになる。

showfont.exe フォントファイルやシステムに登録されているフォントの情報を表示する。 フォントファイルの構造を表示する時は、フォントファイルの構造が正しいかどうかのチェックも行うので、自作のフォントファイルを使うときは、これでチェックすると良い。
書式 showfont [FontFile]
コマンドラインオプション FontFile FONTXで使用できるフォントファイル名。 このフォント名が指定されなかった場合は、現在システムに登録されているフォントが表示される。

selfont.exe Font の選択。
書式 selfont [options] ZNFlag XSize YSize FontName
コマンドラインオプション /H=? ヘルプ。
/D?
?=0 フォントを変更し画面を消去する。
?=1 フォントを変更し画面の文字を新しいフォントに書き換える。
?=2 フォントを変更し画面の文字はそのまま残す。
ZNFlag 漢字フォントなら 'SJIS'、asciiフォントなら 'ASCII'。
XSize フォントの横ドット数。
YSize フォントの縦ドット数。
FontName フォントの名前。
動作上の注意 BIOS のワーク領域には、現在表示している文字の幅を格納しておく場所が無いので、/D1, /D2 option を付けた時は、display driver の font buffer を強制的に書き換えます。 したがって現在表示されている font と size の異なる[半角 font]を選択するのはやめてください。 全角 font についてはこの様な制限はありません。

cvtfontv.exe フォントの高さを変更。
書式 cvtfontv InputFile OutputFile NewHeight
コマンドラインオプション InputFile 変更元のフォントファイル名。
OutputFile 変更先のフォントファイル名。
NewHeight 変更するフォントの高さ。ただし、元のフォントの高さの半分から2倍まで。。

オンラインドキュメントの目次へ

FONTXテクニカルリファレンス

初期化ファイル $fontx.ini

$fontx.ini は、FONTXが起動時に読み出すフォントファイル等の初期設定が記述されたテキストファイルです。 内容は、あらかじめ確保しておく文字コード領域と組み込むフォントファイルが指定されます。ファイル中、

  1. ‘;’(セミコロン)から行末まではコメントになる。
  2. “[...]”を記述してある行がセクションの切れ目になる。

と言う決まりがあります。以下に $fontx.ini における各セクションの詳細を記します。

[CODE]セクション
FONTXのフォントファイルには自分自身が管理する文字コード領域が含まれていますが、それ以外の共通に使う必要がある文字コード領域(例えばユーザフォント領域等)をここで指定します。 このセクションは各行にこのあらかじめ確保しておく文字コードブロックを指定します。書式は、

StartCode [spaces or tabs] EndCode [spaces, tabs or comment]

となっており、StartCodeは確保する最初の文字コード、EndCodeは確保する最後の文字コードで、それぞれシフトJISコードの4桁の16進数で指定します。 この行は複数記述する事ができ、フォントファイル中の連続的な文字コード領域と合わせて255個まで設定する事ができます。 DOS/Vの標準的なユーザフォントの設定を例に取ると、以下の様になります。

[CODE] ; Define code area.
;start end comment
F040 F0FC ; user font area

[FONT]セクション
このセクションには、FONTXの起動時にメモリに読み込むフォントファイルを指定します。 各行にフォントファイルの名前を記述しますが、ディレクトリの指定はできず $fontx(e,m).sysの/Pオプションで指定されたディレクトリかブートディレクトリにあるファイルのみが使用されます。 記述できるフォントの数は255個までです。例を以下に示します。

[FONT] ; Install font file.
;font file comment
jpnhn16x.jpn ; 8*16 ascii font (japanese)
jpnhn16x.eng ; 8*16 ascii font (english)
jpnhn19x.jpn ; 8*19 ascii font (japanese)
jpnhn19x.eng ; 8*19 ascii font (english)
roman.fnt ; 8*16 ascii font (roman type)
jpnzn16x.fnt ; 16*16 SJIS font
jpnzn24x.fnt ; 24*24 SJIS font
jpnzn16x.98 ; 16*16 SJIS font (pc98)

DOS/V のフォントAPI(INT 15h)では、読み書きするフォントの区別にフォントサイズしか指定できませんが、FONTXでは同一サイズ複数フォントをサポートしています。 このため、このAPIで呼び出されるフォントは、この$fontx.ini中に最初に登録されたそのサイズのフォントが選ばれます。 この設定を変更するにはFONTX APIを使用するか、selfontコマンドを使用してください。

フォントファイルの構造

FONTXのフォントファイルは、文字サイズや文字コードを自由に定義でき又同時にそれらを使う必要があるため、これらの情報を含めたヘッダ部分とフォントのビットパターンを含めたパターン部分から構成されています。 以下にそれぞれのフォントファイルの構造を説明します。

ASCIIフォント
下の表は ASCIIフォントのヘッダー部です。ここで Index はフォントファイルの先頭からの位置(バイト単位)、Size はその項目のバイト数です。
フォントヘッダ
Index Size Description
0 6 Identifier: 通常はここに“FONTX2”の文字列が入る。
6 8 FontName: 8 文字の font の名前
14 1 XSize: Font の横 pixel 数
15 1 YSize: Font の縦 pixel 数
16 1 CodeType: 0

下の表ではXSize*YSizeの一つのフォントデータがどの様な順番で並んでいるかを示します。 表中左上がフォントパターンの左上を、右下がフォントパターンの右下を表しており、各値はそれがフォントパターンの何バイト目に含まれるのかを表しています。 ここで、X はフォントパターンの1スキャンライン分のバイト数 [X=int((XSize-1)/8)+1]、Y はフォントパターンのスキャンラインの数 [Y=YSize]を表しています。 フォントのXSizeが8で割り切れない場合は、あまった右側のビットに0を埋めます。 ASCIIフォントでは、このフォントパターンが ASCII CODE 0x00から0xFF まで順番に並びます。

フォントパターンレイアウト
(X*0+0)'th byte (X*0+1)'th byte ......... (X*0+X-1)'th byte
(X*1+0)'th byte (X*1+1)'th byte ......... (X*1+X-1)'th byte
.........
(X*(Y-1)+1)'th byte (X*(Y-1)+2)'th byte ......... (X*(Y-1)+X)'th byte

漢字フォント
下の表は漢字フォントのヘッダー部です。ここで Index はフォントファイルの先頭からの位置(バイト単位)、Size はその項目のバイト数です。
フォントヘッダ
Index Size Description
0 6 Identifier: 通常はここに“FONTX2”の文字列が入る。
6 8 FontName: 8 文字の font の名前
14 1 XSize: Font の横 pixel 数
15 1 YSize: Font の縦 pixel 数
16 1 CodeType: 1

漢字フォントでは、このフォントが使用する文字コードのテーブルが続きます。 表中 Index, Size の意味は上に同じです。

文字コードテーブル
Index Size Description
17 1 Tnum: テーブルのエントリ数
18 2 BlockStart1: 最初の領域の始まる文字コード
19 2 BlockEnd1: 最初の領域の終わる文字コード
.......
N*2+16 2 BlockStartN: N番目の領域の始まる文字コード
N*2+18 2 BlockEndN: N番目の領域の終わる文字コード
.......
Tnum*2+16 2 BlockStartTnum: 最後の領域の始まる文字コード
Tnum*2+18 2 BlockEndTnum: 最後の終わる文字コード

このテーブルの後にフォントパターンが続きます。 フォントパターンのフォーマットはASCIIフォントと同一です。 フォントの並ぶ順番は、領域テーブルに記されている順番に並べます。

FONX API

FONTX では、複数フォントを選択する為に DOS/V 標準のフォントAPI(INT 15h AH=50h)に以下のサブファンクションを付け加えています。

現在導入されているフォントの数を得る。
Input AX 50F2h
Output AH エラーコード(0なら正常、それ以外はエラー)
AL 導入されているフォントの数

現在導入されているフォントテーブルを得る。
Input AX 50F3h
ES:BX テーブルを格納するアドレス。あらかじめフォントの数を取得し、フォントの数*11バイト分のメモリを確保しておかなければならない。
Output AH エラーコード(0なら正常、それ以外はエラー)
ES:BX フォントテーブル。内容は以下の通り。
Index Size Description
14 1 XSize: Font の横 pixel 数
15 1 YSize: Font の縦 pixel 数
16 1 CodeType: 1
6 8 FontName: 8 文字の font の名前

これがフォントの数だけ続きます。

現在選択されているフォントの名前を得る。
Input AX 50F4h
BH フォントの種類 (bit0=0->1バイト文字, bit0=1->2バイト文字)
DH 文字幅
DL 文字の高さ
BP コードページ
ES:DI フォント名を格納する8バイトの領域のアドレス
Output AH エラーコード(0なら正常、それ以外はエラー)
ES:DI フォントの名前

フォントを選択する。
Input AX 50F5h
BH フォントの種類 (bit0=0->1バイト文字, bit0=1->2バイト文字)
DH 文字幅
DL 文字の高さ
BP コードページ
ES:DI フォント名が入っている8バイトの領域のアドレス
Output AH エラーコード(0なら正常、それ以外はエラー)

選択されているフォント名を変更する。
Input AX 50F6h
BH フォントの種類 (bit0=0->1バイト文字, bit0=1->2バイト文字)
DH 文字幅
DL 文字の高さ
BP コードページ
ES:DI フォント名が入っている8バイトの領域のアドレス
Output AH エラーコード(0なら正常、それ以外はエラー)
オンラインドキュメントの目次へ
HOME | UP | FONTX | DISPV
Copyright (C) 2005 Takashi Oyama All Rights Reserved.