PDIP40パッケージ | |
| 一般情報 | |
|---|---|
| 発売開始 | 1985年 (1985年) |
| 一般的な製造業者 |
|
| パフォーマンス | |
| 最大CPUクロックレート | 1MHz ~ 14MHz |
| データ幅 |
|
| アドレス幅 | 24ビット |
| 物理的仕様 | |
| パッケージ | |
| 建築と分類 | |
| 命令 セット | 6502 |
| 命令数 | 92 |
| 製品、モデル、バリエーション | |
| 変異体 |
|
| 歴史 | |
| 前任者 |
|
| 後継 | WDC 65C832 [ 1 ] [ 2 ] [ 3 ] (未発売) |
W65C816S (65C816または65816とも表記)は、Western Design Center (WDC)が開発・販売した16ビットマイクロプロセッサ(CPU)です。1985年に発表されたW65C816Sは、WDC 65C02 8ビットCPUの改良版であり、65C02自体は、定評のあるMOS Technology 6502 NMOS CPUをCMOSで改良したものです。65C816は、 Apple IIGSおよび、改良版ではありますがスーパーファミコンのCPUとして採用されています。
部品名の「65」は互換モード「65C02」に由来し、「 816」はMPUが8ビットと16ビットのレジスタサイズを選択できることを示しています。16ビットレジスタが利用できることに加え、W65C816Sはメモリのアドレス指定を24ビットに拡張し、最大16メガバイトのランダムアクセスメモリをサポートします。また、命令セットが強化され、16ビットのスタックポインタを備えているほか、システムハードウェア管理を改善するための新しい電気信号もいくつか搭載されています。
リセット時、W65C816Sは「エミュレーションモード」で起動し、実質的に65C02と同様の動作をします。その後、2つの命令シーケンスでW65C816Sを「ネイティブモード」に切り替えることができ、すべての拡張機能が有効になりますが、ほとんどの65C02ソフトウェアとの下位互換性は維持されます。NMOS版の65C02とピン互換性のあるPDIP40版とは異なり、PDIP40版のW65C816Sは他の6502ファミリMPUとはピン互換性がありません。
W65C802 (または65802)は、65C816とソフトウェア面で完全に互換性があり、6502および65C02とも電気的に互換性があります。そのため、W65C802は、6502または65C02を搭載したほとんどのシステムで、そのまま交換用として使用できます。ただし、W65C802はピン数が限られており、マルチプレクサを使用しないため、24ビットのアドレスを出力することができず、 アドレス空間は64KBに制限されます。W65C802は現在生産されていません。

