W65C816S (65C816 、65816 )は、ウェスタンデザインセンター (WDC)が開発・販売した16ビットマイクロプロセッサ (MPU)。1985年にリリースされたW65C816Sは、WDC 65C02 8ビット MPUの強化版であり、その前のモステクノロジー 6502 NMOS MPUのCMOS 強化版。65C816はApple IIGS のCPUであり、改良版がスーパーファミコン のCPUとして使用された。
65186の65は65C02互換モードに由来し、816はMPUが8ビットと16ビット のレジスタ サイズを選択可能であることを示している。16ビットレジスタの利用に加え、W65C816Sはメモリアドレス を24ビット に拡張し、最大16メガバイト (64kバイト×256バンク)のランダムアクセスメモリ をサポートする。また、強化された命令セット、16ビットのスタックポインタ 、およびシステムハードウェア管理を改善するいくつかの新しい電気信号を備えている。
リセット時には、W65C816Sは「エミュレーションモード」で起動し、65C02としてほぼ動作する。その後、2命令のシーケンスによって「ネイティブモード」に切り替えることができ、これによりすべての強化機能を有効にしつつ、多くの65C02ソフトウェアと高い後方互換性 を維持する。しかし、65C02のPDIP40バージョンが先代NMOS版のピン互換品であるのに対し、PDIP40 W65C816Sは6502ファミリーの他のどのMPUともピン互換性がない。
W65C802 または65802 は、65C816と完全なソフトウェア互換性を持ちながら、6502および65C02と電気的互換性がある。そのため、65C802は6502または65C02を搭載したほとんどのシステムで代替品として使用できた。ただし、65C802は24ビットアドレスを出力することができず、アドレス空間が64KBに制限される。65C802は現在製造されていない。
歴史
PLCC-44 版のW65C816S マイクロプロセッサがシングルボードコンピュータ に取り付けられている様子
1981年、WDCの創設者でありCEO であるビル・メンシュ は、主にロックウェルセミコンダクタ とシナーテック の生産パートナーとともに、65C02の開発を開始した。65C02の主な目標は、オリジナルの6502のNMOSプロセスからCMOSプロセスへの移行であり、これにより、クロックスピードに関係なく消費電力を1 ⁄10 から1 ⁄20 に抑えることが可能となった。また、最大サポートクロックスピードを向上させる能力も求められた。65C02の設計では、NMOS 6502に存在したチップエラッタ(例:悪名高いJMP (<addr>)
バグ)を解消し、新しい命令や既存命令用の新しいアドレッシングモードを導入した。
1982年、メンシュはアップルコンピュータ と協議し、グラフィックスや音響機能が改善されたApple II シリーズの新しいバージョンのためにW65C816Sの開発を開始した。Appleは、Apple IIで使用されていた6502とソフトウェア互換性があり、より多くのメモリにアクセスし、16ビットのデータワードをロードおよび保存できるMPUを求めていた。65C816は1984年3月に完成し、その年の後半にサンプルがAppleとAtari に提供され、1985年に正式リリースされた。メンシュの設計プロセスには、妹のキャサリンも加わり、デバイスのレイアウトの一部を担当した。
W65C802P
同じプロセスで65C802も開発された。65C802は65C816と内部的に同一であり、両者は同じ製造ラインで生産され、最後のメタル化段階で外部ピンに接続される際の工程が異なった。65C802はピンがオリジナルの6502と同じレイアウトになっており、これにより代替品として使用可能でありながら、CPUの16ビット処理を利用できた。ただし、オリジナルのピン配置を使用していたため、16本のアドレスピンしか持たず、外部メモリは64KBしかアクセスできなかった。通常、ハードウェアメーカーはゼロからプロジェクトを設計する際に65C816を使用したため、65C802は生産が中止された。
Appleはその後、65C816をApple IIGS コンピュータに採用した。65C816の基本設計は、1980年代中期から1990年代初頭にかけてVLSIテクノロジー [ 7] 、GTE 、三洋電機 などによってセカンドソース で供給された。
ルネサスエレクトロニクス のマイクロコンピュータ ・7700ファミリは65816と共通した設計だが、完全な互換性はない。
1990年代には、65C816と65C02の両方が完全なスタティックコア に変換され、プロセッサのØ2クロック を完全に停止してもレジスタ内容を失わないようになった。この機能とSRAM の使用により、待機状態で最小限の電力を使用する設計が可能となった。
2024年4月年現在[update] 、W65C816SはWDCから40ピンのPDIP 、PLCC44 、または44ピンのTQFP パッケージとして入手可能であり、W65C265を介してMCU として[ 8] 、およびASIC統合 用のIPコアとして提供されている[ 9] [ 10] (例:Winbond のW55V9xシリーズのテレビエデュテインメント 用IC [ 11] )。
機能
WDC 65c816の特徴:
完全にスタティックなCMOS 設計により、低消費電力(1MHzで300 マイクロアンペア )と高い耐ノイズ性を実現。
広範な動作電圧 範囲: 1.8 V ~ 5.0 V ± 5%。
広いクロック周波数 範囲。公式には5Vで最大14MHz(SuperCPU では20MHz)に対応し、単一フェーズクロックソースを使用。
エミュレーションモードにより、NMOS 6502およびCMOS 65C02と大部分でソフトウェア互換性を保持(未記載のオペコード を除く)。65C816の256オペコードはどちらの動作モードでも機能する。
24ビットメモリアドレッシングで16 MBのアドレス空間 にアクセス可能。
16ビットのALU 、アキュムレータ (C
)、スタックポインタ (SP
)、およびインデックスレジスタ (X
と Y
)。
16ビットの直接ページ(ゼロページ)レジスタ (DP
)。
8ビットのデータバンク (DB
) およびプログラムバンク (PB
) レジスタは、24ビットアドレスのビット16–23を生成。プログラムとデータバンクレジスタを分離することで、プログラムのセグメント化 と16MBのリニアデータアドレッシングを実現。
メモリ判定用の有効データアドレス (VDA
) および有効プログラムアドレス (VPA
) 制御出力。
割り込みベクタ取得時を示すベクタプル (VPB
) 制御出力。
バスエラー(例:ページフォルト やメモリアクセス違反)修正用のアボート (ABORTB
) 入力と関連ベクタ。
24のアドレッシングモード (元の6502モード13種、新命令セット92種を含む)。
RAM 間のデータ構造を効率的にコピーするブロックコピー命令(MVN
と MVP
)。
電力消費をさらに削減するウェイトフォーインタラプト (WAI
) およびストップザクロック (STP
) 命令。
コプロセッサ 命令 (COP
) により、浮動小数点演算ユニット などのコプロセッサ構成をサポート。
将来の設計へのリンクとして、予約済み「エスケープ」(WDM
)命令(WDMは設計者ビル・メンシュ のイニシャルに由来)。
以前のモデルとの比較
2つの動作モード
65C816には「エミュレーションモード」と「ネイティブモード」の2つの動作モードがある。「エミュレーションモード」では、16ビット操作が無効化され、インデックスレジスタが8ビットに制限されるため、6502に非常に近い動作をする。このモードではオペコードのサイクルタイミングも6502と同じである。一方、「ネイティブモード」ではすべての新機能が利用可能になる。CPUは電源投入時またはリセット時に自動的にエミュレーションモードに入り、65(C)02の代替品として動作するが、異なるピン配置に対応するために回路変更が必要。
16ビットレジスタ
ネイティブモードで動作する65C816の最も顕著な変更点は、さまざまなレジスタが8ビットから16ビットに拡張されることである。この変更は、アキュムレータ(A
)、X
およびY
のインデックスレジスタ 、およびスタックポインタ (SP
)に影響を与える。ただし、プログラムカウンタ (PC
)はもともと16ビットなので影響を受けない。
ネイティブモードでは、ステータスレジスタ内の2ビット(ビット4と5)の意味が変わる。オリジナルの6502ではビット4は未使用だったが、「ブレイク」(b
)フラグとして参照され、ビット5は未使用だった。ネイティブモードでは、ビット4はx
フラグ、ビット5はm
フラグに変わり、インデックスレジスタ (x
)およびアキュムレータ/メモリ(m
)が8ビットまたは16ビットのサイズになるかを制御する。これらのビットは、プロセッサの電源投入時またはリセット時には1に固定されているが、ネイティブモードに切り替えると変更可能になる。
ネイティブモードでは、REP
およびSEP
命令を使用してm
およびx
ステータスビットを操作することで、プログラマがレジスタサイズを16ビットまたは8ビットに設定できる。アキュムレータとインデックスレジスタのサイズを個別に設定できるため、たとえば、アキュムレータを8ビット、インデックスレジスタを16ビットに設定することで、64KB範囲内の個々のバイトを操作する際にポインタ演算を省くことができる。
レジスタサイズが16ビットに設定されている場合、メモリアクセスでは隣接する2バイトを1クロックサイクルごとにフェッチまたはストアする。そのため、ROR <addr>
のような読み取り-修正-書き込み命令を使用すると、アキュムレータが16ビットの場合は隣接する2バイトに影響を与え、クロックサイクルも8ビットの場合より多く消費する。同様に、すべての算術および論理操作は16ビット演算となる。
24ビットアドレッシング
ネイティブモードでのもう1つの重要な変更点は、メモリモデルが元の6502の16ビットフォーマットから24ビットフォーマットに拡張されたことである。65C816は8ビットのデータバンクレジスタ(DB
)およびプログラムバンクレジスタ(PB
)を使用してアドレスのビット16–23を設定し、24ビットアドレスを生成する。これにより、64KBの連続したメモリセグメント(例: $xx0000-$xxFFFF
)がバンクアドレスxx
で定義される。両方のレジスタは電源投入時またはリセット時に$00
に初期化される。
命令やオペランドのフェッチサイクルでは、PB
がプログラムカウンタ(PC
)に前置されて24ビットの有効アドレスが形成される。ただし、PC
がオーバーフローしてゼロに戻ってもPB
はインクリメントされない。そのため、プログラムは実行中のバンクの範囲内に制限される。バンクをまたぐジャンプやサブルーチン呼び出しには「ロング」ジャンプやサブルーチン呼び出しを使用する必要がある。プログラムから直接PB
を変更する手段はない。
データのフェッチやストアサイクルでは、DB
が16ビットデータアドレスに前置されて24ビットの有効アドレスが形成され、これによりデータがアクセスされる。この特性により、16ビットアドレスを使用する6502または65C02コードが正常に動作する。PB
とは異なり、DB
はプログラム制御で変更可能で、16ビットアドレッシングの範囲を超えるデータにアクセスするために使用されることがある。また、DB
は、インデックス付きアドレスが現在のDB
のバンクの範囲を超えた場合、一時的にインクリメントされる。
さらに、16ビットの直接ページレジスタ(DP
)が追加された。このレジスタは、かつて「ゼロページ」と呼ばれていた領域の基準アドレスを設定する。直接ページアドレッシングでは8ビットアドレスを使用するため、16ビットまたは24ビットアドレスを使用する場合よりも高速。また、間接参照を提供する一部のアドレッシングモードは直接ページでのみ可能。65(c)02では直接ページは常にメモリの最初の256バイト(ゼロページ)に固定されているが、65C816のネイティブモードでは直接(ゼロ)ページをバンク$00
内の任意の位置に再配置できる。ただし、DP
がページ境界(例: $xx00
)に設定されていない場合、1サイクルのアクセスペナルティが発生する。
モードの切り替え
現在の動作モードはエミュレーションビット(e
)に格納されている。ステータスレジスタ(SR
)の既存の6つのフラグセットに新しいx
およびm
ビットを追加したため、新しいモードビットを保持するためのビットが不足した。その代わりに、新しいモードビットは「不可視」とされ、直接アクセスすることができないユニークな解決策が採用された。XCE
(eX change C arry with E mulation)命令を使用して、エミュレーションビットの値とキャリービット(c
、SR
のビット0)を交換する。たとえば、プロセッサの起動後にネイティブモードに入る場合、CLC
でキャリービットをクリアし、次にXCE
を使用してキャリービットをエミュレーションビットに書き込む。 65C02エミュレーションモードに戻るには、SEC
の後にXCE
を実行する。
内部的には、65C816は完全な16ビット設計である。SR
内のm
およびx
ビットは、ユーザーレジスタ(アキュムレータおよびインデックス)がシステムにどのように見えるかを決定する。リセット時には、65C816は6502エミュレーションモードで起動し、m
およびx
は1
にロックされている。このため、レジスタは8ビットサイズに固定される。アキュムレータの最上位バイト(B
-アキュムレータ)は直接アクセスできないが、XBA
命令を使用して最下位バイト(A
-アキュムレータ)と交換することができる。インデックスレジスタ(X
およびY
)には対応する操作はなく、それらの最上位バイトは$00
にロックされている。
ネイティブモードに切り替えると、X
およびY
の最上位バイトはゼロになり、B
-アキュムレータの値は変更されない。SR
内のm
ビットがクリアされると、B
-アキュムレータはA
-アキュムレータと結合して16ビットレジスタ(C
-アキュムレータ)を形成する。アキュムレータまたはメモリを含むロード/ストア操作や算術/論理操作は16ビット操作になり、16ビット値をフェッチ/ストアするために2バスサイクルが必要である。
SR
内のx
ビットがクリアされると、両方のインデックスレジスタが16ビットに設定される。アドレスをインデックス化するために使用される場合(例: LDA SOMEWHERE,X
)、インデックスレジスタ内の16ビット値が基準アドレスに加算されて有効アドレスが形成される。
SR
内のm
ビットがセットされると、アキュムレータは再び8ビットレジスタに戻り、アキュムレータに対する操作は一部の例外を除いて8ビット操作になる。アキュムレータが16ビットに設定されている間に保持していたB
-アキュムレータの値はそのまま保持される。例外は、直接ページレジスタ(DP
)およびスタックポインタ(SP
)をアキュムレータに転送する命令であり、ネイティブモードではSR
内のm
ビットの状態に関係なく、常に16ビット幅で実行される。
SR
内のx
ビットがセットされると、インデックスレジスタは8ビットに戻り、それらが16ビット幅であった間に保持していた最上位バイトの値は失われる。アセンブラで記述する場合は要注意である。
主な採用ハード
Foenix Retro Systems C256 U/U+ モデル[ 21] および F256K モデル[ 22]
参考文献
引用
書籍
参考資料
65C816 Datasheet ; Western Design Center; 55ページ; 2018年。
Eyes, David および Ron Lichty; Programming the 65816: Including the 6502, 65C02, and 65802 ; Brady Publishing; 636ページ; 2015年。
Fischer, Michael; 65816/65802 assembly language programming ; Osborne/McGraw-Hill; 686ページ; 1986年。
外部リンク