MOS 6502

MOS 6502はアメリカのモステクノロジーが1975年に発表した8ビット MPU  である。

1977年に発売されたApple II に搭載されて一躍有名になり、その後PET 2001、CBM3032、VIC-1001等、主にコモドール社の製品で採用されていた。日本ではパソコン用のCPUとしての採用例は比較的少ないほうだが、互換CPUがファミリーコンピュータやPCエンジンに採用されている。

1. 概要
-----

モトローラのMC6800をモデルに、レジスタセットの簡素化をはかり、多彩なアドレッシングモードと良く練られたパイプライン機構を持ち、同時期に設計された同一程度動作クロックの他CPU  群に比べて格段に高速に演算処理を実行できた。レジスタを小さく、少なくし、ハードウェア規模を減らして高速化を図ったのではないかと見られる節がある一方で、以下のような特徴を持つ。

0から255番地までのメモリを1バイト少ないコードでアクセスできる
アドレッシングモードが豊富
Xレジスタでインデックストインダイレクト、Yレジスタでインダイレクトインデックストと動作が異なる当時の競合製品と比較して破格の安値がつけられたことでアメリカのホビーストの間ではポピュラーな存在となった。設計はMC6800によく似ていて、バスが互換のほか、ピン配置も一部を除いて揃っている。68系と同様に「MPU」と呼称されることがあるが、MC6800シリーズと違ってバイトオーダはリトルエンディアンである。KIM-1にも搭載された初期バージョンのチップでは、ROR 命令に不具合がありドキュメントに同命令を掲載していなかった。

2. 訴訟
-----

モステクノロジーはモトローラからスピンアウトしたチームで、当初に発表したMCS6501で起こったモトローラとの特許係争もあって、1976年に資金難から、コモドール傘下のコモドールSemiconductor Group  となっていたが、ICのマーキングにはMOSブランドがしばらく使用されていた。同社は1994年にコモドールごと倒産した。セカンドソースは多社にわたるが、ロックウェル・インターナショナル  社やウェスタンデザインセンター、Synertek、GTEなどがあり、モステクノロジーの後を引き継ぐ形になっている。

最初、NMOSプロセスで生産されたが、後にロックウェルとウエスタンデザインセンターからCMOS版の65C02が登場した。65C02では、STZやBRAといった命令が追加され、6502にあったバグが修正されたが、つくられた65C02の拡張命令のコードは両者で異なっていた。

周辺チップとしては、6502用のタイミングにあわせた6521PIAや6522、6551  などが用意されていた。

3. 6502のレジスタセット
---------------


6502のレジスタはPCが16ビットであることを除き、すべて8ビットである。
スタックポインタも上位8ビットが$01に固定されており、スタック領域としては第1ページの256バイトのみが使用可能。

4. 命令セット
--------

命令はバイト単位で、1 - 3 バイトの可変長命令である。
主な命令内容は以下の通り
メモリまたはイミディエイト値からレジスタへのロード
レジスタからメモリへのストア
レジスタ値を別のレジスタへ転送
Aレジスタを用いた次の処理
加算
減算
ビット論理演算
比較演算
絶対番地による無条件分岐
サブルーチン分岐・リターン
Pレジスタ値による相対番地への条件分岐
スタックへのプッシュ・プル
Pレジスタへのセット・クリア
加減算命令は、必ずキャリーを伴って行われるため、単に2値の加減算を行う場合には、必ずCLCまたはSEC命令でキャリーを初期化する必要がある。
リセット直後は$FFFC番地に格納されたアドレスから増加する方向に実行が行われる。また、スタックポインタはアドレスが減少する方向に自動的に減算されるため、スタックはメモリ下位番地に向かって伸びる。
アセンブリ言語において、ニーモニックは必ず3 文字で表記される。
豊富なアドレッシングモードを持つ。
A,P以外のレジスタをスタックに直接プッシュ・プルする命令はない。
インデックスレジスタの値は+1,-1できるが、算術・論理演算に使用する命令はない。

