第1章 概要
1.1 フォントドライバとは
DMシステム2の漢字表示に必要な漢字フォントデータを各種周辺機器から取得する専用のルーチンです。MSX標準の漢字ROMはもちろんのこと、漢字フォントとして使えそうな多くの周辺機器やシステムに対応します。
DMシステム2では16×16、12×12の計2種類のフォントドライバを登録できます。漢字ROMが用意できないMSX2ユーザーの方々は、フォントドライバを交換することで、漢字ROMを搭載されたマシンとほぼ同じように漢字表示が可能になります。
DMシステム2の漢字表示に必要な漢字フォントデータを各種周辺機器から取得する専用のルーチンです。MSX標準の漢字ROMはもちろんのこと、漢字フォントとして使えそうな多くの周辺機器やシステムに対応します。
DMシステム2では16×16、12×12の計2種類のフォントドライバを登録できます。漢字ROMが用意できないMSX2ユーザーの方々は、フォントドライバを交換することで、漢字ROMを搭載されたマシンとほぼ同じように漢字表示が可能になります。
この章ではDMシステム2で対応するドライバ及び、今後対応が予定されているドライバを紹介します。
下線の引いてあるドライバ名をクリックすると.LZH形式のファイルを転送します。
MSXの漢字ROMを利用する標準的なドライバです。MSX2+とMSX turbo R、一部のMSX2など、現存する日本の多くの機種に漢字ROMが搭載されていますので、通常はこのドライバだけで支障は無いはずです。
このドライバで半角文字とJIS第1水準、第2水準の全角文字が表示できます。
※ このドライバはDMシステム2の出荷時に内蔵されています。
MSXのANK(半角)フォントを利用して、全角文字をできるだけ表示させようとします。シフトJISで有効な半角文字、全角英数字、全角ひらがな、全角カタカナ、GRAPHキーで出せるような(月、火、時、分…)一部の漢字と記号が表示できます。
デフォルトで用意されているキャラクタに無い文字はすべてダイヤマークで表示されます。
漢字ROMの搭載されていない機種で最低限の日本語表示を行いシステムの互換性を維持する用途を想定しています。
草の根ソフトハウス・Syntax製の同人ディスクマガジン「NVマガジン」で採用されたオリジナルの漢字フォントを利用するドライバです。漢字フォントファイルはNVマガジンに同梱されている FONTNV.KNJ で、VRAMの裏ページ(10000h)へ転送しておきます。
このドライバは、半角文字とJIS第1水準の全角文字が表示できます。
もともと8×16ドットの縦長なフォントですが、横サイズを2倍角して全角文字を形成しています。よって横ドットが粗く表示されます。(全角文字の表示サイズを8×16ドットに指定すれば本来の文字が表示できます)
※ 一部表示できない文字があります。調査中です。
人気声優・椎名へきる嬢の直筆ひらがな(!?)を某マニアがX68000向けにフォントファイル化し、それをMSXのDMシステム2で利用できるようにしたドライバです。へきるファンの方はぜひどうぞ。
このドライバは、半角文字とJIS第1水準、第2水準の全角文字が表示できます。ひらがな以外の文字は、MSX標準の漢字ROMを利用します。
このドライバは、フォントファイルをマッパーRAM及びVRAMのいずれかへ配置して利用します。
※ このドライバはマッパRAM管理の仕様が決定する前に製作されたもので、仕様に準拠していません。
MSX turbo R専用のGUI、MSX-Viewに付属された漢字ROMカートリッジを利用するドライバです。同等のROMが内蔵されているPanasonic製FS-A1GTでも利用できます。
MSX-ViewはMSX turbo R専用のソフトウェアですが、漢字ROMカートリッジ自体は単なるメガROMカートリッジなため、turbo R 未満の機種でも利用できます。
そこで、A to Cさんの著作権フリーな漢字フォント「要町 as MSX-View」のROMイメージデータを「似非RAMディスク」や各種Flashカートリッジ等へ書き込むことにより、MSX-View漢字ROMカートリッジと互換性のあるカートリッジを自作することができ、DMシステム2で漢字表示が可能です。
このドライバは、半角文字、JIS第1水準、第2水準の全角文字が表示できます。ただしFS-A1GTではフォント不足の為、JIS第2水準が表示できません。
※ このドライバはDMシステム2の出荷時に内蔵されています。
※ MSX-View漢字ROMカートリッジは、MSX標準漢字ROMとして代用することはできません。
Panasonicの通信モデムカートリッジ、FS-CM1に内蔵された松下仕様12ドット漢字ROMをDMシステム2で利用するドライバです。
また、同等のROMが搭載されたMSX2の ワープロ・バソコンFS-4600F および FS-CM1の機能が内蔵された FS-A1FM でも利用できます。
このドライバは、半角文字とJIS第1水準の全角文字が表示できます。
※ 松下仕様12ドット漢字ROMは、MSX標準漢字ROMとして代用することはできません。ただし、この漢字ROMが搭載された状態で漢字BASIC(CALL KANJI1 及び CALL KANJI3)を利用すると、松下仕様12ドット漢字のフォントできれいに表示されます。
【細かすぎて伝わらない】松下仕様12ドット漢字ROMとは、パナソニックの一部環境(FS-4600F、FS-A1FM、FS-CM1)に搭載されたROM。画面解像度が低いMSXでは16px角の標準漢字ROMより12px角が重宝する場面あり。また、漢字BASICの_kanji1と_kanji3でこのROMが利用される。文字の見え方が全然違うでしょ? pic.twitter.com/8fSJPVDd6U
— Takashi Kobayashi (@nf_ban) July 20, 2020
HAL研究所より発売されたGUIソフト・HALNOTEのROMカートリッジに内蔵されているオリジナルの12ドット漢字ROMを利用して表示します。
NALNOTEはMSX標準の漢字ROMも搭載しています。このドライバと併用すれば表示サイズに併せて使用フォントを最適化でき、いつでも読みやすい文字を表示できるようになります。
このドライバは、半角文字とJIS第1水準の全角文字が表示できます。
旧DMシステムの漢字表示で利用されていた「ねこいらずフォントファイル(約64KB)」をDMシステム2で利用するドライバです。
フォントファイルをどのRAMへ配置するかによって、利用するドライバが変わります。ドライバはVRAM版、マッパーRAM版の2種類が用意されています。
VRAM版はVRAMの裏ページ(10000h)へ配置しておきます。マッパーRAM版はフォントをマッパーRAMへインストールする必要があり、空きセグメントを4枚(64KB)使用します。
マッパーRAM版は特に海外のMSX2で日本語を表示する用途に適しています。なぜなら、海外ではMSX2の殆どの機種で128KB以上のマッパーRAMが標準的に搭載されていた経緯があり、日本の環境でソフトウェアを構築して海外の機種で動作させると、一般的に64KB以上のRAMを余らせるうえに日本語が表示できない残念な結果に陥るためです。
そこで、余ったRAMの活用方法として日本語フォントの搭載を当クラブは提案いたします。
このドライバで半角文字とJIS第1水準の全角文字が表示できます。
※ ねこいらずは、MSX標準漢字ROMとして代用することはできません。
※ ねこいらずはKICHI氏のフリーウェアです。当クラブはプログラムの改変・商利用の許可を得ています。
アスキーから発売された実用ソフト・「かんたん手帳リフィルくん」に内蔵されたオリジナルの12ドット漢字ROMを利用するドライバです。
このドライバは、半角文字とJIS第1水準の全角文字が表示できます。
※ かんたん手帳リフィルくんは、MSX標準漢字ROMとして代用することはできません。
※ 解析資料は A to Cさんのサイト で入手できます。
DMシステム2で今後対応を検討している周辺機器を紹介します。
MSX標準の漢字ROMと同じ、16×16ドットサイズの漢字フォント(半角文字とJIS第1水準で約96KB)をMSXのマッパーRAMへ常駐し、漢字を表示させるドライバです。
マッパーRAMさえあれば漢字ROMが無くても漢字表示が可能になります。主に海外のMSX2で日本語を表示させる為に利用しようと考えています。
現在、A to Cさんの著作権フリーな漢字ROMイメージが公開されており、フォント調達の問題は解決しましたが、ドライバの開発はまったく進んでおりません。
※ MSX標準の漢字ROMとして代用することはできません。
また、ハードが発掘され次第、順次開発して行く予定です。
詳しくは、ドライバについて の 第2章 ドライバのインストール方法 をご覧ください。
この章では、DMシステム2で動作可能なドライバをユーザー自身が開発・利用するための手順を紹介します。
フォントドライバは、計512バイトで、3部構成です。
フォントドライバの先頭アドレスは、フォントの対応サイズにより変わります。
16×16ドット用 | 7400h~75FFh |
---|---|
12×12ドット用 | 7600h~77FFh |
ヘッダは48バイトで構成されており、以下の用途で用いられます。ヘッダの次には「コールエントリーへのコール先」となる3バイトの羅列が続きます。
フォントドライバは計1つのコールエントリーを構築します。
オフセット | バイト数 | 用途 |
---|---|---|
+ 0 | 40 | ドライバ名称 (漢字可, 空白は20hで埋める) |
+40 | 1 | EOFコード (1Ah) |
+41 | 1 | ドライバ種別番号 (00h:フォントドライバ) |
+42 | 1 | 対応サイズ番号 (1:16x16 2:12x12 3:拡張) |
+43 | 5 | 未使用 |
+48 | 3 | コールエントリー1(FNTDRV)へのコール先 (JP xxxxh) |
ORG 7400h ;16×16用
7400 DEFM 'ドライバ名称を漢字20文字に収めます。 ' ;余白は20hで
7428 DEFB 1Ah ;EOF
7429 DEFB 00h ;フォントドライバの意
742A DEFB 01h ;16×16フォントドライバの意
742B DEFS 5 ;未使用
7430 JP FNTDRV ;フォントの獲得
ORG 7600h ;12×12用
7600 DEFM 'ドライバ名称を漢字20文字に収めます。 ' ;余白は20hで
7628 DEFB 1Ah ;EOF
7629 DEFB 00h ;フォントドライバの意
762A DEFB 02h ;12×12フォントドライバの意
762B DEFS 5 ;未使用
7630 JP FNTDRV ;フォントの獲得
ドライバは、DMシステム2から直接アクセスされるマシン語ルーチン群“コールエントリー”を中継して機能します。
コールエントリーの本体はヘッダ部と合計して512バイト以内に収める必要があります。
本体はドライバ内のどこにでも配置して構いませんが、DMシステム2はドライバのヘッダ部に記載された“コールエントリーへのコール先”を利用するので、このアドレスに対応したメモリへルーチンを配置するようにしてください。
文字コードに対応するフォントを1文字読み出します。ドライバでは、指定されたフォントに対するフォントデータを構築し、各種パ ラメータをシステム内へ転送させます。
[in] | B | 0: 半角 1: 全角第一水準 2: 全角第二水準 |
---|---|---|
DE | シフトJISコード (半角の場合 D←0 E←アスキーコード) | |
[out] | HL | フォント格納アドレス |
D | フォントサイズ:x (半角サイズで) | |
E | フォントサイズ:y | |
B | オフセット (ビット数) | |
C | フォント折り返し幅 (ビット数) | |
ex.1) 18バイトのサイズ, 12×12の全角フォント → D←12, E←12, B←0, C←12 ex.2) 18バイトのサイズ, 6×12の半角フォント(左詰め) → D←12, E←6, B←0, C←12 ex.3) 18バイトのサイズ, 6×12の半角フォント(右詰め) → D←12, E←6, B←6, C←12 |
開発したドライバを一般公開したいのでしたら、ぜひインストーラもご用意ください。インストーラの制作方法については、ドライバについて の インストーラの製作 をご覧ください。
フォントドライバのインストールは、インストール後に インフォメーションエリア の以下のワークを設定してください。
FNTSEL (0300h+174) | ← 1 (16ドット固定) ※12ドットも利用可能なら 0 |
FNTSIZ (0300h+175) | ← 8 (半角サイズ:x) |
FNTSIZ+1 (0300h+176) | ← 16 (半角サイズ:y) |
FNTSIZ+2 (0300h+177) | ← 16 (JIS第1水準, 全角サイズ:x) |
FNTSIZ+3 (0300h+178) | ← 16 (JIS第1水準, 全角サイズ:y) |
FNTSIZ+4 (0300h+179) | ← 16 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0 |
FNTSIZ+5 (0300h+180) | ← 16 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0 |
FNTSEL (0300h+174) | ← 2 (12ドット固定) ※16ドットも利用可能なら 0 |
FNTSIZ+6 (0300h+181) | ← 6 (半角サイズ:x) |
FNTSIZ+7 (0300h+182) | ← 12 (半角サイズ:y) |
FNTSIZ+8 (0300h+183) | ← 12 (JIS第1水準, 全角サイズ:x) |
FNTSIZ+9 (0300h+184) | ← 12 (JIS第1水準, 全角サイズ:y) |
FNTSIZ+10 (0300h+185) | ← 12 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0 |
FNTSIZ+11 (0300h+186) | ← 12 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0 |
FNTSIZ +12,13 | ANKフォントサイズ (0,0のとき非対応) |
FNTSIZ +14,15 | 第一水準フォントサイズ (0,0のとき非対応) |
FNTSIZ +16,17 | 第二水準フォントサイズ (0,0のとき非対応) |
128KB以上のマッパRAMを利用して漢字フォントをフォントドライバから利用するには、フォントデータとフォントドライバをそれぞれ有効にしなければなりません。
この章では、マッパーRAMを利用した漢字表示を実現する手順を紹介します。
フォントインストーラ(FONTINST.OBJ)をロードして、C000hをコールします。
BLOAD"FONTINST.OBJ"
DEFUSR=&HC000
A=USR("フォントファイル名")
Aの戻り値は以下の通りになっています。
フォントの転送が正常に行われた場合は、以下のワークエリアに情報を残します。
ALCSLT (C700h+19) | インストール成功したマッパRAMのスロット |
---|---|
ALCBNK (C700h+20) | 同じく、先頭セグメント番号 (0~255) |
BNKSIZ (C700h+21) | 同じく、セグメント数 (1~255) |
マッパーRAMへ転送したフォントが有効で無い場合は、フォントドライバのインストールを中止してください。
※ フォントが有効か否かはフォントインストーラを実行してみなければ分かりません。フォントをインストールするRAMが明らかに無い場合でも、一度インストーラを実行し、その際出力されるエラーを関知してから処理してください。
※ フォントをインストールするマッパRAMは連続した空きセグメントでないとインストールできません。複数のスロットにまたがることもできません。
マッパーRAMへ対応したフォントドライバをインストールします。
詳しくは、ドライバについて の 第2章 ドライバのインストール方法 をご覧ください。
インフォメーションエリアを書き換えます。書き換える内容は以下の通りです。
MAPSL0 (4300h+109) | ← ALCSLT (C700h+19, マッパのスロット) |
---|---|
MAPBK0 (4300h+110) | ← ALSBNK (C700h+20, 先頭セグメント) |
MAPSZ0 (4300h+111) | ← BNKSIZ (C700h+21, セグメント数) |
FNTSEL (4300h+174) | ← 1 (16ドット固定) ※12ドットも利用可能なら 0 |
FNTSIZ (4300h+175) | ← 8 (半角サイズ:x) |
FNTSIZ+1 (4300h+176) | ← 16 (半角サイズ:y) |
FNTSIZ+2 (4300h+177) | ← 16 (JIS第1水準, 全角サイズ:x) |
FNTSIZ+3 (4300h+178) | ← 16 (JIS第1水準, 全角サイズ:y) |
FNTSIZ+4 (4300h+179) | ← 16 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0 |
FNTSIZ+5 (4300h+180) | ← 16 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0 |
MAPSL1 (4300h+112) | ← ALCSLT (C700h+19, マッパのスロット) |
---|---|
MAPBK1 (4300h+113) | ← ALTBNK (C700h+20, 先頭セグメント) |
MAPSZ1 (4300h+114) | ← BNKSIZ (C700h+21, セグメント数) |
FNTSEL (4300h+174) | ← 2 (12ドット固定) ※16ドットも利用可能なら 0 |
FNTSIZ+6 (4300h+181) | ← 6 (半角サイズ:x) |
FNTSIZ+7 (4300h+182) | ← 12 (半角サイズ:y) |
FNTSIZ+8 (4300h+183) | ← 12 (JIS第1水準, 全角サイズ:x) |
FNTSIZ+9 (4300h+184) | ← 12 (JIS第1水準, 全角サイズ:y) |
FNTSIZ+10 (4300h+185) | ← 12 (JIS第2水準, 全角サイズ:x) ※2水が無い場合は 0 |
FNTSIZ+11 (4300h+186) | ← 12 (JIS第2水準, 全角サイズ:y) ※2水が無い場合は 0 |
※変更した設定を以後引きずる場合は、上記の内容を 0300h+nへ同じように設定(コピー)してください。これを忘れると CALL SYSON を実行したとたん設定が初期化されてしまい、今までの設定が無効になってしまいます。