マイコン独立大作戦
カラーキャラクタディスプレイインターフェース回路の製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
作戦その5は、カラーキャラクタディスプレイインターフェース回路です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第5回]
●スクロール対策
前回書きましたようにスクロールを可能にするには、1画面分の表示データを保持している必要があります。
もちろんそのデータはCRT/VGAインターフェースボード上のVRAMに保存しているのですが、そのデータは前回書きました理由によって書き込むことはできますが読み出すことはできません。
代わりに表示データを同時に書き込んでいるCPUボード上のRAMのF800〜FFCFを読み出すことはできます。
そこに文字データを書き込むことで文字のスクロールを可能にしています。
しかしそこに重ねてカラーコードを保持することはできません。
どうしてもカラーコードも含めてスクロールを行なうということになりますと、どこかほかに2KBのエリアを確保するしかありません。
しかしもうそんなエリアはどこにも余っていません。
そういうことになりますと、もうこの手を使うしか他に方法はありません。
別に進行中のROM/RAM/RTCボードを利用するという手です。
このボードはもともとはログを保存するためのものとして開発を行なっているものなのですが、RAMとして628128を使えばとりあえずは十分なRAMの空きが利用可能になります。
RAMバンクFFはND80Z3.5等のCPUボード上の増設RAMでZB3DOS(CP/M互換DOS)用のRAMエリアです。
CPUボードにROM/RAM/RTCボードを接続した場合にはCPUボード上の増設RAMを外して、代わりにROM/RAM/RTCボードに628128(または628512)を実装することで、同じエリアを使うことができます。
628128を実装したときは、CP/M互換DOS用のバンクFF(32KB)のほかにバンクCF、DF、EFの各32KBも使用可能です。
そこで上の図のようにバンクEFのアドレス7800〜7FCFをカラーコード用の画面バッファとして使うことにしました。
●カラーコード用画面アドレスはF801〜FFD0
話が複雑になって理解を妨げるおそれがありますから、仮にカラーコード用のVRAMエリアも文字用のエリアと同じアドレスF800〜FFCFとして説明をしていますが、実はハード回路上の理由からカラーコード用のVRAMエリアのアドレスは文字用VARAMアドレスとは1バイトのずれがあって、F801〜FFD0になります。
文字データはVRAMから出力されたあと、そのデータがキャラジェネROMのアドレスになることでキャラジェネROMから文字表示データが出力され、さらにそれがパラレルからシリアルに変換されて画面表示用の信号になります。
これには時間がかかるため、VRAMをスキャンするタイミングに対してパラレルシリアル変換されるまでの間に1文字分の遅延回路が入っています。
一方カラーコードデータはカラー用VRAMから出力されたデータがそのまますぐにパラレルからシリアルに変換されるため、特に遅延回路はありません。
カラー回路にも文字回路と同じように遅延回路を入れれば同期が取れるのですが、それだけ回路が複雑になってしまいます。
そこでその1文字分の差はソフトウェアで調整することにしました。
そういうことで、説明上は便宜的に文字アドレスとカラーコードアドレスは同じとしていますが、実際のプログラムでは常にその差を意識して補正をするようにプログラムしています。
それだけプログラムが複雑になっています。
●カラーコード用のバッファを使って実現したスクロール画面です
お話をもとに戻します。
ROM/RAM/RTCボード上の増設RAMを使うことでカラーコード用のバッファを確保することができるようになりましたが、それはそれで実現には困難を伴いました。
上の図を見ていただければ分かりますように、増設RAMはシステムのROMアドレスと重なっています。
つまりシステムROMにあるスクロールプログラムからは直接カラーコード用のバッファにアクセスすることができません。
どうするかといいますと、あらかじめRAM(アドレス8000〜FFFF)の適当なところに置いたRAMバンクアクセスサブルーチンを呼び出して、そこで1バイトのデータのREAD/WRITEを実行してから、またもとのROMのプログラムに戻るようにします。
実際にコーディングしてみますと、相当に複雑なプログラムになってしまいました。
そのため文字だけだったときに比べると画面表示(特にスクロール時)がちょっと重たくなってしまいました。
今はとりあえずND80Z3.5(クロック6MHz)でプログラム開発を行なっていますが、最終的にはMYCPU80、ND8080(ともにクロック2MHz)でも動作するようにしたいと考えています。
その場合にはスクロールの遅さが気になるかもしれません。
なにはともあれ、たっぷり3日ほどをかけてカラー画面も含めてスクロールするようにプログラムを変更したあとでの実行画面です。
実はこの画面もカラー表示後に2行分のスクロールが行なわれています。
第1行には
>DIR
があって、それに続く第2行にはDIR内容の表示の1行分が表示されていたのですが、それがスクロールによってなくなっています。
しかしそれでも前回のような「色ずれ」は発生していません。
続いてもう一度LIST表示を行ないました。
LIST表示に伴う更なるスクロールでも「色ずれ」はおきていません。
めでたしめでたしです。
なお今回説明しました文字表示とカラーコードの一致はスクロールに対してのみ有効です。
INSERT、DELETEなどの行編集は文字画面に対してのみ働きます。
カラー表示画面には働きません。
色ずれが発生します(というか、色情報のみがもとの位置に残ったままになります)。
ま、そこまでは必要ありませんでしょう。
カラーキャラクタディスプレイインターフェース回路の製作[第5回]
2017.8.8upload
前へ
次へ
ホームページトップへ戻る