4.1. 主なアドレッシングモード
-----------------

ただし、//n//には16進1桁の数値を指定する。

ゼロページではアブソリュートより命令のコード数が1バイト少なくなり、所要サイクル数も変化する。
MC6800シリーズは「16 ビットインデックス値+8 ビット定数」になるのに対して、6502はインデックスレジスタが2 つで「16 ビット絶対番地+8 ビットインデックス値」になっているのが最大の違いとなっている。比較すると、インデックスレジスタの重要性が増す代わりに、ポインタを扱うのは難しくなっている。

5. 割り込み
-------

6502の割り込み処理は三種類ある。それぞれの割り込みにつき、所定のアドレスに割り込み処理ルーチンの先頭アドレスが記載されており、割り込みが入るとそこへ制御を移す。割り込み処理ルーチンを終了して元のルーチンに復帰するにはRTI 命令  を使用する。



6. 互換CPU
--------

65C02  CMOS版で、命令が拡張されている。 W65C02  CMOS版で、Rockwellのものとは別の形で命令が拡張されている。Apple IIe, IIcなどに採用。 6507 6502のアドレスを13ビットに削減したもの。Atari 2600で使用。 6510 6502にクロック入力ピンとI/Oポートを追加。VIC-20  の後継機、コモドール64、マックスマシーンで使用。改良版の7501/8500/8501というバリエーションも存在する。 8502 6510を高速化、コモドール128で使用。 RP65C02  CMOS版6502。Rockwell製NMOS版6502とピンコンパチブル、命令コンパチブルであり、さらに59の命令の追加、パワーダウン、スタンバイモードなどCMOSの特長を備える。 RP2A03  6502から10進演算関連の機能が削除され、サウンド機能が追加されているもの。ファミリーコンピュータで使用。CPUのIPコアも存在した。 HuC6280 ハドソンが開発。高クロック化がはかられ独自に命令拡張がなされたもの。PCエンジンで使用。 65816  Western Design Centerが開発。レジスタの16ビット化を含む多くの機能拡張がなされたもの。Apple IIGSやスーパーファミコンで採用。 740ファミリ ルネサス エレクトロニクス社製の8ビットMCUコア。7200、740/7450/7470、7600、38000シリーズがある。8ビット定数を直接ゼロページに入れる命令、乗除算命令を備える。ビット操作・ブランチ命令もあるが、両65C02のものとは互換性がない。スタックは1ページではなくゼロページに置くことも可能。ROM・RAMと周辺機能を内蔵し、ゼロページの下位はI/Oレジスタとなっている。 7700ファミリ ルネサス
エレクトロニクス社製の16ビットMCUコア。7700、7900シリーズがある。公式にはうたっていないが内容的には6502を拡張したもので、65816とはレジスタ構成と命令セットの多くが共通であり、さらに多バイト長コードの命令が増えている。6502エミュレーションモードはない。ビット操作・ブランチ命令は両65C02や740シリーズとは互換性がない。ROM・RAMと周辺機能を内蔵する。 YM-2002  ヤマハ製の互換CPU。ゼロページが2ページあり、Z80の表レジスタ、裏レジスタのように切り替えられる。ホームコンピュータで使用した。 SPU ソニー製のチップまたはCPUコアで、8ビットのアキュムレータの上下の4ビットの部分を交換するXCN  と8ビット×8ビット=16ビットの乗算命令が追加されている。スーパーファミコンのDSP制御用としても使用された。なお、ARM  の設計は6502を参考に行われたとされることがあるが、設計者らは6502を参考に設計を行ったわけではない。ARMの命令セットを設計したソフィー・ウィルソンは、6502とARMにはほとんど共通点がないと述べている。別のインタビューでは、メモリアクセスが比較的に高性能であり、6502はそれを利用するバランスがすぐれていた、という事のみ言及している。

7. 脚注
-----

8. 関連項目
-------

KIM-1、SYM-1、AIM-65

9. 外部リンク
--------

[1]
[2]