一般にゲームなどでは、キャラクタ以外の表示物は半角フォントに当てはめ、PRINT文を使うイメージで処理している。こうして変更されたフォントデータも、BASICに戻ってSCREEN命令を行うと、きれいに初期化される。
ここでは、SCREEN命令でも初期化されない方法を試してみた。
日本版、インターナショナル版、韓国版、ブラジル版で、さらにいくつかのマイナーバージョンもある。日本版では、MSX2+以降で平仮名フォントが変更された。ドイツ版は基本的にインターナショナル版だが、ゼロの形が異なる。
半角フォントはMAIN-ROMに入っている。格納アドレスは(0004H)の2バイトに書いてあり、通常は1BBFHを指している。調べた範囲では、韓国版MSX1のみ異なっていた。フォントデータは1文字あたり8バイト、256文字なので計2KB。それを抽出したのが*.FNTファイル(後述)になる。
SCREEN命令は、VRAMに置くパターン内容を、このROM上のデータを使って初期化する。正確には、ワークエリアCGPNT(F91FH)が指す場所にあるデータを使っている。このワークエリアは3バイトで、スロット、アドレス下位、アドレス上位の順に格納されていて、通常は、MAIN-ROMのスロット、BFH、1BHが書かれている。
この機能を利用する。
MSXFONT.ZIP (7,819 bytes)
上記ZIPファイルには、6つの半角フォントファイル(*.FNT)、およびそれをインストールするBASICファイル(MSXFONT.BAS)が入っている。アーカイブを展開して、フロッピのルートにすべて置いておく。そのフロッピをMSXで使う。
フォントの種類は以下の通り。
FS-A1ST.FNT | …… | 日本のMSX2+以降版 |
CF-1200.FNT | …… | 日本のMSX2以前版 |
NMS8220.FNT | …… | インターナショナル版 |
DPC100.FNT | …… | 韓国版 |
EXPERTDP.FNT | …… | ブラジル版 |
HB75D.FNT | …… | ドイツ版 |
MSXFONT.BASの対応機種は、RAM16KB以上のFDD搭載機。
実行すると、以下のような流れになる。
D000H~D7FFHにフォントデータを置くので、まずそこが空いているか調べる。2度目以降の実行では、すでに使用済みとなるため「Are you OK ? (Y/N)」と出るが、Yを入力して実行して構わない。もし最初の実行でこのメッセージが出たら、何かですでに使われているので、やめた方がいい。
次にフロッピ内の*.FNTファイル一覧が表示される。この中から適当なものを選んでファイル名を入力する。
簡単なインジケータが表示され、10秒ほど(MSXturboR時)でインストール完了。画面が一掃され、全キャラクタが表示される。
これ以降、SCREEN命令では、この表示されたキャラクタセットが使われるようになる。
実験用に、1000行以降に、フォントを太らせるルーチンを置いてある。上記でインストール後、GOTO 1000で実行できる。数秒で処理は終わる(MSXturboR時)。終わっても、見た目上の変化はない。ここでSCREEN命令を実行すると、太った文字に変身する。
元には戻せないので、再び任意のフォントをインストールしなおす。
いったんインストールすれば、DOSでもBASICでも往来は自在。
フォントが変わって、海外版の雰囲気を味わえる。独自のフォントを使うこともできる。それだけのツール。ただ、システムに組み込まれてしまうところが、VRAMをいじるだけのものとは違う。
BASICで簡易版として作ったため、問題点もある。
アドレスはD000H~D7FFHに固定している。安全を見越し、かつ簡単にアクセスできるようにするためだが、それなりの無駄エリアが消費されている。D000H以降を使うものはもちろん、大きなプログラムは動かないこともある。
フォントを置くRAMのスロットアドレスを得るのに、FDCのワークエリアにあるRAMAD3(F344H)を使っている。スロットをサーチしてRAMを探すのは、マシン語でないとできない。また、意外と手間でもある。
データエリアを保護するためにHIMSAV(F349H)も書き換えている。CLEAR文で設定されるHIMEM(FC4AH)の最低確保ラインを記録する場所。これもFDCのワークエリアのひとつ。
したがって、FDD搭載は必須になる。
後から気付いたが、じつは文字一覧表示が一文字分左にずれている。
左上角がCHR$(1)で、その上の空行左端にCHR$(0)、右下角の一文字左がCHR$(255)のカーソルになる。見た目だけで実害はないので、そのままとしておく。
日本版MSXには、漢字モードがある。このモードは、VDPのグラフィックモードを使い、漢字ROMのフォントを使っている。そのため、この「フォントいじり」の効果は反映されない。
韓国版にもSCREEN9を使ったハングルモードがあり、同じように接続されたハングルROMのフォントが使われるはずなので、これにも効果は反映されないと思われる。
いずれも、ANKモード、SCREEN0ないしSCREEN1に戻れば、問題はない。
映像は、ケンコー製DVS2500HDでDELL製U2711画面を直接撮影。AviUtlで編集。
ロード、実行、各種フォントのインストール、太文字化効果などを実演。