日立63C09E、6309の3MHz外部クロックバージョン | |
| 一般情報 | |
|---|---|
| 発売 | 1982 (1982年) |
| 共通メーカー | |
| パフォーマンス | |
| 最大CPUクロックレート | 1MHz~5MHz |
| データ幅 | 8ビット |
| アドレス幅 | 16ビット |
| 物理的仕様 | |
| パッケージ |
|
| 歴史 | |
| 前任者 | モトローラ 6809 |
6309は、1982 年後半にリリースされた、日立のMotorola 6809マイクロプロセッサの CMOS バージョンです。当初は、多くの内部改良点を無視して、6809 の低電力バージョンとして販売されました。
「エミュレーションモード」では、6809と完全な互換性があります。6809の仕様に加え、より高いクロックレート、拡張機能、新しい命令、そして追加レジスタが追加されています。新しい命令のほとんどは、追加レジスタのサポートに加え、最大32ビットの演算、ハードウェア除算、ビット操作、ブロック転送をサポートするために追加されました。6309は、ネイティブモードでは6809よりも 一般的に30%高速です。
この情報は日立によって公表されることはなかった。富士通パーソナルコンピュータユーザー向けの日本の雑誌『Oh! FM』 1988年4月号に、6309の追加機能に関する最初の解説が掲載された。その後、角川博嗣氏が6309の新機能と命令の詳細をcomp.sys.m6809に投稿した[ 1 ] 。これが、タンディカラーコンピュータ3用のNitrOS-9 [ 2 ]の開発につながった。

6309 は、いくつかの重要な点で 6809 と異なります。
6309はCMOSテクノロジーで製造されていますが、6809はNMOSデバイスです。そのため、6309は6809よりも動作に必要な電力が少なくなります。
これは動的設計ですが(データシート[ 3 ]では最小クロック周波数が500kHzと規定されており、クロック速度が低すぎると状態が失われます)、最大15サイクルまで一時停止できます。これはダイレクトメモリアクセスに便利です。外部デバイスがCPUを一時停止してメモリバスを解放し、少量のメモリを読み書きした後、CPUを再び一時停止解除できるためです。他のロジックは必要ありません。
6309には、6809と同様にB(2MHz)バージョンがあります。ただし、速度定格「C」は、参照するデータシートに応じて、最大クロック周波数が3.0MHzまたは3.5MHzのいずれかで製造されました。(日本製のコンピュータの中には、3.58MHzカラーバースト水晶発振器を搭載した63C09 CPUがいくつか搭載されていたため、3.5MHz定格が最も可能性が高いと思われます。)逸話や個別の報告によると、63C09バリアントは5MHzで動作しても問題がないことが示されています。6809と同様に、日立CPUには内部クロックバージョンと外部クロックバージョン(それぞれHD63B/C09とHD63B/C09E)があります。
6309ネイティブモード(デフォルトの6809互換モードではなく)に切り替えると、多くの主要命令がより少ないクロックサイクルで完了します。これにより、実行速度が最大30%向上することがよくあります。
新しい命令のほとんどは、ロード、ストア、加算など、追加レジスタの存在に対応するために既存の命令を修正したものです。6309本来の追加機能には、レジスタ間演算、ブロック転送、ハードウェア除算、ビットレベル操作が含まれます。さらに、16ビットレジスタDとWは、キャリーを含む16ビット演算、および16ビットシフトとローテート演算の対象となります。6809では、これらの演算は8ビットオペランドに制限されています。
追加命令はユーザーフレンドリーであるにもかかわらず、6809プログラミングの達人による分析によると、多くの新しい命令は、特にタイトなループにおいて、同等の6809コードよりも実際には遅いことが示されています。プログラマーが特定のアプリケーションに最も効率的なコードを使用するように、慎重な分析を行う必要があります。
新しい命令のほとんどはオペコードプレフィックスを使用しているため、6809の類似命令と比較して1サイクル遅くなります。一方、6309ネイティブモードでは、多くの命令が1サイクル以上高速に実行されます。以下は、6809と6309における「A」レジスタと「E」レジスタに対する8ビットLD命令のタイミング比較です。
| 命令 | 6809 | 6309エミュレーションモード | 6309ネイティブモード |
|---|---|---|---|
| LDA即時 | 2サイクル | 2サイクル | 2サイクル |
| LDE即時 | 該当なし | 3サイクル | 3サイクル |
| LDAダイレクト | 4サイクル | 4サイクル | 3サイクル |
| LDEダイレクト | 該当なし | 5サイクル | 4サイクル |
| LDAインデックス | 4サイクル以上 | 4サイクル以上 | 4サイクル以上 |
| LDEインデックス | 該当なし | 5サイクル以上 | 5サイクル以上 |
| LDA延長 | 5サイクル | 5サイクル | 4サイクル |
| LDE拡張 | 該当なし | 6サイクル | 5サイクル |
また、レジスタ間演算と新しい16ビット演算は、多少のばらつきがあります。アドレッシングモードと6309モードによっては、同等の6809コードの方が高速になる場合があります。例として、排他的論理和命令のタイミングを見てみましょう。
| 命令 | 6809 | 6309エミュレーションモード | 6309ネイティブモード |
|---|---|---|---|
| EORA即時 | 2サイクル | 2サイクル | 2サイクル |
| EORD即時 | 該当なし | 5サイクル | 4サイクル |
| EORAダイレクト | 4サイクル | 4サイクル | 3サイクル |
| EORDダイレクト | 該当なし | 7サイクル | 5サイクル |
| EORAインデックス | 4サイクル以上 | 4サイクル以上 | 4サイクル以上 |
| EORDインデックス | 該当なし | 7サイクル以上 | 6サイクル以上 |
| EORAの延長 | 5サイクル | 5サイクル | 4サイクル |
| EORD延長 | 該当なし | 8サイクル | 6サイクル |
| EORRインターレジスタ | 該当なし | 4サイクル | 4サイクル |
上の表に示すように、16ビットレジスタDと即値パラメータの排他的論理和は、2つの8ビット命令EORA imm、EORB immに置き換えることができ、6309をエミュレーションモードで実行する際に高速に実行されます。ただし、8ビット命令EORA imm、EORB immのシーケンスは、16ビットEORD imm命令と完全に同じではないことに注意してください。これは、最初のケースでは条件コードCCレジスタが8ビット演算の結果に応じて設定され、2番目のケースでは16ビット演算の結果に応じて設定されるためです。
レジスタ間EORR命令にも同様の問題が発生します。この命令は8ビットと16ビットの両方のオペランドを受け入れ、常に4サイクルで実行されます。ただし、8ビットオペランドの場合は、EORA imm命令またはEORB imm命令を使用する方が高速です。さらに、6309がネイティブモードで動作している場合、EORA direct命令とEORB direct命令は3サイクルしかかかりません。これはレジスタ間演算よりも1サイクル短いです。
FIRQ割り込みの動作モードは変更できます。PCレジスタとCCレジスタをスタックする(6809の通常の動作)代わりに、FIRQ割り込みはIRQ割り込みと同様にレジスタセット全体をスタックするように設定できます。さらに、6309には2つのトラップモードがあります。1つは不正命令フェッチ用、もう1つはゼロ除算用です。不正命令フェッチはマスクできません。そのため、多くのTRS-80カラーコンピュータユーザーから、6309は「バグが多い」と報告されましたが、実際にはこれは拡張された未知の機能の兆候でした。
一時的な記憶のために使われるMと呼ばれる追加のレジスタもあり、これも使用可能である。[ 4 ]