1981年、WDCの創設者兼CEOであるビル・メンシュは、主にロックウェル・セミコンダクターとシナーテックといった生産パートナーと共に65C02の開発を開始した。65C02開発の主な目的は、オリジナルの6502のNMOSプロセスからCMOSプロセスに移行し、任意のクロック速度で1/10から1/20程度の低消費電力で動作させることであった。また、サポートされる最大クロック速度を上げることも望まれていた。65C02の設計では、 NMOS 6502に存在していたチップのエラー(例えば、悪名高いバグ)に対処し、新しい命令と既存の命令の一部に対する新しいアドレッシングモードを導入した。[ 4 ]JMP (<addr>)
W65C816Sの開発は、メンシュがApple Computerと、とりわけグラフィックとサウンドを改善したApple IIシリーズのパーソナルコンピュータの新バージョンについて協議した後、1982年に開始されました。Appleは、当時Apple IIで使用されていた6502とソフトウェア互換性があり、より多くのメモリをアドレス指定でき、16ビットワードをロードおよびストアできるMPUを求めていました。[ 5 ]その結果、1984年3月に完成した65C816が誕生し、同年後半にAppleとAtari Corporationの両方にサンプルが提供され、1985年に正式にリリースされました。 [ 6 ]メンシュは、設計プロセス中に妹のキャスリンの助けを受け、彼女はデバイスのレイアウトの一部を担当しました。[ 5 ]
同じプロセスで、内部構造が 65C816 と同一の 65C802 も開発されました。両者とも同じ製造ラインで生産され、チップが外部ピンに接続される最後の金属化段階でのみ違いが生じました。65C802 では、これらのピンは元の 6502 と同じレイアウトであったため、CPU の 16 ビット処理をそのまま使用できるだけでなく、ドロップイン交換品として使用できました。ただし、元のピン配置を使用していたため、アドレス指定ピンは 16 個しかなく、 外部メモリには 64 KB しかアクセスできませんでした。[ 7 ]通常、ハードウェアメーカーがプロジェクトをゼロから設計する場合、65C802 ではなく 65C816 を使用したため、後者は生産中止となりました。
Appleは65C816をApple IIGSコンピュータに統合した。65C816の基本設計は、1980年代半ばから後半、そして1990年代初頭にかけて、VLSI Technology、[ 8 ] GTE、三洋電機などによって二次供給された。
1990年代には、65C816と65C02の両方が完全スタティックコアに改良され、レジスタの内容を失うことなくプロセッサのØ2クロックを完全に停止することが可能になった。この機能と非同期スタティックRAMの使用により、スタンバイ状態時に消費電力を最小限に抑えた設計を実現できた。
2025年4月現在 W65C816Sは、WDCから40ピンPDIP、PLCC44、または44ピンTQFPパッケージで入手可能で、W65C265を介したMCUとして[ 9 ] 、 ASIC統合用のIPコアとして[ 10 ] [ 11 ](例えば、WinbondのW55V9xシリーズのTV教育エンターテイメントIC [ 12 ])として提供されています。

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WDC 65C816の特長:
C)、スタックポインタ(SP)、およびインデックスレジスタ(XおよびY)。DP)。DB)レジスタとプログラムバンク(PB)レジスタは、24ビットのコードとデータアドレスの16 ~ 23ビット目を生成します。プログラムバンクとデータバンクのレジスタが分離されているため、プログラムの分割と16MB のリニアデータアドレッシングが可能です。VDA)と有効なプログラムアドレス(VPA)の制御出力。VPB)は、割り込みベクターがフェッチされていることを示すために出力を制御します。ABORTBなどのバスエラー状態のプロセッサ修復をサポートします。MVNおよび)を使用すると、最小限のコードでMVPデータ構造をRAMのある領域から別の領域に高速にコピーできます。WAI)およびクロック停止( )命令は、消費電力をSTPさらに削減し、割り込み遅延を短縮し、外部イベントとの同期を可能にします。COPなどのコプロセッサ構成をサポートします。WDM将来の2バイトオペコードと将来の設計へのリンクのために予約された「エスケープ」( )命令(WDMはW65C816Sの設計者であるWilliam D. Menschのイニシャルです)。65C816には2つの動作モードがあります。1つは「エミュレーションモード」で、16ビット演算は非表示になり、インデックスレジスタは8ビットに固定されます。このモードでは、チップは6502と非常によく似ており、オペコードのサイクルタイミングも同じです。もう1つは「ネイティブモード」で、すべての新機能が使用可能になります。CPUは電源投入時またはリセット時に自動的にエミュレーションモードに入るため、異なるピン配置に対応するために必要な回路変更を行えば、65(C)02を置き換えることができます。[ 4 ]
ネイティブモードで実行する場合の 65C816 の最も明白な変更点は、各種レジスタのサイズが 8 ビットから 16 ビットに拡張されることです。この拡張は、アキュムレータ ( A)、XインデックスYレジスタ、スタックポインタ( ) に影響します。プログラムカウンタ( ) は常に 16 ビットであるため、SP影響はありません。 [ 13 ]PC
ネイティブモードで実行する場合、ステータスレジスタの 2 つのビットの意味が変わります。オリジナルの 6502 では、ビット 4 と 5 は使用されませんでしたが、ビット 4 はブレーク ( b) フラグと呼ばれていました。ネイティブモードでは、ビット 4 がxフラグになり、ビット 5 がmフラグになります。これらのビットは、インデックスレジスタ( x) とアキュムレータ/メモリ ( m) のサイズが 8 ビットか 16 ビットかを制御します。これらのビットが 0 の場合は 16 ビットサイズ、1 の場合は 8 ビットサイズになります。これらのビットは、プロセッサの電源投入時またはリセット時には 1 に固定されますが、プロセッサがネイティブモードに切り替わると変更可能になります。[ 13 ]
ネイティブモード動作では、プログラマは、命令REPと命令を使用してステータスレジスタのビットSEPを操作することで、アキュムレータレジスタとインデックスレジスタのサイズを16ビットまたは8ビットに設定できます。この機能により、プログラマはワードサイズとバイトサイズのどちらのデータに対しても演算を実行できます。アキュムレータレジスタとインデックスレジスタのサイズは個別に設定できるため、たとえば、アキュムレータを8ビット、インデックスレジスタを16ビットに設定することで、ポインタ演算を実行することなく、64KBの範囲の個々のバイトを操作することが可能です。mx
レジスタサイズが 16 ビットに設定されている場合、メモリへのアクセスはクロック サイクルごとに 1 バイトの速度で 2 バイトの連続したバイトをフェッチまたはストアします。したがって、ROR <addr>アキュムレータが 16 ビットに設定されているときに使用される、などの読み出し・変更・書き込み命令は、メモリの 1 バイトではなく 2 バイトの連続したバイトに影響を与え、アキュムレータが 8 ビットに設定されているときよりも多くのクロック サイクルを消費します。同様に、すべての算術演算と論理演算は 16 ビット演算になります。[ 14 ]
ネイティブモードで動作中のシステムに対するもう1つの大きな変更点は、メモリモデルが6502の元の16ビット形式から24ビット形式に拡張されていることです。65C816は、2つの8ビットレジスタ、データバンクレジスタ(DB)とプログラムバンクレジスタ(PB)を使用して、アドレスのビット16~23を設定し、実質的に24ビットアドレスを生成します。どちらの場合も、「バンク」は、 アドレス範囲で区切られた連続した64KBのメモリセグメントを指します$xx0000–$xxFFFF。ここでxx、はバンクアドレス、つまり実効アドレスのビット16~23です。DBと両方は、電源投入時またはリセット時PBにに初期化されます。 [ 15 ]$00
オペコードまたはオペランドのフェッチサイクル中、 はプログラムカウンタ( )PBの前に付加され、24 ビットの実効アドレスを形成します。 が「ラップアラウンド」(ゼロに戻る)した場合、はインクリメントされません。したがって、プログラムは実行中のバンクの制限によって制限されます。このメモリモデルから暗示されるのは、別のバンクでコードを実行するために「ロング」ジャンプまたはサブルーチン呼び出しが使用されない限り、分岐およびサブルーチンのターゲットは、分岐または呼び出しを行う命令と同じバンクにある必要があるということです。バンク間で制御を転送する際のコードの一貫性を確保するために、 はが同時に設定されている場合にのみ変更できます。 [ 16 ] [ 17 ]PCPCPBPBPC
データフェッチまたはストアサイクル中、DB16ビットデータアドレスの前に付加され、データにアクセスする24ビット実効アドレスが形成されます。このプロセッサ特性により、16ビットアドレスを使用してデータ要素を参照する6502または65C02コードを正常に実行できます。はDBプログラム制御で変更でき、16ビットアドレッシングの制限を超えるデータにアクセスするために行われる場合があります。また、DBアドレスが現在にあるバンクの制限を超えてインデックス付けされた場合、は一時的にインクリメントされますDB。24DBビットアドレスがデータフェッチ/ストア命令のオペランドとして指定されている場合、または実効アドレスが直接(ゼロ)ページまたはハードウェアスタック上にある場合は、は無視されます。後者の場合、暗黙のバンクを$00使用して実効アドレスが生成されます。[ 17 ]
レジスタセットに追加されたもう一つのレジスタは、16 ビットの直接ページレジスタ ( ) で、これは以前はゼロページDPと呼ばれていたもののベース アドレスを設定しますが、現在は直接ページと呼ばれています。直接ページ アドレッシングでは 8 ビット アドレスを使用するため、16 ビットまたは 24 ビット アドレスを使用する場合よりもアクセスが高速になります。また、間接参照を提供するアドレッシング モードの中には、直接ページでのみ可能なものもあります。65(c)02 では、直接ページは常にメモリの最初の 256 バイトであるため、「ゼロ ページ」と呼ばれます。ネイティブ モードでは、65C816 は に16 ビットの開始アドレスを書き込むことで、直接 (ゼロ) ページをバンク(メモリの最初の 64 KB) 内の任意の場所に再配置できます。が正確なページ境界に設定されていない場合、つまり の値が でない場合(は最上位バイト) 、 1 サイクル アクセス ペナルティが発生します。[ 18 ]$00 DPDPDP$xx00xx
現在の動作モードはエミュレーション(e)ビットに格納されます。ステータスレジスタ()の以前の 6 つのフラグセットに新しいビットxとビットをすでに追加したため、新しいモード ビットを保持するのに十分なビットが残っていませんでした。代わりに、モード ビットを「非表示」にして直接アクセスできないようにするという独自の解決策が使用されました。(e X change C Carry with E mulation)命令は、エミュレーション ビットの値をキャリー()ビット(のビット 0)と交換します。たとえば、プロセッサが起動した後にネイティブ モードに入りたい場合は、を使用してキャリー ビットをクリアし、次にそれをエミュレーション ビットに書き込みます。[ 19 ] 65c02 エミュレーション モードに戻るには、の後にを使用します。[ 20 ]mSRXCEcSRCLCXCESECXCE
内部的には、65C816 は完全な 16 ビット設計です。とmのxビットによって、SRユーザー レジスタ (アキュムレータとインデックス) がシステムの他の部分からどのように見えるかが決まります。リセット時に、65C816 は 6502 エミュレーション モードで起動し、 と はmにx固定されます1。したがって、レジスタは 8 ビット サイズに固定されます。アキュムレータ ( -アキュムレータ) の最上位バイト (MSB) は直接アクセスできませんが、 命令を使用してBアキュムレータ ( -アキュムレータ) の最下位バイト (LSB) と交換できます。インデックス レジスタ (と)には対応する操作はありません。インデックス レジスタの MSB は に固定されています。AXBAXY$00
ネイティブモードに切り替えると、Xと の最上位ビット (MSB) はYゼロになり、B-アキュムレータは変更されません。mのビットSRがクリアされると、B-アキュムレータは -アキュムレータと「連結」されA、16 ビット レジスタ ( -Cアキュムレータと呼ばれます) が形成されます。アキュムレータまたはメモリを含むロード/ストア操作、または算術/論理演算は 16 ビット操作となり、16 ビット値のフェッチ/ストアには 2 バス サイクルが必要です。
xのビットがクリアされるとSR、両方のインデックスレジスタは16ビットに設定されます。アドレスのインデックスとして使用される場合(例:)、LDA SOMEWHERE,Xインデックスレジスタの16ビット値がベースアドレスに加算され、実効アドレスが生成されます。
mビットがセットされている場合SR、アキュムレータは 8 ビット レジスタに戻り、いくつかの例外を除き、アキュムレータに対する以降の操作は 8 ビット操作になります。 -アキュムレータは、アキュムレータが 16 ビットに設定されていたときの値を保持します。例外は、ダイレクト ページ レジスタ ( ) とスタック ポインタ ( ) をアキュムレータとの間でB転送する命令です。これらの操作は、ビットの状態に関係なく、ネイティブ モードでは常に 16 ビット幅です。DPSPmSR
xビットが設定されるとSR、インデックスレジスタが8ビットに戻るだけでなく、16ビット幅だったときにMSBにあったものもすべて失われます。これはアセンブリ言語プログラマーが忘れてはならないことです。[ 21 ]
65C816バリアントに基づくシステム: