MC6800
|
Motorola MC6800 Data 8/16bit / Address Bus 16bit Cycle 1.0MHz〜2.0MHz (1974) |
姉妹型:「MC6802」
小規模システム用。
バックアップRAMが内蔵された。
●6800の特徴
「68系」の特徴としては「アドレッシング」の明確化がある。
(80系にも同様のものがあるが、ここまではっきりと体系化はされていない)
「アドレッシング」の概念は「C言語」などのポインタの概念と親和性が高い(というかそのもの)。
この頃からアセンブリ言語と併用する形でコンパイラ型の高級言語プログラミングも発展していった。
●6800のピン配列
| Vss | 1 | 40 | RESET | |
| HALT | 2 | 39 | TSC | |
| φ1 | 3 | 38 | N.C. | |
| IRQ | 4 | 37 | φ2 | |
| VMA | 5 | 36 | DBE | |
| NMI | 6 | 35 | N.C. | |
| BA | 7 | 34 | R/W | |
| Vcc | 8 | 33 | D0 | |
| AC | 9 | 32 | D1 | |
| A1 | 10 | 31 | D2 | |
| A2 | 11 | 30 | D3 | |
| A3 | 12 | 29 | D4 | |
| A4 | 13 | 28 | D5 | |
| A5 | 14 | 27 | D6 | |
| A6 | 15 | 26 | D7 | |
| A7 | 16 | 25 | A16 | |
| A8 | 17 | 24 | A14 | |
| A9 | 18 | 23 | A13 | |
| A10 | 19 | 22 | A12 | |
| A11 | 20 | 21 | Vss |
●6800の命令
命令(ニーモニック)は以下の構成となっている。
ニーモニック [DEST[,SRC]]
データの流れは「DEST」←「SRC」となる。
※「a」は8bitアキュムレータ「A,B」を表す
※「PC」は16bitレジスタである「プログラムカウンタ」(PC)を表す
※「SP」は16bitレジスタである「スタックポインタ」(SP)を表す
※「IX」は16bitレジスタである「インデックスレジスタ」(IX)を表す
インデックスレジスタは高級言語における「配列」の位置を表す
(「MC6800」の場合は16bit=2bytesの単位となる)
※「f」はフラグ「H,N,Z,V,C」を表す (「I」は割込の許可・禁止を表すため、演算結果には影響されない)
フラグは演算結果の状態を表す (CCR:コンデションコードレジスタ)
bit5「H」:算術演算のbit3/4間(Half)でAUX 桁あふれ(Carry)、桁の繰り下がり(Borrow)があった場合、成立
bit4「I」:割込マスク (1で割込禁止)
bit3「N」:最上位bit(MSB)が「1」の場合、成立 (負数)
bit2「Z」:0になった場合、成立
bit1「V」:オーバーフローの場合、成立
bit0「C」:Carryがあった場合、もしくはBorrowがない場合、成立
●アキュムレータ関連命令 (転送、演算など)
| ニーモニック | Immed. | Direct | Index | Extend | Impli. | 動作 |
|---|---|---|---|---|---|---|
| LDDa | O | O | O | O | X | アキュムレータに指定値をロード(読込) |
| STAa | X | O | O | O | X | アキュムレータからストア(格納) |
| INC | X | X | O | O | X | 指定値をインクリメント(+1) |
| INCa | X | X | X | X | O | アキュムレータをインクリメント |
| DEC | X | X | O | O | X | 指定値をデクリメント(-1) |
| DECa | X | X | X | X | O | アキュムレータをデクリメント |
| ADDa | O | O | O | O | X | 指定値を加算 |
| ABA | X | X | X | X | O | アキュムレータ「A」に「B」の値を加算 |
| ADCa | O | O | O | O | X | 指定値に「C」フラグを加えた値を加算 |
| SUBa | O | O | O | O | X | アキュムレータから指定値を減算 |
| SBA | X | X | X | X | O | アキュムレータ「A」から「B」の値を減算 |
| SBCa | O | O | O | O | X | 指定値に「C」フラグを加えた値を減算 |
| ANDa | O | O | O | O | X | 指定値との論理積 |
| BITa | O | O | O | O | X | 指定値との論理積(値は反映せず=bit test) |
| ORAa | O | O | O | O | X | 指定値との論理和 |
| EORa | O | O | O | O | X | 指定値との排他的論理和 |
| COM | X | X | O | O | X | 指定値の否定値 |
| COMa | X | X | X | X | O | アキュムレータの否定値 |
| NEG | X | X | O | O | X | 指定値の符号反転 |
| NEGa | X | X | X | X | O | アキュムレータの符号反転 |
| CLR | X | X | O | O | X | 指定値を0にする |
| CLRa | X | X | O | O | X | アキュムレータを0にする |
| CMPa | X | X | X | X | O | アキュムレータと指定値を比較 |
| CBA | X | X | X | X | O | アキュムレータ「A」と「B」の値を比較 |
| TST | X | X | O | O | X | 指定値から0を減算(=テスト:フラグへの反映) |
| TSTa | X | X | X | X | O | アキュムレータから0を減算 |
| ROL | X | X | O | O | X | 指定値を左ローテーション |
| ROLa | X | X | X | X | O | アキュムレータを左ローテーション |
| ROR | X | X | O | O | X | 指定値を右ローテーション |
| RORa | X | X | X | X | O | アキュムレータを右ローテーション |
| ASL | X | X | O | O | X | 指定値を左算術シフト |
| ASLa | X | X | X | X | O | アキュムレータを左算術シフト |
| ASR | X | X | O | O | X | 指定値を右算術シフト |
| ASRa | X | X | X | X | O | アキュムレータを右算術シフト |
| LSR | X | X | O | O | X | 指定値を右論理シフト |
| LSRa | X | X | X | X | O | アキュムレータを右論理シフト |
| PSHa | X | X | X | X | O | アキュムレータをプッシュ(「SP」に保存 →「SP」アドレスのインクリメント) |
| PULa | X | X | X | X | O | アキュムレータへポップ (「SP」から取出→「SP」アドレスのデクリメント) |
| TAB | X | X | X | X | O | アキュムレータ「A」の値を「B」に転送 |
| TBA | X | X | X | X | O | アキュムレータ「B」の値を「A」に転送 |
| DAA | X | X | X | X | O | BCD(Binary-Coded Decimal:二進化十進)補正 |
●「IX」「SP」関連命令
| ニーモニック | Immed. | Direct | Index | Extend | Impli. | 動作 |
|---|---|---|---|---|---|---|
| LDX | O | O | O | O | X | 「IX」に指定値をロード |
| LDS | O | O | O | O | X | 「SP」に指定値をロード |
| STX | X | O | O | O | X | 「IX」からストア |
| STS | X | O | O | O | X | 「SP」からストア |
| TXS | X | X | X | X | O | 「IX」からデクリメントした値を「SP」に転送 |
| TSX | X | X | X | X | O | 「SP」にインクリメントした値を「IX」に転送 |
| CPX | O | O | O | O | X | 「IX」と指定値を比較 |
| INX | X | X | X | X | O | 「IX」をインクリメント |
| INS | X | X | X | X | O | 「SP」をインクリメント |
| DEX | X | X | X | X | O | 「IX」をデクリメント |
| DES | X | X | X | X | O | 「SP」をデクリメント |
●フラグ関連命令
| ニーモニック | Impli. | 動作 |
|---|---|---|
| CLC | O | 「C」フラグをクリア(0にする) |
| SEC | O | 「C」フラグをセット(1にする) |
| CLV | O | 「V」フラグをクリア |
| SEV | O | 「V」フラグをセット |
| CLI | O | 「I」フラグをクリア |
| SEI | O | 「I」フラグをセット |
| TAP | O | アキュムレータ「A」の値を「CCR」に転送 |
| TPA | O | 「CCR」の値をアキュムレータ「A」に転送 |
●「PC」関連命令 (ジャンプ)
| ニーモニック | Index | Extend | Impli. | 動作 |
|---|---|---|---|---|
| JMP | O | O | X | ジャンプ(「PC」に指定値をロード) |
| JSR | O | O | X | 「PC」が示す絶対アドレスをコール(サブルーチン:元の「PC」が「SP」に保存され、リターンのときそのアドレスに戻る) |
●「PC」関連命令 (分岐:PC相対のみ)
| ニーモニック | 動作 |
|---|---|
| BRA | 分岐(Branch) |
| BCC | 「C」フラグが0のとき分岐(≧:Unsigned) |
| BCS | 「C」フラグが1のとき分岐(<:Unsigned) |
| BVC | 「V」フラグが0のとき分岐 |
| BVS | 「V」フラグが1のとき分岐 |
| BNE | 「Z」フラグが0のとき分岐(≠) |
| BEQ | 「Z」フラグが1のとき分岐(=) |
| BPL | 「N」フラグが0のとき分岐(>0) |
| BMI | 「N」フラグが1のとき分岐(<0) |
| BHI | 「C」「Z」フラグのうち、最低1つが0のとき分岐(>:Unsigned) |
| BLS | 「C」「Z」フラグのうち、どちらか1つが1のとき分岐(≦:Unsigned) |
| BGE | 「N」「V」フラグの排他的論理和が0のとき分岐(≧:Signed) |
| BLT | 「N」「V」フラグの排他的論理和が1のとき分岐(<:Signed) |
| BGT | 「Z」フラグと「N]「V」フラグの排他的論理和の論理和が0のとき分岐(>:Signed) |
| BLE | 「Z」フラグと「N]「V」フラグの排他的論理和の論理和が1のとき分岐(≦:Signed) |
| BSR | 「PC」とオフセット値が示す相対アドレスでコール(サブルーチン:「PC」が「SP」に保存され、リターンのときそのアドレスに戻る) |
●復帰命令 (リターン)
| ニーモニック | Index | Extend | Impli. | 動作 |
|---|---|---|---|---|
| RTS | X | X | O | サブルーチンから復帰(「SP」に保存されたアドレスを「PC」にロード) |
●その他命令
| ニーモニック | Index | Extend | Impli. | 動作 |
|---|---|---|---|---|
| NOP | X | X | O | 何もしない※ |
| RTI | X | X | O | 割込処理ルーチンから復帰(割込時に保存されたレジスタを復帰) |
| SWI | X | X | O | ソフトウェア割込 |
| WAI | X | X | O | 割込待ち(レジスタは「SP」に保存される) |
※「i8080」のコードは「&H00」だが、「MC6800」では「$01」である
このため、「0」クリアでは「MC6800」の場合「$00:未定義命令」の実行になることに留意