HD6309

日立がMC6809のCMOS版として開発したHD6309は、当時、いろいろと話題になりました。このHD6309、実は、MC6809の表の顔を持つ16 bit CPUで、内部エミュレーションでMC6809のふりをしつつも実は拡張された命令体系を持ち、ネイティブモードに入ると本来の速度で動作するという仕組みになっていたからです。きわめて初期の日立の発表したデータには、ネイティブモードの仕様も記載されていました。しかし、契約と異なる拡張を勝手に行ったとMotorola社から抗議されると、ネイティブモードの項目をデータから削除し、表の世界から隠してしまいました。
しかし、目ざといアマチュアが、自前のMC6809を使用したコンピュータの高性能化の手段として使えないかと、この秘密を伝えていたのでした。また、CMOS化のついでに高速化され、MC6809が公称2 MHzのクロック版しか用意していないのに対し、HD6309には3 MHz版がありました。で、それを利用して、さらに自前のコンピュータの高速化をねらうと。

ま、とにかく、実物の写真。

HD6309
上はクロック発振回路入りのHD63C09、下は外部クロック入力のHD63C09Eで、共にRマスクの3 MHzクロック版。

拡張されていた部分ですが、まずはレジスタから入ります。

HD6309 registers

MC6809と比べると7個のレジスタが追加されています。もっとも2種類はレジスタの組の別名ですが。図の中の網が入っている部分が新設のレジスタです。
MC6809にはアキュムレータがAとBの二組ありましたが、さらにEとFのふたつのレジスタも追加されています。A, Bレジスタを対にしたものをDレジスタと呼ぶように、E, Fレジスタを対にしてWレジスタとして使用することもできます。さらに乗除算命令ではA, B, E, Fレジスタを合わせて32 bitレジスタとして使う場合もあり、Qレジスタと呼びます。QレジスタのMSBはAレジスタのMSBに、QレジスタのLSBはFレジスタのLSBに対応します。
さらに16 bitのVレジスタがありますが、レジスタレジスタ間演算でしか使用できないという制限があります。Vレジスタの下に0と書かれたゼロレジスタがありますが、これもレジスタレジスタ間演算でだけ有効で、常に0が読み出されます。このゼロレジスタは8 bitレジスタとしても16 bitレジスタとしても利用可能です。
最後に特殊なフラグを集めたレジスタとして、モード・エラーレジスタMDがあります。このMDのビット0はエミュレーションモードとネイティブモードを切り替える実行モードビットで、0ならエミュレーションモードで1ならネイティブモードでコードを実行します。ビット1はFIRQモードビットで、0ならMC6809と同一のFIRQ動作を行い、1ならFIRQ割り込み時にIRQと同様のスタック操作を行います。この下位2 bitはプログラムから書き換えられます。ビット6とビット7の上位2 bitはHD6309が検出したエラーを表示するフラグで、MDレジスタを直接書き換える命令では変更できません。ビット6は不正命令ビットで、HD6309が使用されていないオペコードを命令として実行しようとしたときにセットされます。ビット7はゼロ除算で、除算命令実行時に0で割ろうとしたときにセットされます。このどちらの場合でもHD6309がエラートラップ割り込みを発生させて制御を割り込みハンドラに移すため、その割り込みハンドラでエラー原因を調べるのにこれらの2 bitを検査することになります。MDレジスタの残りの4 bitは使われていません。
命令セットはさらに強化されているのですが、それはまたあとで。

あ、あと、Intel系列の周辺LSIはCMOS化が順調に進んで、低消費電力化が必要な場合にも使いやすくなっていましたが、MC6800系列周辺LSIはなかなかCMOS製品が現れませんでした。しかしHD6309と同時期に日立からHD6321, HD6340, HD6350などが出荷されて、やっとというかなんというか、とにかくニュースになりました。

HD63A21, HD63B50
上はHD63A21で1.5 MHzクロック品、下はHD63B50で2 MHzクロック品。

HD6309の発表は、記憶では1984年か1985年ではないかと思いますが、正確には後で調べて書き直します。

Return to IC Collection