マイコン独立大作戦
カラーキャラクタディスプレイインターフェース回路の製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
作戦その5は、カラーキャラクタディスプレイインターフェース回路です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第4回]
●スクロールが問題
前回までのところで文字のカラー表示にエスケープシーケンスが使えるようになりました。
めでたしめでたしと言いたいところなのですが、まだ大きな問題が残っておりました。
その問題は当初からわかっていたことなのですが、ちょっと問題が大きすぎるのでどうしたものかと思い悩んでおりました。
それが今回のテーマの「スクロール」です。
キーボードから文字を入力したり、プログラムで画面に文字を表示していくと、カーソルの位置が最後には画面の一番下まで来てしまいます。
その状態でさらに続けて表示を行なうと、最後に表示された行が常に画面の最下行になり、それ以前の表示は順に上に一行分ロールアップします。
ロールアップ前の画面の一番上の行はロールアップによって画面から押し出されて消えてしまいます。
その動きが「スクロール」です。
そのどこが問題なのか、言葉で説明するより実際に見ていただくほうが理解が早いと思います。
これは前回も見ていただいたスクロール前の画面です。
この状態でさらに何かを画面に表示していくと…。
こうなってしまいます。
カラーの表示がずれたのがわかりますでしょうか?
さらに表示を続けるとこんなことになってしまいます。
「文字」はスクロールされていきますが、「色の情報」は画面のその位置に残ったままなので、そういうことになってしまいます。
スクロールというのはちょいと面倒な作業をしているのです。
画面の2行目から最下行までを全部一行上にコピーする、という作業をしています。
この作業は文字だけの場合には特に問題なくできました。
ところがそこに色情報が加わるとちょいと深刻な問題が発生してしまいます。
下はCRT/VGAインターフェースボードをCPUボードに接続したときのメモリマップです。
画面表示のためのVRAMはF800〜FFCFの2KB(2000バイト)に割り付けられています。
このアドレスはCPUボード上のRAMと重複しています。
本当はこの範囲はCPUボード上のRAMのアクセスを禁止できればよいのですが、そうするためにはCPUボードを改造しなければなりません。
改造しないままで同じアドレスに複数のRAMを割り当てることは、普通はできません。
それを可能にするためにCRT/VGAインターフェースボードではメモリアクセスに工夫を加えています。
同じアドレスに2つのRAMを配置すると問題が発生するのは、RAMから読み出すときです。
2つのRAMから同時にデータが出力されると、データがぶつかってしまいます。
しかし2つのRAMに同時にデータを書いても問題はありません。
そこでCRT/VGAインターフェースボードのVRAMにはCPUボードからのMEMWRのみを接続していますが、MEMRDは接続しないようにしてあります。
こうすることでVRAMに表示データを書き込むときは同時にCPUボード上のRAMにも同じデータが書き込まれ、逆に画面データを読み出すときはCPUボード上のRAMから読み出すように考えてあります。
そこまではそのように何の問題もなくできました。
それでは新たに追加したカラーデータはどのようにして表示しているのでしょうか?
下はカラーインターフェースを追加したときのメモリマップです。
カラー情報も文字と同じF800〜FFCFに重ねて割り当てています。
そのままでは文字を書くときも色コードを書くときも両方のVRAMに書き込まれてしまいますから、そうならないようにVRAMのMEMWRラインをI/O(アドレスD0〜D3)で切り換えて、どちらか片方のRAMを選択して書き込むことができるようにしました。
しかし、CPUボード上のRAMは?
こちらはそのように切り換えることはできません。
CPUボード上のRAMのF800〜FFCFには文字データも色コードも同じように書き込まれてしまいます。
それでは都合が悪いので、効率は悪いのですが、あるアドレスに色コードを書き込むときはそのアドレスの文字データを読み出して一時保存しておいてから色コードを書き込んで、それから保存しておいた文字データを書き込みます。
このとき文字用のVRAMとカラー用のVRAMのMEMWRは切り換えてそれぞれのコードが正しいVRAMに書き込まれるようにします。
さてそれで、問題のスクロールです。
スクロールのときはCPUボード上のRAMに書かれている文字コードを読み出してそれを一行上にコピーします。
しかしカラーコードは?
読み出すことができません。
どうしましょう?
本日は時間がなくなってしまいました。
続きは次回にいたします。
カラーキャラクタディスプレイインターフェース回路の製作[第4回]
2017.8.6upload
前へ
次へ
ホームページトップへ戻る