since 2007.8 by K-ichi

MSXの半角フォントをいじってみた。

一般にゲームなどでは、キャラクタ以外の表示物は半角フォントに当てはめ、PRINT文を使うイメージで処理している。こうして変更されたフォントデータも、BASICに戻ってSCREEN命令を行うと、きれいに初期化される。

ここでは、SCREEN命令でも初期化されない方法を試してみた。

MSXは世界市場で売られていたため、いくつかの仕様がある。funet.fiから受け継がれたアーカイブサイトからデータをもらって見てみたところ、フォントは大きく4種類が確認できた。
日本版、インターナショナル版、韓国版、ブラジル版で、さらにいくつかのマイナーバージョンもある。日本版では、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で編集。
ロード、実行、各種フォントのインストール、太文字化効果などを実演。

0 件のコメント:

コメントを投稿

.

関連記事


この記事へのリンク by 関連記事、被リンク記事をリストアップする」記事

ブログ アーカイブ