MOS 6502
1975年、アメリカのモステクノロジー社が開発した
8ビットマイクロプロセッサ、MOS 6502は、その後の
パーソナルコンピュータや家庭用ゲーム機の歴史に大きな影響を与えました。特に、
1977年に発売された
Apple IIに搭載されたことで広く認知され、安価ながら高い性能を発揮する
CPUとして、急速に普及していきました。コモドール社のPET 2001やCBM3032、VIC-1001など多数の製品に採用されたほか、日本では互換
CPUが
ファミリーコンピュータや
PCエンジンといったゲーム機にも使われました。
設計思想と特徴
6502の設計は、同時期に先行していた
モトローラ社の
MC6800を参考にしつつ、独自の改良が加えられています。レジスタ構成はよりシンプルにまとめられ、多彩な
アドレッシングモードと効率的なパイプライン処理を備えることで、同じクロック周波数で動作する他の
CPUに比べて優れた演算処理能力を実現しました。レジスタの数を少なく、ハードウェア規模を小さく抑えることで、性能とコストの両立を図ったと推測されます。
技術的な特長としては、アドレス空間の冒頭にある256バイト(ゼロページ)へのアクセスを、より短いコードで高速に行える点が挙げられます。これは、頻繁に使用するデータを置くことで、プログラムの効率を高めるのに有効でした。また、
アドレッシングモードが非常に豊富であり、特にインデックスレジスタ(XおよびY)を使った間接アドレス指定において、それぞれ異なる動作をすることで柔軟なメモリ操作を可能にしています。
市場における最大の武器は、競合製品と比較して圧倒的に安価だったことです。これにより、黎明期のコンピュータホビーストたちの間で広く普及し、開発が活発化しました。設計面では
MC6800と似ており、バス互換性や一部のピン配置共通性を持つ一方、データのバイト順序に関しては
MC6800がビッグ
エンディアンなのに対し、6502はリトル
エンディアンを採用しています。初期のチップには特定の命令に
バグが存在し、ドキュメントから一時的に削除されたこともありました。
開発元の変遷と派生
モステクノロジーは元々
モトローラから独立したエンジニアによって設立されましたが、特許問題などから経営が悪化し、
1976年にコモドール社の傘下に入り、コモドールSemiconductor Group (CSG)となりました。しかし、製品にはしばらくの間「MOS」ブランドが維持されました。最終的に、モステクノロジーは
1994年に親会社であるコモドールと共に倒産しました(ただし、Mostek社とは別の企業です)。
その後、
ロックウェル・インターナショナルやウェスタンデザインセンター(WDC)、Synertek、GTEなど、多くの企業が
セカンドソースとして6502およびその派生チップの製造を引き継ぎました。当初NMOSプロセスで製造されていた6502ですが、後年にはRockwellやWDCから低消費電力の
CMOS版である65C02が登場しました。65C02では新規命令の追加や既存
バグの修正が行われましたが、Rockwell版とWDC版では追加された拡張命令に互換性のないものも見られました。6502をサポートする周辺チップとして、6821互換の6521 PIAや、6522、6551 ACIAなどが開発されました。
アーキテクチャ概要
6502のレジスタ構成は、プログラムカウンタ(PC)のみが16ビットで、アキュムレータ(A)、インデックスレジスタ(X, Y)、ステータスレジスタ(P)、
スタックポインタ(S)は
8ビットです。
スタック領域はアドレス$0100から$01FFまでの256バイトに固定されており、
スタック操作でポインタはアドレスが減少する方向に動きます。
命令は1~3バイトの可変長形式で構成されます。基本的なデータ転送、メモリや即値との算術・論理演算、プログラムの分岐やサブルーチン呼び出し、
スタック操作などを行います。加減算はキャリーを伴うため、事前にキャリーフラグを適切に設定する必要があります。リセット時の実行開始アドレスは$FFFCのベクタに従います。ニーモニックは通常3文字で表記されます。
アドレッシングモードが非常に豊富であり、特にゼロページアクセスによる高速化が特徴です。
MC6800とのインデックス方式の違いは特徴的で、6502はインデックスレジスタの値がアドレスオフセットとして使われます。AとP以外のレジスタを直接
スタックへプッシュ/プルする命令はありません。3種類の割り込みをサポートし、各割り込み発生時には所定のベクタ経由でハンドラが実行されます。RTI命令で元の処理に戻ります。
主な互換・派生CPU
6502ファミリは多岐にわたる派生チップを生みました。
- - 65C02: 消費電力を抑えたCMOS版で命令が拡張されました (Rockwell, WDC)。
- - 6507: アドレス空間を13ビットに縮小したコスト削減版でAtari 2600に採用されました。
- - 6510/8502: クロック入力ピンやI/Oポートを追加、高速化されたモデルでコモドール64/128に搭載されました。
- - RP2A03: 10進演算機能が削除され、サウンド機能が追加されたモデルでファミリーコンピュータに搭載されました (RICOH)。
- - HuC6280: 高いクロック周波数で動作し、独自に命令が拡張されたモデルでPCエンジンに搭載されました (ハドソン)。
- - 65816 (W65C816): 16ビット拡張版でレジスタが16ビット化されるなど大幅な機能強化が図られ、Apple IIGSやスーパーファミコンに採用されました (WDC)。
- - 740ファミリ / 7700ファミリ: ルネサス エレクトロニクス(旧三菱電機)製のマイクロコントローラに搭載された6502系コアです。
- - その他、ヤマハのYM-2002、ソニーのSPUなどがあります。
なお、
ARMアーキテクチャの設計が6502を直接参考にしたという説が見られることがありますが、ARMの設計者自身はこれを否定しており、両者の命令セットには共通点はほとんどないと述べています。