PC-6001mkIIのマニュアルには、キャラクタコード表が2種類掲載されています。
▶ N6x BASIC リファレンス-付録5:キャラクタコード表
この表には、初代PC-6001ユーザ憧れのベタ塗り四角形(■)や、ガイコツといった文字があるのですが、どういうわけか、マニュアルには表示方法が書かれていません。なんとも残念なことに、BASICのPRINT命令では、2つ目の表の文字を表示することはできず、ほんの少しだけマシン語寄りの知識が必要になります。表示の仕方自体は簡単なので、ざっと説明します。 ただし、理屈は単純ですが、使い方には色々と問題があるので、実用的かどうかは何とも言えません。
予備知識としてスクリーンモード1でのVRAM構造を知っておく必要があります。
といっても、かなりシンプルです。スクリーンモード1では、横40文字、縦に20文字の文字を表示できます。
表示できる文字の種類は、マニュアルの付録ページの通りで256種類です。
これは1バイトで表せますから、40×20=800バイトになります。
また、スクリーンモード1では、1文字単位で、文字の色や文字の背景の色を変えることが出来ます。
PC-6001mkIIのスクリーンモード1では、色の情報を1バイトの情報として持っています。ですので、40×20=800バイトになります。この色情報のVRAM領域はアトリビュートと呼ばれます。
PC-6001mkII(6601以降も同じ)では、これらの文字と色の情報をVRAM上で次のように管理しています。
40×20=800バイトは16進数にすると&H320ですから、&H400-&H320=&H80バイト分の隙間領域は未使用です。自由に使えます。また、スクリーンモード3や4では、上の図とはVRAMの構造がまったく変わります。
例えば、ページ1の場合、画面左上の位置に「A」の文字が表示されている時、VRAMの中身は次のようになります。
C000h | 文字白色+背景が黒:&H0F |
C400h | Aの文字コード:&H41 |
ページ1の画面座標からアドレスの求め方は、次のような式になります。
&HC000+Y*40+X ※文字コードのアドレスの場合は&HC000の箇所が&HC400になります
1文字当たりの色の指定には1バイトを使いますが、文字色に4ビット、背景色に3ビットを使っています。1ビット余りますね?というわけで、これがセミグラフィックキャラクタの指定ビットということになるのです。
例えば、セミグラフィックの文字コード表の紳士っぽい帽子を被った顔(キャラコードC0h)を表示したい時は、次のようにします。
C000h | 文字白色と背景が黒とセミグラON:&H8F |
C400h | 文字コード:&HC0 |
ここまでの説明をまとめると、X,Y座標で指定する時には次のようになります。
面倒だと思いましたか?その通り面倒です。あと、1文字表示するのにPOKE命令 2回はそこそこ重い処理です。
poke命令を2回使わずに、文字コードだけはPRINT命令を使うことも出来ます。通常文字とセミグラフィック文字は表裏一体なので、アトリビュートのビットが1か所違うだけですから。それでも十分な速度を得たいのであればマシン語を使うことになると思います。
制約は多いですが、使い方自体はシンプルですし、魅力的な文字もありますので、ぜひ活用してみてください。