【 Making「ちび文字PUT」 】 |
---|
Home | PC-6001mkII | Program | etc |
関連リンク | ●ちび文字PUT ●ちび文字PUT mkII |
---|
更新日:2012/08/18 作成日:2012/07/26 「ちび文字PUT」の作成過程を以下少しずつ書き綴っていこうと思います。 |
2011/02/07〜12:色付け | |||||||||||||||||||
次に、左半分が白,右半分が灰になるように色を分けて表示する処理を追加する。 まず、mkIIで表示する色を2進数化する。色1の黒が0000B, 色2の青紫が0001B … というように2進数にすると、色8の灰は0111B, 色16の白は1111Bとなる。 これを2ビットで分割する。なぜ分割するかというと、前半の2ビットと後半の2ビットは異なるアドレスに書き込むからだ。 mkIIのグラフィック画面(16KB)は、内部的に8KBのプレーン2つに分割されている。 下位2ビットをプレーン1に、上位2ビットをプレーン2に書く事で、下表のように対応する色が画面表示される。
つまり、「月」のキャラクタを右半分が白、左半分が灰になるように表示しようと思ったら、以下のようなプレーンの重ね合わせになる。
プレーン2では、ビット7,5,3,1が必ず0となる。論理演算で考えると、プレーン1に出力する8ビットデータと01010101BとのANDを取る事で、プレーン2に出力する8ビットデータとなる。 ここまで出来れば、あとは「でか文字PUT」の時に作った文字列受け渡しの処理を組み合わせるだけだ。 …おっと忘れてた。今回は縦が25行表示になるので、通常のLOCATE文ではY座標が20以上だと範囲エラーになるんだった。まあ、ここは「LOCATE@」という命令を作るか。 LOCATEの後ろに「@」があれば、その後に続く2つの数字をX座標とY座標として設定する。範囲外の値だったら、とりあえず0にしておくか。 こうして、「ちび文字PUT」の初期バージョンができた。 |
2006/02/06:データ構造 | |||||||||||||||
さて、キャラクタも作成したし満足だ...ではなくて、表示方法を考える事にする。 まず、フォントのファイルサイズはなるべく小さくしたい。まず色は表示処理時に付ければ良いので、フォントデータに色情報は不要だろう。 ドットの情報も、4x8=32bit、つまり1文字で4バイトあれば事足りるだろう。 データ構造だが、1バイト当たり横4ドットx2行とする。 例えば「月」のキャラクタでいうと、 ■A■ ■B■ ■C■ ■D■ ■E■ □F□ □G□ ■H■ ■I■ ■J■ ■K■ ■L■ ■M■ □N□ □O□ ■P■ ■Q■ ■R■ ■S■ ■T■ ■U■ □V□ □W□ ■X■ ■Y■ □Z□ ■a■ ■b■ □c□ □d□ □e□ □f□なので、1バイト目は「ABCD EFGH」→「1111 1001」、にはしなかった。 もちろん、データ形式としてはこの方がシンプルで良いのだが、これだと「ABCD」→「AABBCCDD」と横倍にするときの処理が複雑になる分遅くなる。 では、結局どうしたか?今回は「AE BF CG DH」→「11 10 10 11」とした。これだと、横倍の処理が以下のようにシンプルになる。
これを元に、キャラクタデータを作成した。 |
2006/02/05:キャラクタ作成 |
マニュアルのキャラクタコード表と見比べつつ、ペイントブラシにて1つずつ4x8キャラを作っていく。 心配だったひらがなもそれなりに見れるようになった...気がする。「秒」やトランプマークは流石に無理があるけど、この辺りは目を瞑ってもらうことにしよう。 一通り描き終わってから のりさん考案のフォントと若干違うことに気づいたが、まあいいか。このままいこう。 |
2006/02/xx:命令のっとり |
処理方式は、「でか文字PUT」と同様にする。 大まかにどのような処理にしたかというと、BASICインタプリタで「PRINT」「LOCATE」を実行する処理へのポインタを書き換える事で、処理を一部乗っ取っている。 BASICの各命令に対応したポインタ群より、FAA3H-FAA4H(PRINT),FA8BH-FA8CH(LOCATE)の値を、今回作成するプログラムの開始位置に設定する。プログラム内で次の1文字のキャラクタを見て、「@」以外の場合は、本来のPRINT,LOCATEの処理にジャンプする。 プログラム内では、BIOSルーチンを利用して値の切り出しを行い、この値を使用して処理を行う。 072AH(次の文字取り出し?), 0DE4H(次の値取り出し?), 0B09H(文字列の展開?), 0AFAH(???), 31FCH(文字列の取り出し?)を使っているが、正直BIOS内の細かい処理内容はよくわかっていない。 という事で、プログラムは後回しにしてまずは文字キャラクタを作っていくか。 |
2006/02/xx:きっかけ |
きっかけは、のりさんのHPだった。 当時のりさんが作成中だった某ゲーム、着々と出来上がる画面やキャラクタに感嘆としていたのだが、とある日に追加されたアイテム名表示が個人的に印象に残った。 アイテム名は横4ドットのフォントを使っているのだが、フォントの右半分を灰色にしているため、文字同士がくっつく位に表示してもそれぞれの文字が認識できる。 ひょっとして、この手法を使えばPC-6001mkIIでも擬似的に40桁x25行表示が出来るのではないか? よし、試してみよう! |
− | PC-6001mkII | − |