一本行っとく?! フレームバッファ入りSTN液晶! (3 / 3)

■ フレームメモリへのデータアクセス方法・・・


それでは、この企画の最重要部とも言うべき フレームメモリへのデータアクセス方法 に触れていきたいと思う。
メモリ単体としての MSM518221へのアクセス方法については データシートにも記載がある のだが、実際に書き込んだデータが どういうイメージで表示されるのか を知らないと、画面設計や表示プログラム作成の役に立たないという 現実が待っている。 そこで、オシロスコープを使って映像データの書き込みタイミングを調べてみたり、ダミーのデータを片っ端から書き込んでみたりと、 色々と試行錯誤を行って調査した結果を記しておきたいと思う。 もしかしたら、意外な見落とし があるかも知れないが、そのときは笑って許してやって欲しいと思う次第だ (^^;
もし新たな発見をされた場合、ぜひ BBS の方に書き込んでいただければ幸いに思う。


▲ MSM518221への書き込みデータマッピング


まず、このパネルのデータシート (もどき) というか、カタログのようなもの を見ていると、 解像度は 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つのメモリが同じデータで良い という局面では、両チップともイネーブルにして 同時書き込みするという裏技 も使用可能だったりする。

それでは、実際の書き込み手順を箇条書きにして記しておこう。
  • メモリを初期化、アドレスポインタをリセットする。
    IC401のみ: IE1=L、IE2=L、WE1=L、WE2=L、RSTW1=H、RSTW2=L
    IC402のみ: IE1=L、IE2=L、WE1=L、WE2=L、RSTW1=L、RSTW2=H
    両方同時 : IE1=L、IE2=L、WE1=L、WE2=L、RSTW1=H、RSTW2=H
    SWCKを L→H→Lと変化させ、Hパルスを出力する。


  • アドレスポインタの頭出しをする。
    IC401のみ: IE1=L、IE2=L、WE1=H、WE2=L、RSTW1=L、RSTW2=L
    IC402のみ: IE1=L、IE2=L、WE1=L、WE2=H、RSTW1=L、RSTW2=L
    両方同時 : IE1=L、IE2=L、WE1=H、WE2=H、RSTW1=L、RSTW2=L
    SWCKを L→H→Lと変化させ、Hパルスを出力する。
    ※スキップが必要なバイト数分、SWCKへの Hパルス出力を繰り返す。


  • メモリにデータを書き込む。
    IC401のみ: IE1=H、IE2=L、WE1=H、WE2=L、RSTW1=L、RSTW2=L
    IC402のみ: IE1=L、IE2=H、WE1=L、WE2=H、RSTW1=L、RSTW2=L
    両方同時 : IE1=H、IE2=H、WE1=H、WE2=H、RSTW1=L、RSTW2=L
    D0〜D7に、書き込みたいデータを設定する。
    SWCKを L→H→Lと変化させ、Hパルスを出力する。
    ※書き込みが必要なバイト数分、D0〜D7への設定と SWCKへの Hパルス出力を繰り返す。


  • 必要に応じて、再度頭出しを行い、別のデータを書き込む。
    必要に応じて、上記2〜3の手順を繰り返す。


  • 書き込んだデータを確実に転送するため、アドレスポインタをリセットする。
    IC401のみ: IE1=L、IE2=L、WE1=L、WE2=L、RSTW1=H、RSTW2=L
    IC402のみ: IE1=L、IE2=L、WE1=L、WE2=L、RSTW1=L、RSTW2=H
    両方同時 : IE1=L、IE2=L、WE1=L、WE2=L、RSTW1=H、RSTW2=H
    SWCKを L→H→Lと変化させ、Hパルスを出力する。
    ※書き込んだデータを、バッファ領域から、メインのメモリセルへ確実に転送させるために必要。
    ※この処理を行わないと、最後に書き込んだ何バイトかが表示されないことがある。

とりあえず、こんな感じの手順を繰り返して行けば、複数の図形や文字をどんどん重ねて行くことができる。

ということで、表示サンプルをどうぞ (^^)


▲ 実験中サンプルその1[拡大写真]
▲ 実験中サンプルその2[拡大写真]


左上は、以前 BBSへの紹介時や、この記事の冒頭にもサンプルとして使ったイメージだ。
上記で言うところの IC401と IC402に同じデータを書き込んで 2ライン同時アクセスとしており、そのため本来 5×7Dotの文字が やや縦長な表示になっている。

右上のイメージは、このサンプルプログラムを改造し、1ライン毎のアクセスに手直ししたもの。 それに 3つほど 適当な色の Windowを重ね書きしてみた。
さて、画面の左上にある文字をマジマジと見てみると・・・ 今ひとつ鮮明でないような感じに見える。 この記事の冒頭で私が 100%とは言えないまでも 80%は当たっていた と記した理由は、実はこの現象だ。
色々調べてみるうちに判ってきたのだが、どうやら 上下のラインと補間が取られている という状態のようだ。 サンプルの文字部分を拡大したものを左下に貼っておくが、縦方向に同一色が連続している部分は 明るく表示されているが、単一ドット、あるいは横方向連続だけの部分は混合色となって表示されている。 ちなみに、 表示色は R/G/B各 4Bitで、16×16×16=4096色となるが、補間を行った結果を含めると、もう少し表示階調は多くなりそうな感じだ。


▲ サンプル2の細部を拡大[拡大写真]
▲ MSXの画面を映して細部を比較[拡大写真]


フレームメモリを直接アクセスした場合のみ、この現象が発生するのか念のため確認してみた。
右上のイメージは、1Chip MSXを RGB接続で映してみたもの。 やっぱり縦方向の補間は行われているようだ・・・
表示の 読み出し側 をこれ以上手をかけて詳細に調べるのは 本末転倒 のような気がするので、とりあえず 補間については気にしない方向 で進めるのが良いと思う次第だ。
横方向、縦方向共に 2Dot毎の座標系とすれば、他の制限も緩和されるので管理もラクチンだしね・・・
あと、これは余談だが、最下段である Line239でも、さらにその下との補間がかかっているようなので、 画面消去時は1Line余分に消す ことも必要だろう (苦笑)

さて、ここまででほぼ エキスは出し切れた のかなと思う。
適当な製作例がすぐ出てくれば「言うことなし」なのだろうが、ちょっと追いついていないかも (^^;
ちなみに、ここまでの調査は PC9801互換機+DOS版 BASICを使って行ってきたのだが、今更こんなものを紹介しても 役に立たんでしょうからネ・・・

ということで、今後適当なマイコンで もう少し参考になりそうな例 を作ることを お約束だけして、とりあえずこのページを終わることにする。 今すぐ・・・ という訳には行かないだろうが、 気長にお待ちいただければ幸いだ。


ご注意!


本ページの記載内容に関して、カシオ計算機株式会社、Aitendo's電子工房、その他販売店などへの問い合わせは 絶対にされませんよう、お願いいたします。
改造の対象とした調査サンプルは、私の手元にある製品 2台を元に調査しましたが、改良や部品変更などの理由で、調査結果が そのまま適用できない場合も考えられます。 ご自身で判断できない場合、改造を中止するという選択も必要です。
液晶ユニットの改造は、一歩間違うとそのユニットを壊すことに直結し、たとえ動作保証されている製品を購入された場合でも、 改造した製品に対して保証を受けることはできなくなります。 改造失敗時など、ご自身で責任が取れない方は、ご利用を お断りします。
その他、一般的注意事項については、液晶自作キット製作例集の「ご注意!」をお読み下さい。


2009/02/01 Yutaka Kyotani (公開)

トップメニューへ
液晶自作キット製作例集 メニューへ