2017年5月28日日曜日

文字コード沼

 マイコンでフォントを扱おうと思っていて、どうやるのが楽かなーって。
 既存のビットマップフォントを流用するのが一番楽なんだろうけど、ほとんどの文字はShift JIS(あるいはJIS)で、ソースコードをUTF-8に移行している身としてはいちいちUnicodeにして、更にShift JISにして、場合によってはそこから更にJISに変換して、という、マイコンで行うにはかなり面倒な処理が必要。
 ということで、Unicodeで一発で行けないかな、と思ってC#でUnicodeの一覧を出して、SJISの全角文字に含まれている文字は背景を赤に塗ってみた。


 傾向としては最初の方に記号やひらがなが有り、途中に漢字、最後の方に全角アルファベット、という感じらしい。日本の漢字の前には中国の漢字があり、日本語の後ろにはハングルがあるらしい(いわゆるCJKの並び)。
 漢字は21000文字くらいが収録されていて、1byte8pxのビットマップだと、656KiBが必要。他に記号やら色々あるので、700kB前後といったところか。
 STBee F4miniはFlashが1MBあるので、日本の漢字と記号だけなら全部収まりそう。とはいえ、プログラムに使う領域が無くなるのでは本末転倒なわけで。


 とりあえずSJISに含まれる文字をUnicodeの2バイトとビットマップの32バイトのテーブルにして、UnicodeでソートしてROMに格納、二分探索でフォントを探す、みたいな流れになるのかなぁ。でもSJISの文字をすべて持つならUnicodeからIndexに変換するテーブルも持ったほうが早いかも。これならUTF-8の文字列からUnicodeにデコードし、それをテーブルのIndexとして使い、BitmapテーブルのIndexを得る、みたいな流れ。これだと一番重い処理はUTF-8のデコードで、あとは簡単なポインタの演算で済みそう。ただしIndexテーブルを全部持つと128KiBで、J以外のCKを除けば64KiBくらいかな。結構でかい。が、1MiBのマイコンならよゆー。
 

 どうも今やってるヤツが8bitコンピュータとか16bitコンピュータのグラフィック周りの再発明らしくて、その頃の資料がほしいけど、30年近く前のマシンなのか。当然インターネットもないような時代なので、リアルタイムで試行錯誤してるブログやらがネットに漂ってるわけがない。インターネットにはインターネットが普及して以降の情報しか残らないのだッ。タイムマシンはタイムマシンが出来て以降の時代にしか戻れない、みたいな話(?)。

 STM32F4の性能だとファミコンからスーファミ、ゲームボーイあたりの計算能力は余裕で超えてるけど、LSIで高速化してるような部分も全部ソフトでやる必要があるし、ROMをソフトウェアエミュレーションするのも大変だろうから、FPGAのようなモドキを作るのは大変そう。
 秋月で売ってる単色のメモリ液晶でテトリスくらいなら余裕の処理能力だろうけど、それならSTBee Miniだって十分足りるだろうし。となるとPSP液晶か、という流れだけど、そこまで来るとF4でもメモリが足りない。4倍でスケーリングしてRGB8色かBW4色あたりならできるんだろうけど、それもなぁ。
 そっちの方もやってみたいけど、手持ちのPSP液晶、なんか逆接して壊したような記憶があるので、ジャンク覚悟であの配線量を作るのはちょっと嫌だなぁ。


/*
 はいふりOVA、何日か前に届いて見ました。良かった。良かった、くらいの感想しか出てこないほんわかした感じの話。コメンタリーも良かったよ。
 実在する風景がかなり出てきているようだけど、現地から一番遠い両極端の片側に住んでる身としては全然関係ないし。。

 はいふりのキャラでバトルシップをコミカライズした薄い本が読みたいなーと思う今日このごろ。映画のキャラの再配置ですべてできるわけではないけど、かなりいいとこいけそうなんだよね。NOAAのデータは情報好きのタブを使うとか、対物ライフルは砲術科に撃たせるとか。
 あとネイビーミッションっぽい感じでイージスシステムを指揮するゲームをやりたい。久しぶりにネイビーミッションをやったけど、航空機が出てくると見張員の報告がうるさくて状況認識が正常にできなくなる。でも戦闘指揮が確立する前はあんな感じななろうなぁ。
 戦略シミュレーションとかは考える範囲が広すぎて大変なので、戦術シミュレーションとか作戦シミュレーションみたいなカテゴリのゲームが出てこないかな。Arma3は作戦指揮ができるけど、でも自分で指揮してても結局AIを後方において自分が前に出てるし、そもそも作戦指揮もできてない可能性が。。
*/

0 件のコメント:

コメントを投稿