トップページ > 電子工作インデックス > CRTCその1 > HD6445の仕様

HD6445の概要

HD6445の元となったICはもともとZ80の競争相手だったMC6800(モトローラ社)の周辺デバイスとして 設計されたものですが、その汎用性の高さからZ80のインターフェース回路にも 盛んに用いられていたそうです。その後Z80と接続した時にしっくりくるようにリメイクされたものが、この6445 なのだそうです。また、ちょっとロジックをかませるだけでほかのCPUでも普通に使用可能です。 素直で使いやすいICだと思います。(コレしか使ったことがないから何とも言えないのですが… )

ここに書いてあることは、結局のところ40ページ分の英語資料の和訳にすぎないので、若干怪しい部分も 含まれます…。ご了承ください。なお、ICのピン名称の前についている「/」は負論理 であることを示すものです。



GND入力ピングランドです。
/RES入力ピン"L"でリセット
LPSTB入力ピン「ライトペン」なるモノと関係あるそうです…
MA0〜MA13出力ピンVRAMのメモリアドレス指定用
DISPTMG出力ピンピクセルデータを出力に"H"レベルになります。
IRQ出力ピン割り込み要求信号です
Vcc入力ピン+5V DC
CLK入力ピンクロックパルス入力。最大4MHz。
/WR入力ピンライト・イネーブル。"L"でアクティブ。
/RD入力ピンりード・イネーブル。"L"でアクティブ。
RS入力ピンレジスタ・セレクト。"L"でアドレスレジスタ。
/CS入力ピン"L"でチップセレクトです。
D0〜D7入出力ピンデータ入出力
RA0〜RA4出力ピンラスタ・アドレス出力
HSYNC出力ピン水平同期信号出力
VSYNC出力ピン垂直同期信号出力


↑ざっと説明します…。まず”Vcc”と”GND”に電源をつなぎましょう。”CLK”にはクロックを入れましょう…。 (クロックについては後述。)さらに、”LPSTB”(Light Pen Strobe)は"L"レベルに落としておきます。 「ライトペン」というハードウェアは聞いたことがありません(汗)。興味はあるものの、今回は無難に済ませるために使わないことにします。 ”IRQ”(Interrupt Request)は放置しましょう。割り込みとは別のやり方でCPUと通信 します。最後に、CPUからの制御信号を受けるピンの1つである”/RD”(Read)は常に"H" (非アクティブ)としておきます。CPU側からCRTCの内部レジスタの値を確認することは今回 はありませんので。

…と、ここまでで必要ないピンの処理は終わりました。ここからは、各ピンが「CPU」、 「RAM」、「ディスプレイ」のどこに接続されるのかを中心に話を進めていきます。


CPUに接続されるのは”D0〜D7”(Data0〜7)ピン、書き込みタイミング信号を入力する ”/WR”(Write)ピン、CPUからのデータがレジスタの番地を指すのかデータそのものかを 指定する”RS”(Resister Select)ピン、チップ全体のアクティブ/非アクティブを 決める”/CS”(Chip Select)ピン…の、データバス8本+制御線3本となります。

VRAMに接続するのは、”MR0〜13”(Memory Address0〜13) ピン、”RA0〜4”(Raster Address)ピンです。結局CRTCからRAMに接続する信号線は アドレス信号だけとなっています。また、メモリアドレスとラスタアドレスの違いは 後述です。

データの書き込みかた

…ただこれだけなのですが、CPUとの配線のイメージについて触れておきます。 ”RS”はこの後説明するとおり、アドレス信号(的なイメージ)なのでCPUのアドレス 指定ピンの最下ビットに接続します。”/CE”はCRTCそのものを選択するかどうか の信号なので、アドレスデコーダ(もしくはCPUのアドレスの上位ピン)をつなぐ 感じで。”/WR”はCPUによりけりですが、Z80なら”/IORQ”と”/WR”のORを とったもので可能です。H8で制御するなら、プログラムで自由にいじれますので とてもラクに使えます。回路のデバッグ(?)についH8を持ち出してしまうのは こういった理由なわけで…。

内部レジスタについて

前述のとおり、CRTC:HD6445はプログラマブルなカウンタの集合体…でした。 そのため、HD6445の内部には設定値を保存するための”レジスタ”があります。

アドレスレジスタ名備考
0水平最大ドット数画面のヨコ幅を決めます。
1水平表示ドット数実際に表示する長さを決めます。表示ドット数 = RAMの使用ブロック数
2水平同期位置水平同期を入れるタイミングです。ドット数で、設定値は2<3<1とします。
3同期信号パルス幅上位4ビットが垂直同期、下位4ビットが水平同期です。
4垂直方向最大ドット数画面のタテ幅を決めます。
5トータル・ラスタ・アジャストよくわかりません(爆)とりあえず"1"に設定。
6垂直表示ドット数実際に表示するタテの長さを決めます。
7垂直同期位置垂直同期を入れるタイミングです。設定値は6<7<5とします。
8インタレース・モード"0"にしておきます。
9最大ラスタ・アドレスラスタ・アドレスの項参照です。
12VRAM初期アドレス上位"0"にしておきます。
13VRAM初期アドレス下位"0"にしておきます。

このHD6445には「入力用のアドレスピン」なんて無かったはずです。「アドレス(A)」と 名のつくピンは全部出力ピンでした。で、どうやって内部レジスタのアドレスを指定する かというと、”RS”ピンを"L"にした状態でデータバスにデータを送ると、それは CRTC内部のレジスタ・アドレスを指すものと認識されます。”RS”ピンを"H"にすると そのデータは書き込む「データ(数値)」だと認識されます。データピンを2通りの 使い方にできる節約(?)設計なんですね。ICのピンの数を40ピンに押させるための 苦肉の策だそうです。

…ということで、内部レジスタに値を書き込むためには、"RS”ピンをガチャガチャいじって 「アドレスを書き込む→データを書き込む」で1セットの動作となります。設定値はすべて16進数に なおして書き込まなければならない点に注意!この内部レジスタよって設定される対象は、 結局水平同期信号と垂直同期信号の周波数だというイメージで。

実際の内部レジスタの設定例

この作業、アナログオシロスコープがあると非常に楽にすることができます。 (別にディジタルでも構いませんが、雰囲気の問題です 笑) 内部レジスタには自由な値を設定できるとはいえ、実際の液晶ディスプレイは規定外の タイミング信号を受け付けてくれないので、「このくらいの値がいい」と決めたものを まず試し、"Out Of Range"が表示されてしまったら少しずつずらしていく…という 方法で私はやりました。その際、HSYNCとVSYNCピンにプローブを当てて常に波形と 周波数を監視しながら作業をすると目安になるので楽です。

ただ、それでもしんどかったのでまたH8とPCに頼り、 補助ソフトウェアをつくってしまいました。




前へ   次へ