i8080
|
Intel 8080/A Data 8/16bit / Address Bus 16bit Cycle 2.0MHz〜3.0MHz (1974/10) |
改良型:「i8085」
1976年にリリースされる。
命令の追加と5Vへの単一電源化、割込コントローラ内蔵、クロックジェネレータ、システムコントローラ内蔵などの改良がなされている。
(周波数3.0MHz〜5.0MHz)
これは余談だが、「ゲームセンターあらし」の主人公「石野あらし」。
彼が使う必殺技「炎のコマ」は1秒間に200万回以上の速度でレバーやボタンを操作するという設定である。
これは当時のゲームに「i8080」(動作クロック2MHz)が使われていたことに由来するものであろう。
例えば、今のCPUだと1秒間に30億回(=3GHz)程度とすると…
手の動作の移動距離が30p程度だとすると0.3m×3,000,000,000=900,000,000m=900,000kmとなり、光速を超えてしまう。
本当に余談。
本当の余談は嶋氏が開発者特権として、8080のフォトマスク余白にサインの代わりとして自身の家紋を入れてあるということである。
(フォトマスクとは電子回路のパターンを刻んだ、いわば原版で基板に電子回路を転写するためのものである)
●8080のピン配列
| A10 | 1 | 40 | A11 | |
| GND | 2 | 39 | A14 | |
| D4 | 3 | 38 | A13 | |
| D5 | 4 | 37 | A12 | |
| D6 | 5 | 36 | A15 | |
| D7 | 6 | 35 | A9 | |
| D3 | 7 | 34 | A8 | |
| D2 | 8 | 33 | A7 | |
| D1 | 9 | 32 | A6 | |
| D0 | 10 | 31 | A5 | |
| Vbb | 11 | 30 | A4 | |
| RESET | 12 | 29 | A3 | |
| HOLD | 13 | 28 | Vdd | |
| INT | 14 | 27 | A2 | |
| φ2 | 15 | 26 | A1 | |
| ITNE | 16 | 25 | A0 | |
| DBIN | 17 | 24 | WAIT | |
| WR | 18 | 23 | READY | |
| SYNC | 19 | 22 | φ1 | |
| Vcc | 20 | 21 | HLDA |
●8080の命令
命令(ニーモニック)は以下の構成となっている。
ニーモニック [OP1[,OP2]]
オペランド表記は以下の通りである。
※「r」は8bitレジスタ「A,B,C,D,E,H,L,M=(HL)」を表す
※「rr」は16bitレジスタ「BC,DE,HL,SP(Stack Pointer)」を表す
※「PSW」は16bitレジスタ「PSW」(上位8bitが「A」レジスタ、下位8bitがフラグレジスタ)を表す
※「pc」は16bitレジスタである「プログラムカウンタ」を表す
※「f」はフラグ「S,Z,H,P,C」を表す (フラグはフラグレジスタとして扱われる)
フラグは演算結果の状態を表す
bit7「S」:最上位bit(MSB)が「1」の場合、成立
bit6「Z」:「0」の場合、成立
bit4「H」:算術演算のbit3/4間(Half)でAUX 桁あふれ(Carry)、桁の繰り下がり(Borrow)があった場合、成立
bit2「P」:「1」のbitが偶数個の場合、成立 (Parity:パリティ)
bit0「C」:Carry、もしくはBorrowがあった場合、成立
※「n」は8bit、「nn」は16bitのイミディエイト値(Immediate Operand)を表す
※「aa」は16bitアドレス値を表す
●転送命令
| ニーモニック | オペランド | 動作 |
|---|---|---|
| MOV | r,r | 8bitデータレジスタ間のデータ転送 (メモリアクセス用の「M」同士では行えない) |
| MVI | r,n | 8bit指定レジスタへ8bitイミディエイト値をロード(読込) |
| LXI | r,nn | 16bit指定レジスタへ16bitイミディエイト値をロード |
| LDA | aa | 指定アドレスの内容を「A」レジスタにロード |
| STA | aa | 「A」レジスタから指定アドレスにデータをストア(格納) |
| LHLD | aa | 指定アドレスの内容を「HL」レジスタにロード |
| SHLD | aa | 「HL」レジスタから指定アドレスにデータをストア |
| LDAX | r | 8bit指定レジスタ(r=B->BC,D->DE)で示される指定アドレスの内容を「A」レジスタにロード |
| STAX | r | 「A」レジスタから指定レジスタ(r=B->BC,D->DE)で示される指定アドレスにストア |
| SPHL | 「HL」レジスタの内容を「SP」レジスタに転送 | |
| XCHG | 「DE」レジスタと「HL」レジスタの内容を交換 |
●算術演算命令 (特に指定がない場合、対象は「A」レジスタ)
| ニーモニック | オペランド | 動作 |
|---|---|---|
| ADD | r | 8bit指定レジスタの内容を「A」レジスタに加算 |
| ADI | n | 8bitイミディエイト値を「A」レジスタに加算 |
| ADC | r | 8bit指定レジスタの内容と「C」フラグの値を「A」レジスタに加算 |
| ACI | n | 8bitイミディエイト値と「C」フラグの値を「A」レジスタに加算 |
| SUB | r | 8bit指定レジスタの内容を「A」レジスタから減算 |
| SUI | n | 8bitイミディエイト値を「A」レジスタから減算 |
| SBB | r | 8bit指定レジスタの内容と「C」フラグの値を「A」レジスタから減算 |
| SBI | n | 8bitイミディエイト値と「C」フラグの値を「A」レジスタから減算 |
| SUB | r | 8bit指定レジスタの内容を「A」レジスタから減算するが、結果は格納しない(=比較) |
| SUI | n | 8bitイミディエイト値を「A」レジスタから減算するが、結果は格納しない(=比較) |
| INR | r | 8bit指定レジスタの内容をインクリメント |
| DCR | r | 8bit指定レジスタの内容をデクリメント |
| INX | rr | 16bit指定レジスタの内容をインクリメント |
| DCX | rr | 16bit指定レジスタの内容をデクリメント |
| DAD | rr | 16bit指定レジスタの内容を「HL」レジスタに加算 |
| DAA | 「A」レジスタの内容をBCD(Binary-Coded Decimal:二進化十進)補正 |
●論理演算命令 (対象は「A」レジスタのみ)
| ニーモニック | オペランド | 動作 |
|---|---|---|
| ANA | r | 8bit指定レジスタの内容と「A」レジスタの論理積 |
| ANI | n | 8bitイミディエイト値と「A」レジスタの論理積 |
| ORA | r | 8bit指定レジスタの内容と「A」レジスタの論理和 |
| ORI | n | 8bitイミディエイト値と「A」レジスタの論理和 |
| XRA | r | 8bit指定レジスタの内容と「A」レジスタの排他的論理和 |
| XRI | n | 8bitイミディエイト値と「A」レジスタの排他的論理和 |
| CMA | 「A」レジスタの内容を反転 |
●ローテート命令 (対象は「A」レジスタと「C」フラグのみ)
| ニーモニック | オペランド | 動作 |
|---|---|---|
| RLC | 「A」レジスタの内容と「C」フラグを連結して左ローテート | |
| RRC | 「A」レジスタの内容と「C」フラグを連結して右ローテート | |
| RAL | 「A」レジスタの内容を左ローテート | |
| RAR | 「A」レジスタの内容を右ローテート |
●分岐制御命令
| ニーモニック | オペランド | 動作 |
|---|---|---|
| JMP | aa | 指定アドレスにジャンプ |
| JNf | aa | 指定フラグ(f=Z,C)が0のとき、指定アドレスにジャンプ |
| Jf | aa | 指定フラグ(f=Z,C)が1のとき、指定アドレスにジャンプ |
| JPO | aa | 「P」フラグが0のとき、指定アドレスにジャンプ |
| JPE | aa | 「P」フラグが1のとき、指定アドレスにジャンプ |
| JP | aa | 「S」フラグが0のとき、指定アドレスにジャンプ |
| JM | aa | 「S」フラグが1のとき、指定アドレスにジャンプ |
| PCHL | 「HL」レジスタの内容を「PC」に転送 | |
| CALL | aa | 指定アドレスをサブルーチンコール |
| CNf | aa | 指定フラグ(f=Z,C)が0のとき、指定アドレスをサブルーチンコール |
| Cf | aa | 指定フラグ(f=Z,C)が1のとき、指定アドレスをサブルーチンコール |
| CPO | aa | 「P」フラグが0のとき、指定アドレスをサブルーチンコール |
| CPE | aa | 「P」フラグが1のとき、指定アドレスをサブルーチンコール |
| CP | aa | 「S」フラグが0のとき、指定アドレスをサブルーチンコール |
| CM | aa | 「S」フラグが1のとき、指定アドレスをサブルーチンコール |
| RST | n | n(0〜7)*8番地をコール(割込) |
| RET | n | サブルーチンから復帰 |
| JNf | aa | 指定フラグ(f=Z,C)が0のとき、サブルーチンから復帰 |
| Jf | aa | 指定フラグ(f=Z,C)が1のとき、サブルーチンから復帰 |
| JPO | aa | 「P」フラグが0のとき、サブルーチンから復帰 |
| JPE | aa | 「P」フラグが1のとき、サブルーチンから復帰 |
| JP | aa | 「S」フラグが0のとき、サブルーチンから復帰 |
| JM | aa | 「S」フラグが1のとき、サブルーチンから復帰 |
●スタック操作命令 (対象は16bitレジスタのみ)
| ニーモニック | オペランド | 動作 |
|---|---|---|
| PUSH | rr | 16bit指定レジスタの内容を「SP」にプッシュ |
| PUSH | PSW | 「PSW」レジスタの内容を「SP」にプッシュ |
| POP | rr | 16bit指定レジスタに「SP」からポップ |
| POP | PSW | 「PSW」レジスタに「SP」からポップ |
| XTHL | 「HL」レジスタと「SP」レジスタ上位の内容を交換 |
●フラグ操作命令 (対象は「C」フラグのみ)
| ニーモニック | オペランド | 動作 |
|---|---|---|
| STC | 「C」フラグを1にする(セット) | |
| CMC | 「C」フラグを反転< |
●入出力命令 (対象は「A」レジスタのみ)
| ニーモニック | オペランド | 動作 |
|---|---|---|
| IN | aa | 指定I/Oアドレスの内容を「A」レジスタに入力 |
| OUT | aa | 「A」レジスタの内容を指定I/Oアドレスに出力 |
●CPU制御命令
| ニーモニック | オペランド | 動作 |
|---|---|---|
| NOP | 何もしない | |
| HLT | CPUを停止し、割込を待つ | |
| DI | 割込を禁止 | |
| EI | 割込を許可 |
●8085追加命令
| ニーモニック | オペランド | 動作 |
|---|---|---|
| RIM | 割込マスクを「A」レジスタに出力(読込) | |
| SIM | 割込マスクを「A」レジスタから入力(セット) |