フォントへのこだわり 【問題解決済】 [逸話]
2009/11/09 追記
2009/11/21 記述の間違いを訂正
今でこそフォントを表示するのにビットマップが使えるので複数のフォントを大きさを変えて表示できますが、レトロPCではキャラクタROMに内蔵されたフォントデータをキャラクタジェネレータが読み出して表示していたので、フォントの種類も大きさも一つだけというのが当たり前でした。
中にはフォントROMを複数個持っていて切換えができる機種や、データの変更が可能なPCG(プログラマブル・キャラクタ・ジェネレータ)を装備している機種もありましたが…。
テキストV-RAMに文字を表示する時は、V-RAM領域に表示したい文字のコードを書き込めば、後はキャラクタ・ジェネレータとCRTCが仕事をしてくれるので表示に手間が掛かることはありません。
ですが、これではシステムで用意されたフォント以外のものを表示することはできません。
PCGを持たない機種で用意されているフォント以外を表示させたい場合は、あらかじめ用意しておいたフォントデータをグラフィックV-RAMに表示させる必要があります。
これは現行のOSが採用しているビットマップ方式のフォント表示と原理的には同じです。
Muse Software から発売された Apple II 用のワープロソフト「Super-Text」が、斜体やボールド体のフォントを表示するために独自のフォントを使用していた事に因んで、雑誌 ASCII に掲載されたアップル用のBASIC拡張ソフトに因んで、この手法は「Super-Text」と呼ばれていました。
2009/11/21 記述の間違いを訂正
過去の亡霊さん、間違いのご指摘ありがとうございます。
ちょっと横道にそれてしまうのですが、ネット上には情報が少ないので TL/1 に関する話を…。
TL/1 は GAME と同じく大西博氏によって作られた言語で、Algol-Pascal 系の1パスコンパイラです。
月刊ASCII 誌上で発表され、様々な機種に移植されました。
変数は全て1バイトサイズなので255以上の数値を扱うにはテクニックが要ります。
コンパイルは高速で、生成されたコードはランタイムルーチン無しで実行できます。
KCB では PC-8801 のゲームを開発するための言語として、PC-8001 用の TL/1-PC を独自拡張して PC-DOS とグラフィック機能を扱えるようにした「TL/1-88G」を使用していました。
GAME 言語も使用していましたが、その話はまた別の機会に…。
TL/1-88G - StartUp (PC-8801)(1983)(KCB)
TL/1-88G - text sample
この(↑)画像は下で紹介する PC-8801 用キャラクタエディタのソースコードの一部です。
オリジナルの TL/1-PC と違い、BASIC の REM 文を使用しない方法でテキストが書かれています。
ゲームの中で使用されるフォントやキャラクタの制作用には、それぞれの機種用にキャラクタエディタが用意されているのですが、今回は TL/1-88G で作られた PC-8801 用のキャラクタエディタを使用してフォントを紹介します。
ASCII コードのフォント領域以外にキャラクタを定義すると、キャラクタを表示させることもできます。
とある没ゲームのフォントとキャラクタ
ゼビフォントとナムコキャラクタ
京都・寺町の電気店街を南に抜け、河原町通りと交わる辺りに一軒の画材店がありました。(今でもあるはず)
フォントのカタログやインレタを買うために、よく通ったものです。
今から思えば、高校/大学生位の年齢のがゾロゾロとやって来てインレタを物色する様子は、さぞ異様な光景だったでしょうね(笑)
Letraset - Instant Lettering: COUNTDOWN
KCB の中でも K 氏は特にフォントへのこだわりが強く、レトラセットの新作フォントが発売されると、キャラクタエディタを使って気に入ったフォントをデジタル化していました。
K 氏のこだわりが最も強く現れているのが「LOGIN」誌上で発表された「Zalbar 2784」。
Zalbar 2784 (MSX)(1985)(ASCII)
「Motter Ombra」というフォントが使用されています。
当時のプラットフォーム型のゲームは、キャラクタエディタで作成したフォントとキャラクタを「Super-Text」で表示させ、TL/1 や GAME 言語でゲームのロジックを組み、表示をコントロールすることで成り立っていました。
…と、ここまで書いて肝心な事を覚えていないのに気付きました^^;
TL/1 でテキスト画面をクリアしてテキストを表示するには、
write(0:ascii(12),"Kyoto Computer Brains")
…と書けばいいのですが、
「Super-Text」でグラフィック画面にフォントで表示する場合は、
write(1:"Zalbar 2784")
…でよかったかなぁ?
PC-DOS へコマンドを送る時は、
write(9:"load,color pattern",crlf)
…と書けばOKなのは覚えているんですがね。
「TL/1 でテキストを編集して確認するか…」
「あれっ、TL/1-88G でソースコードの編集ってどうするんだっけ?(汗)」
オリジナルの TL/1-PC だと BASIC の REM 文だったので、BASIC のスクリーンエディタで編集すればいいのですが、独自拡張されているため TL/1 関係の資料が役に立たないという状況に陥ってます(苦笑)。
ソースコードを編集して確認できないので、肝心の「Super-Text」表示が曖昧な記述になってしまいました^^;
お~い、覚えてたら教えてくれ~ >元KCBメンバー
20数年の月日は無常にも記憶を奪って行きました。
ちゃんと分かり次第、きちんと書き直します…スミマセン <m(_^_)m>
2009/11/09 追記ここから
ソースコードが編集できなくて困ってた件は、単なるシステムの破損でした^^;
別のシステムで起動して、
write(1:"Zalbar 2784")
…と書けば、ちゃんとグラフィック画面に「Super-Text」で描画されました。
TL/1 super-text test
ソースコード中の write(1:"~") は、Super-Text へ、write(9:"~") は PC-DOS への出力となっています。
サンプルのコード中には記述がありませんが、テキスト画面への出力には write(0:"~") と書けばOKです。
2009/11/09 追記ここまで
2009/11/21 記述の間違いを訂正
今でこそフォントを表示するのにビットマップが使えるので複数のフォントを大きさを変えて表示できますが、レトロPCではキャラクタROMに内蔵されたフォントデータをキャラクタジェネレータが読み出して表示していたので、フォントの種類も大きさも一つだけというのが当たり前でした。
中にはフォントROMを複数個持っていて切換えができる機種や、データの変更が可能なPCG(プログラマブル・キャラクタ・ジェネレータ)を装備している機種もありましたが…。
☆
テキストV-RAMに文字を表示する時は、V-RAM領域に表示したい文字のコードを書き込めば、後はキャラクタ・ジェネレータとCRTCが仕事をしてくれるので表示に手間が掛かることはありません。
ですが、これではシステムで用意されたフォント以外のものを表示することはできません。
PCGを持たない機種で用意されているフォント以外を表示させたい場合は、あらかじめ用意しておいたフォントデータをグラフィックV-RAMに表示させる必要があります。
これは現行のOSが採用しているビットマップ方式のフォント表示と原理的には同じです。
2009/11/21 記述の間違いを訂正
過去の亡霊さん、間違いのご指摘ありがとうございます。
☆
ちょっと横道にそれてしまうのですが、ネット上には情報が少ないので TL/1 に関する話を…。
TL/1 は GAME と同じく大西博氏によって作られた言語で、Algol-Pascal 系の1パスコンパイラです。
月刊ASCII 誌上で発表され、様々な機種に移植されました。
変数は全て1バイトサイズなので255以上の数値を扱うにはテクニックが要ります。
コンパイルは高速で、生成されたコードはランタイムルーチン無しで実行できます。
KCB では PC-8801 のゲームを開発するための言語として、PC-8001 用の TL/1-PC を独自拡張して PC-DOS とグラフィック機能を扱えるようにした「TL/1-88G」を使用していました。
GAME 言語も使用していましたが、その話はまた別の機会に…。
TL/1-88G - StartUp (PC-8801)(1983)(KCB)
TL/1-88G - text sample
この(↑)画像は下で紹介する PC-8801 用キャラクタエディタのソースコードの一部です。
オリジナルの TL/1-PC と違い、BASIC の REM 文を使用しない方法でテキストが書かれています。
☆
ゲームの中で使用されるフォントやキャラクタの制作用には、それぞれの機種用にキャラクタエディタが用意されているのですが、今回は TL/1-88G で作られた PC-8801 用のキャラクタエディタを使用してフォントを紹介します。
☆
ASCII コードのフォント領域以外にキャラクタを定義すると、キャラクタを表示させることもできます。
とある没ゲームのフォントとキャラクタ
ゼビフォントとナムコキャラクタ
☆
京都・寺町の電気店街を南に抜け、河原町通りと交わる辺りに一軒の画材店がありました。(今でもあるはず)
フォントのカタログやインレタを買うために、よく通ったものです。
今から思えば、高校/大学生位の年齢のがゾロゾロとやって来てインレタを物色する様子は、さぞ異様な光景だったでしょうね(笑)
Letraset - Instant Lettering: COUNTDOWN
KCB の中でも K 氏は特にフォントへのこだわりが強く、レトラセットの新作フォントが発売されると、キャラクタエディタを使って気に入ったフォントをデジタル化していました。
K 氏のこだわりが最も強く現れているのが「LOGIN」誌上で発表された「Zalbar 2784」。
Zalbar 2784 (MSX)(1985)(ASCII)
「Motter Ombra」というフォントが使用されています。
☆
当時のプラットフォーム型のゲームは、キャラクタエディタで作成したフォントとキャラクタを「Super-Text」で表示させ、TL/1 や GAME 言語でゲームのロジックを組み、表示をコントロールすることで成り立っていました。
…と、ここまで書いて肝心な事を覚えていないのに気付きました^^;
TL/1 でテキスト画面をクリアしてテキストを表示するには、
write(0:ascii(12),"Kyoto Computer Brains")
…と書けばいいのですが、
「Super-Text」でグラフィック画面にフォントで表示する場合は、
write(1:"Zalbar 2784")
…でよかったかなぁ?
PC-DOS へコマンドを送る時は、
write(9:"load,color pattern",crlf)
…と書けばOKなのは覚えているんですがね。
「TL/1 でテキストを編集して確認するか…」
「あれっ、TL/1-88G でソースコードの編集ってどうするんだっけ?(汗)」
オリジナルの TL/1-PC だと BASIC の REM 文だったので、BASIC のスクリーンエディタで編集すればいいのですが、独自拡張されているため TL/1 関係の資料が役に立たないという状況に陥ってます(苦笑)。
ソースコードを編集して確認できないので、肝心の「Super-Text」表示が曖昧な記述になってしまいました^^;
お~い、覚えてたら教えてくれ~ >元KCBメンバー
20数年の月日は無常にも記憶を奪って行きました。
ちゃんと分かり次第、きちんと書き直します…スミマセン <m(_^_)m>
2009/11/09 追記ここから
ソースコードが編集できなくて困ってた件は、単なるシステムの破損でした^^;
別のシステムで起動して、
write(1:"Zalbar 2784")
…と書けば、ちゃんとグラフィック画面に「Super-Text」で描画されました。
TL/1 super-text test
ソースコード中の write(1:"~") は、Super-Text へ、write(9:"~") は PC-DOS への出力となっています。
サンプルのコード中には記述がありませんが、テキスト画面への出力には write(0:"~") と書けばOKです。
2009/11/09 追記ここまで
TL/1懐かしいですなぁ
ちょっと箱は潰れてますけど、我が家にもいらっしゃいますよ(^-^)
GAMEとかdB-Basicとかも愛用してました(^_^)v
携帯からだとnice!押せないや(;^_^A
by しおんパパ (2009-10-15 08:03)
しおんパパさん、コメント & nice! ありがとうございます。
GAME はあまり使いませんでしたが、TL/1 はよく使いました。
使った事はないのですが、WICS とかもありましたね。
ディスクシステムと共存できるようになっていれば、ASCII 誌読者だけでなく、もっと普及していたんじゃないかと思います…ちょっと残念。
by Thunderbolt (2009-10-15 10:34)
初期の市販MSXゲームには、デフォルトのフォントをそのまま使っているものも多かったのですが、だからこそ、少しでもフォントに手を加えている作品は、ずいぶん見栄えがしたものでした。
MSXはPCGが使えたので、VRAMのパターンネームテーブルを書き換えるだけで、容易に任意のフォントを使うことができました。しかし専用のキャラクターデータを準備する必要があった―その分入力するデータが増えるのでプログラムが長くなる―ため、デフォルトのフォントを数式的に加工して、太らせたり斜体にしているものが多かったです。凝ったフォントは8X8ドットの芸術品でしたね。
by 本名荒井 (2009-10-15 22:17)
本名荒井さん、コメントありがとうございます。
MSX は 8×8 ドットですが、PC-8801(640×200) だと縦長のピクセルなので 16×8 ドットを1文字分として使っていました。
データ量を切り詰めたい場合は、8×8 ドット分のデータを用意し、横方向に伸張させて表示させたりしてました。
>凝ったフォントは8X8ドットの芸術品でしたね。
フォントの芸術的価値は理解して貰えない事が多いですね。
ゲームとフォントが相性良くマッチしていると、それだけでやりたくなってしまいます(笑)
by Thunderbolt (2009-10-16 00:28)
FM-7ではSYMBOL文が使えましたので、
FORI=0TO2:SYMBOL(0+I,0),"ABC",2,1,7:NEXT
これでアタリフォント(ナムコフォント)っぽいものを表示させることができました。
ただし描画が遅いので、あまり実用にはなりませんでしたが。
今ではエミュレーターのROMを直接書き換えて、任意のフォントを使えるようにもなりましたね。
by Laver (2009-10-16 21:29)
本も持っていたのに
打ち込みが面倒で買ったテープ版別冊ログインで、
「Zalbar 2784」を遊びました。
すごく懐かしいです。
by どらお (2009-10-17 09:41)
Laverさん、コメントありがとうございます。
同じキャラクタを、ずらして3回書く事でボールド体を表示させる訳ですね。
PC-8801 でも、
FOR I=0 TO 2
PUT(0+I,0),KANJI(&H41),PSET,7,0
PUT(8+I,0),KANJI(&H42),PSET,7,0
PUT(16+I,0),KANJI(&H43),PSET,7,0
NEXT
で、同様の事ができますが、1文字ずつしか PUT できないので、SYMBOL 文の方がまだ実用的です。
>今ではエミュレーターのROMを直接書き換えて、任意のフォントを使えるようにもなりましたね。
暇があればフォントROMを書き換えて、ゼビウス仕様の PC-8801 にしましょうかね。
あ、HAL8999 さんのページにそんなのがあったような(笑)
by Thunderbolt (2009-10-17 18:32)
どらおさん、コメント & nice! ありがとうございます。
「Zalbar 2784」のご購入ありがとうございます。
K 氏に代わってお礼申し上げます。
Zalbar… の開発時はアルバイトが忙しく、クラブに顔を出せなかったので、開発裏話を書けないのが残念です。
by Thunderbolt (2009-10-17 18:41)
Super TextはもともとはASCIIに掲載されたアップル用のBASIC拡張ソフトでワープロじゃないですよ。当時アップルがあこがれだったのでよく覚えてます。
by 過去の亡霊 (2009-11-19 18:02)
過去の亡霊さん、コメントありがとうございます。
ご指摘ありがとうございます。
友人から「『Super-text』というワープロがある」と聞いていたもので、ワープロだと思い込んでおりましたA^^;
早速修正させていただきます。
不躾で申し訳ないのですが、よろしければ該当記事の掲載年月を教えていただけませんでしょうか?
よろしくお願いいたします。
by Thunderbolt (2009-11-20 13:26)