4004
|
Intel/Busicom 4004 Data 4bit / Address Bus 12bit Cycle 500KHz〜750KHz (1972) |
「4004」は単独では動作しないため、周辺を含めて「MCS-4」として販売されていた。
Busicomは「ビジコン」という日本企業である。
CPU本体の設計はビジコンの嶋氏であった。
●4004のピン配列
| D0 | 1 | 16 | CM-RAM0 | |
| D1 | 2 | 15 | CM-RAM1 | |
| D2 | 3 | 14 | CM-RAM2 | |
| D3 | 4 | 13 | CM-RAM3 | |
| Vss | 5 | 12 | Vdd | |
| CLK1 | 6 | 11 | CM-ROM | |
| CLK2 | 7 | 10 | TEST | |
| SYNC | 8 | 9 | RESET |
●4004の構造
レジスタは以下の構成となっている。
アキュムレータ(ACC):4bit
スクラッチパッドレジスタ:4bit
(下表での組み合わせで8bitのインデックスレジスタとして使用可能)
| IR 0 | IR 1 |
| IR 2 | IR 3 |
| IR 4 | IR 5 |
| IR 6 | IR 7 |
| IR 8 | IR 9 |
| IR10 | IR11 |
| IR12 | IR13 |
| IR14 | IR15 |
プログラムカウンタ(PC):12bit
スタック1,2,3:12bit
コマンドラインレジスタ(CL):4bit
フラグは1bit「C」(Carry)のみである。
●4004の命令
命令(ニーモニック)は以下の構成となっている。
●一般命令
| ニーモニック | 意味 | 備考 |
|---|---|---|
| NOP | No OPeration | 何もしない |
| JCN | Jump on CoNdition | 命令部下位4bitで条件指定のジャンプ ※1 |
| FIM | Fetch IMmediate | 即値をロード(読込) 命令部下位4bitでレジスタ指定 ※2 |
| SRC | Send Register Control | 指定レジスタの内容をレジスタコントローラにストア(格納) 命令部下位4bitでレジスタ指定 ※3 |
| FIN | Fetch INdirect from rom | IR0-1の内容(アドレス)に該当するROMデータを指定レジスタにロード レジスタ指定は「FIM」と同じ |
| JIN | Jump INdirect | 指定レジスタの内容(アドレス)にジャンプ レジスタ指定は「SRC」と同じ |
| JUM | JUMp direct | 命令部下位4bitとデータ部8bitを12bitとして指定アドレスジャンプ |
| JMS | JuMp to Subroutine | 命令部下位4bitとデータ部8bitを12bitとして指定アドレスサブルーチンコール |
| INC | INCrement register | 命令部下位4bitで指定したレジスタをインクリメント(+1) |
| ISZ | Increment register and jump if Status not Zero | 命令部下位4bitで指定したレジスタをインクリメント(+1) 結果が0でなければジャンプ |
| ADD | ADD register to accumulator with carry | 命令部下位4bitで指定したレジスタに「ACC」と「C」を加算 |
| SUB | SUBtract register to accumulator with borrow | 命令部下位4bitで指定したレジスタから「ACC」と「C」を減算 |
| LD | LoaD register to accumulator | 命令部下位4bitで指定したレジスタの内容を「ACC」にロード |
| XCH | eXCHange register and accumulator | 命令部下位4bitで指定したレジスタの内容を「ACC」と交換 |
| BBL | Branch Back and Load data to accumulator | 命令部下位4bitを「ACC」にロードし、サブルーチンから復帰 |
| LDM | Load Data to accuMulator | 命令部下位4bitを「ACC」にロード |
●入出力命令
| ニーモニック | 意味 | 備考 |
|---|---|---|
| WRM | Write accumulator into Ram main Memory character | 「ACC」の内容をRAM Main Memory Characterに書込 |
| WMP | Write accumulator into raM output Port | 「ACC」の内容をRAM Output Portに書込 |
| WRR | Write accumulator into Rom output poRt | 「ACC」の内容をROM Output Portに書込 |
| WPM | Write accumulator into half byte of read/write Program Memory | 「ACC」の内容をHalf Byte of Read/Write Program Memoryに書込 |
| WR0 | Write accumulator into Ram status character 0 | 「ACC」の内容をRAM Status Character 0に書込 |
| WR1 | Write accumulator into Ram status character 1 | 「ACC」の内容をRAM Status Character 1に書込 |
| WR2 | Write accumulator into Ram status character 2 | 「ACC」の内容をRAM Status Character 2に書込 |
| WR3 | Write accumulator into Ram status character 3 | 「ACC」の内容をRAM Status Character 3に書込 |
| SBM | SuBtract the ram main Memory character from accumulator with borrow | RAM Main Memory Characterの値から「ACC」と「C」を減算 |
| RDM | ReaD ram main Memory character into accumulator | RAM Main Memory Characterの内容を「ACC」に読込 |
| RDR | ReaD Rom output port into accumulator | ROM Output Portの内容を「ACC」に読込 |
| ADM | ADd the ram main Memory character from accumulator with carry | RAM Main Memory Characterの値に「ACC」と「C」を加算 |
| RD0 | ReaD ram status character 0 into accumulator | RAM Status Character 0の内容を「ACC」に読込 |
| RD1 | ReaD ram status character 1 into accumulator | RAM Status Character 1の内容を「ACC」に読込 |
| RD2 | ReaD ram status character 2 into accumulator | RAM Status Character 2の内容を「ACC」に読込 |
| RD3 | ReaD ram status character 3 into accumulator | RAM Status Character 3の内容を「ACC」に読込 |
●アキュムレータ命令
| ニーモニック | 意味 | 備考 |
|---|---|---|
| CLB | CLear Both accumulator and carry | 「ACC」と「C」をクリア(0にする) |
| CLC | CLear Carry | 「C」をクリア |
| IAC | Increment ACcumulator | 「ACC」をインクリメント |
| CMC | CoMplement Carry | 「C」の否定値 |
| CMA | CoMplement Accumulator | 「ACC」の否定値 |
| ROL | ROtate Left | 「ACC」と「C」を左ローテーション |
| ROR | ROtate Right | 「ACC」と「C」を左ローテーション |
| TCC | Transmit Carry to accumulator and Clear carry | 「C」の値を「ACC」に渡して、「C」をクリア |
| DAC | Decrement ACcumulator | 「ACC」をデクリメント(-1) |
| TCS | Transfer Carry Subtract and clear carry | 10から「C」の値を減算し「ACC」に転送して、「C」をクリア |
| STC | SeT Carry | 「C」をセット(1にする) |
| DAA | Decimal Adjust Accumulator | 「ACC」がA〜Fのとき、6を加算(10進補正) |
| KBP | KeyBoard Process | 「ACC」の値を2進数コードに変換 |
| DCL | Designate Command Line | 「ACC」の値から「CL」を選択 |
※1 命令下位4bit:c4,c3,c2,c1
c4:TEST(10)が0のとき
c3:「C」=1のとき
c2:「ACC」=0のとき
c1:1のとき、ジャンプ条件を反転
なお、複数true時の動作はデータシートにも未記載のため実機で確認要。
※2 命令下位4bit:0〜14の偶数
レジスタ番号0〜7を2倍した値を使用。
※3 命令下位4bit:1〜15の奇数
レジスタ番号0〜7を2倍した値に1を足した値を使用。