* Tue May 29 12:30:00 JST 2002 Naoyuki Sawa
今回より、P/ECEのLCDコントローラを、APIを通さずに直接使ってみます。
僕はこれまでに、LCDコントローラ(以下LCDCと略します)を直接使うようなプログラミングをやったことがありません。
CRTコントローラ(以下CRTCと略します)を含めても、使ったことがあるのはこれぐらい。
・MSXシリーズのCRTC、TMS9918A,V9938,V9958
・DOS/VマシンのCRTC、VGA(の基本部分。もう忘れたかも(^^;)
ある程度使い込んだと言えるのは、V9958だけかな?
決して多いとは言えないプログラミング経験ですけれど、その経験から言えるのは、
「CRTCを直接使うプログラミングは面白い!」
幸い、P/ECEのLCDC「S6B0741」のデータシートが手に入りましたので、「S6B0741」も使い込んでみようと思います。
もっとも、P/ECEのLCD関連APIは、機能・速度・使い易さを兼ね備えた非常に良い出来なので、
LCDCを直接使わなければいけないような場面はほとんどないんですけどね(^^;
さて、P/ECEでは、CPUからLCDまでのデータの流れが少々複雑です。
大まかなデータの流れを図示します。
CPU
↓
メインメモリ
↓
高速DMAコントローラ 8ビットタイマ
↓ |
シリアルコントローラ←−−−−−+
↓
LCDC⇔ビデオメモリ
↓
LCD
ちなみにMSXでは、こんな感じ。
CPU
↓
CRTC⇔ビデオメモリ
↓
CRT
P/ECEの複雑さがおわかりいただけるでしょうか?
この複雑さの原因は、P/ECEのLCDCが「SPI」方式で接続されていることにあります。
SPIとは「Serial Peripheral Interface (シリアル・ペリフェラル・インターフェイス)」の略で、
CPU⇔周辺回路 や システムロジック⇔周辺回路 の間を、一本(片方向) または 二本(双方向) のデータ線で
接続する技術のことを指します。
SPIの利点は、周辺回路を接続するための信号線が少なくなり、基板設計がやりやすくなることです。
SPIの欠点は、1ビットづつの送受信になるので、8ビットや16ビットで接続した場合に較べて低速なことです。
プログラミングに少々手間がかかるのも、欠点と言えるかも知れません。
(※僕も、SPIという用語を聞いたのは初めてなので、用語解説を探したのですが、見つかりませんでした。
LCDCのデータシートやWeb上の記述から、上のように理解したのですが、間違っているかもしれません。)
もう一度、データの流れを図示します。
「各周辺回路が何ビット単位でデータをやりとりしているか」も表示しました。
CPU
|
|16ビット
↓
メインメモリ
|
|8ビット
↓
高速DMAコントローラ 8ビットタイマ
| |
|8ビット |
↓ |
シリアルコントローラ←−−−−−+
|
|1ビット(SPI)
↓
LCDC⇔ビデオメモリ
|
|
↓
LCD
データの流れを正しく制御するには、CPUとLCDCの他にも、高速DMAコントローラ(以下高速DMACと略します)、
8ビットタイマ、そしてシリアルコントローラも正しく設定しなければいけません。
一か所でも設定を間違えると正しく動かないので、プログラムが期待通りに動かなかった時の原因究明が難しそうです。
データの流れにおいて、高速DMAC、8ビットタイマ、シリアルコントローラは、どのような役割を担っているのでしょうか。
もし、各周辺回路の利用が必須ではなく、単に高速化などのためだけに利用されているのならば、
とりあえず最初の実験プログラムからは除外し、単純なデータの流れでプログラムしてみるのが良さそうです。
理想は、こうです。
CPU
↓
LCDC⇔ビデオメモリ
↓
LCD
…ちょっと長くなりそうなので、今回はこれまでです。
実は、上図のようにデータの流れを単純化したサンプルプログラムは、既に作ってあります。(2002/06/26追記:コメント追加)(2002/06/27追記:設定手順修正)
pceLCDDispStart()とpceLCDDispStop()に相当するLCDC命令を、CPUからLCDCへ直接送り込んで、画面のON/OFFを行います。
Aボタンで画面表示OFF、Bボタンで画面表示ON、SELECTボタンで終了します。
詳細は、次回以降に。
(続きます...)
nsawa@piece-me.org