PC-G850用ひらがなPRINT命令 HIRA-PRINT
- ◆ひらがな用PRINT命令
- PC-E500シリーズでは、システムのフォントを置き換えることができるそうです。これは私が高校時代のときに思い知らされた事実で、高校の教材用として販売されているPC-E200シリーズには無い得意技です。これを利用すると、システムで表示される全ての文字がひらがなになるとかならないとか…
- 高校当時でも、ポケコンは学習よりもゲームに使われることが多く、RPGを作っていた仲間にグラフィック関連のプログラムを開発するのが私の役目でした。いくつかのマップ圧縮プログラムを提供したあとにPC-E500のひらがな表示について知り、そのフォントだけを使ってPC-G850に移植したのがHIRA-PRINTの始まりです。
- いくつかのバージョンアップを重ねて現在に至りますが、ここで注目する機能をピックアップします。
- 呼び出しの手軽さ
- PC-G850シリーズはカスタムコマンドの追加はできませんので、プログラムの呼び出しにはマシン語をCALLします。しかし、表示する文字列はメモリにPOKEするのではなく、指定された文字列変数に代入するだけです。変数のアドレスは自動的に検索され、PRINT HI$などと指定するのと同じような感覚で手軽に使用できます。
- ワークエリアの読み書きでシステムと完全に連携
- LOCATE命令で表示する位置の指定が可能です。また、PRINT命令の後に指定するセミコロンの動作にも対応しているので、PRINT命令と組み合わせて使用できます。
- ひらがなとカタカナを混ぜて表示が可能
- ひらがなとカタカナを交互に表示するような場合、CALLとPRINTを交互に使い分けるような煩わしさがありません。ひらがなとカタカナを切り替えるには、表示したい文字列の中に変換のON/OFFを切り替える文字を書いておくことで制御できます。
- フルアセンブラで動作が高速
- プログラムはアセンブラで記述されているため、高速に動作します。
- おまけフォント
- 微妙に気になるチルダの位置を修正して表示します。(~から~に変換)
- -なのかーなのか分からないカタカナ横棒のフォントを変更します。
- 「」は囲いが浅い(?)ので1ドット深くしてある。(見比べてください)
- ざっとこんなものでしょうか。
- 甘い言葉には罠があるということで、制限機能というか制約上仕方ないところも書いておきます。
- プログラムがでかい
- プログラムの本体サイズが270バイト、フォントデータが320バイトあります。もう少しプログラムを小さくしようと思いましたが、劇的に小さくすることはできないため妥協点に到達しています。
- 互換性の問題
- ワークエリアの解析にPC-G850を使っているため、後継機の850Sや850V、今まで発売されてきたG815などに使えるかどうかはわかりません。ワークエリアの位置が変わってもその内容まで変わることは少ないと思うので、アドレスの解析をすれば移植は可能だと思います。
- 複数の変数への対応
- 文字列の受け渡しに使う変数は1つしか使えません。当然配列を指定するときは、0番しか使えません。したがってBASICの実行中に変数を変えたい場合には、変数の検索部分をPOKEするしかありません。そこまでするプログラムを書くならば、BASIC側のプログラムを作り直したほうがよっぽど効率的だと思います。
- 変換文字列に変数を渡す
- 「PRINT HP$,MP$」みたいに複数の変数を一度に表示したいというのはできません。あくまでも文字列変数をそのまま変換するだけです。これについては、255文字の配列を確保することでカバーできると思います。
- C言語で使いたい
- 無理です。コンパイルした時点でメモリ上のデータがどうなっているかわからないためです。C言語で使いたい場合は、特定のメモリエリアにpoke(3)命令で書き込むようにアセンブラの方も変更しなければいけません。
- ぱっと思いつくものはこんなものでしょうか。
- まぁ、データの受け渡しに普通の変数が使えて、変数もメモリの中から勝手に検索してくれて、BASICのほかの命令と連携して使えるぐらいの機能があればそれなりに役に立つと思います。(超投げやり)
- ◆プログラムの使い方
- こちらがプログラムの本体になります。
- アセンブラで書いてあるので、ポケコンに転送した後でアセンブルしてください。必要なユーザエリアは初期では0090H~02DDHになっています。また、プログラム本体が使用するワークエリアはありません。全てレジスタとスタック上で処理をします。
- これから先の使用説明は、プログラムに変更を加えていないことを前提として解説します。
- 文字列を格納する変数
- 文字列を格納する変数は「DIM HI$(0)」で確保した変数を使用します。「DIM HI$(0)*255」などとした時でも正常に文字数を読み取るので、動作に支障は出ません。HI$(0)に文字列を書き込み、アドレス 90Hをコールするとカタカナをひらがなに変換して表示します。
-
- 変数にカタカナ以外の文字が入っていた場合
- カタカナ以外の文字は基本的に変換せずに表示します。
- 影響のある文字は'ー'、'「'、'」'、'~'(チルダ)です。
- 'ー'はひらがな表示がONの場合に'-'と見分けがつくようにフォントを変更します。
- '「'、'」'はひらがな表示がONの場合に囲いの部分を1ドット深くしてあります。
- チルダは文字列の中の位置や書き方で異なる動作をします。
- 文字の中にチルダが入っていた場合は、それ以降のひらがなの変換をON/OFFします。
「アイ~ウエ~オ」という文字列が入っていた場合は「あいウエお」と表示します。
- チルダが文字列の最後にある場合は、PRINT命令の最後に付くセミコロンと同じ動きをします。
- 文字列中に「~~」とチルダが2回続くと、実際のチルダを表示します。このとき、ひらがな表示がONの場合にチルダの表示位置が1ドット下がります。
- 文字列中に「~ー」とチルダの後にカタカナ横棒があると、変換のON/OFFにかかわらず、1ドット下のチルダが表示されます。
- 文字列中に「~~~」とチルダが複数回続くと、チルダの表示が優先されます。具体的に「ア~~~ア」の時は「あ~ア」、「ア~~~~ア」の時は「あ~~あ」、
- では実際にいじめてみましょう。
- 「ハ~ア~ア~~~アー~~~ア~~~~アー~ア~ーン~」では「はアあ~ア-~あ~~あーア~ン」と表示された後にセミコロン指定が効きます。分かりますか?こんなややこしい事するなら、何度かに分けて表示させてください(笑
- どうしても優先順位を知る必要があるなら、プログラムを見て勉強してください。
- ◆サンプルプログラム
- おなじみ「n進 演算」のひらがなバージョンです。このサンプルでは全てのPRINT命令を置き換えています。
-
- ◆プログラムの変更ポイント
- プログラムの中でいくらかカスタマイズできる部分をまとめておきます。
- スタートアドレス(40行目)
- プログラムの開始アドレス。基本ですが、「ORG 90H」を他のアドレスに変えると、そこがスタートアドレスになります。
- 検索する変数名(21、22行目)
- プログラムが検索するBASICの変数名です。$記号無しの2文字を指定します。
- 検索する変数タイプ(23行目)
- プログラムが変数を検索する時に、単純変数を探すのか配列を探すのかを指定します。初期ではHI$の配列変数0番です。
皆様もこのプログラムを使って楽しいゲームライフをお送りください。(爆
|