一本行っとく?! フレームバッファ入りSTN液晶! (3 / 3) | |||||||||||
■ フレームメモリへのデータアクセス方法・・・![]() |
それでは、この企画の最重要部とも言うべき フレームメモリへのデータアクセス方法 に触れていきたいと思う。
メモリ単体としての MSM518221へのアクセス方法については データシートにも記載がある のだが、実際に書き込んだデータが どういうイメージで表示されるのか を知らないと、画面設計や表示プログラム作成の役に立たないという 現実が待っている。 そこで、オシロスコープを使って映像データの書き込みタイミングを調べてみたり、ダミーのデータを片っ端から書き込んでみたりと、 色々と試行錯誤を行って調査した結果を記しておきたいと思う。 もしかしたら、意外な見落とし があるかも知れないが、そのときは笑って許してやって欲しいと思う次第だ (^^; もし新たな発見をされた場合、ぜひ BBS の方に書き込んでいただければ幸いに思う。 |
|
![]()
まず、このパネルのデータシート (もどき) というか、カタログのようなもの を見ていると、
解像度は 320×240Dotということが記されている。 ところが、実際にデータを書き込んでみると、横1列は
480Byteマッピング されており、両者のサイズは食い違っている。 また、メモリチップは
2個マウントされており、A/D変換された映像データが分割書き込みされているのだが、その流れを追いかけてみると
横1ライン毎にチップが振り分けられている 仕組みになっている・・・ というのが現実のようだ。
さて、上の図が 調査結果を簡略化した図 になる。 最終的にわかったことは、横2ドットが 3Byteのデータで構成 されているということだ。 最初の 1Byteには、最初のドットの GとRが各4Bit、次の 1Byteには次のドットの Rと最初の Bが各4Bit、次の 1Byteには次のドットで残った Bと Gが各4Bit・・・ で一巡という繰り返しになる。 最終的に 480÷3×2=320 となり、整合性は保たれている。 縦方向の ライン毎のアクセス についても少し記しておこう。 例えば、IC401のメモリに対して初期化実行後データを書き込んで行くと、最初の480Byteまでは Line0に表示される のだが、その次から書き込んだ480Byteは Line2に表示される 結果となる。 ここで、IC402に対して同様の動作を行うと、 最初の480Byteまでは Line1に表示され、その次に書き込んだ480Byteは Line3に表示される ということになる。 このように、縦1Line毎にメモリチップの振り分け が行われており、信号線を切り替えながら 書き込みを行う必要がある。 しかしながら、データ用信号線 D0〜D7は両者共通 のため、 2つのメモリが同じデータで良い という局面では、両チップともイネーブルにして 同時書き込みするという裏技 も使用可能だったりする。 それでは、実際の書き込み手順を箇条書きにして記しておこう。
ということで、表示サンプルをどうぞ (^^) |
|
|
![]()
左上は、以前 BBSへの紹介時や、この記事の冒頭にもサンプルとして使ったイメージだ。
上記で言うところの IC401と IC402に同じデータを書き込んで 2ライン同時アクセスとしており、そのため本来 5×7Dotの文字が やや縦長な表示になっている。 右上のイメージは、このサンプルプログラムを改造し、1ライン毎のアクセスに手直ししたもの。 それに 3つほど 適当な色の Windowを重ね書きしてみた。 さて、画面の左上にある文字をマジマジと見てみると・・・ 今ひとつ鮮明でないような感じに見える。 この記事の冒頭で私が 100%とは言えないまでも 80%は当たっていた と記した理由は、実はこの現象だ。 色々調べてみるうちに判ってきたのだが、どうやら 上下のラインと補間が取られている という状態のようだ。 サンプルの文字部分を拡大したものを左下に貼っておくが、縦方向に同一色が連続している部分は 明るく表示されているが、単一ドット、あるいは横方向連続だけの部分は混合色となって表示されている。 ちなみに、 表示色は R/G/B各 4Bitで、16×16×16=4096色となるが、補間を行った結果を含めると、もう少し表示階調は多くなりそうな感じだ。 |
|
|
![]()
フレームメモリを直接アクセスした場合のみ、この現象が発生するのか念のため確認してみた。
右上のイメージは、1Chip MSXを RGB接続で映してみたもの。 やっぱり縦方向の補間は行われているようだ・・・ 表示の 読み出し側 をこれ以上手をかけて詳細に調べるのは 本末転倒 のような気がするので、とりあえず 補間については気にしない方向 で進めるのが良いと思う次第だ。 横方向、縦方向共に 2Dot毎の座標系とすれば、他の制限も緩和されるので管理もラクチンだしね・・・ あと、これは余談だが、最下段である Line239でも、さらにその下との補間がかかっているようなので、 画面消去時は1Line余分に消す ことも必要だろう (苦笑) さて、ここまででほぼ エキスは出し切れた のかなと思う。 適当な製作例がすぐ出てくれば「言うことなし」なのだろうが、ちょっと追いついていないかも (^^; ちなみに、ここまでの調査は PC9801互換機+DOS版 BASICを使って行ってきたのだが、今更こんなものを紹介しても 役に立たんでしょうからネ・・・ ということで、今後適当なマイコンで もう少し参考になりそうな例 を作ることを お約束だけして、とりあえずこのページを終わることにする。 今すぐ・・・ という訳には行かないだろうが、 気長にお待ちいただければ幸いだ。 |
|
![]() | ||||
2009/02/01 Yutaka Kyotani (公開)
| ||||
|