戻る

4004

Intel/Busicom 4004
Data 4bit / Address Bus 12bit
Cycle 500KHz〜750KHz
(1972)

「4004」は単独では動作しないため、周辺を含めて「MCS-4」として販売されていた。
Busicomは「ビジコン」という日本企業である。
CPU本体の設計はビジコンの嶋氏であった。

●4004のピン配列

D01 16CM-RAM0
D12 15CM-RAM1
D23 14CM-RAM2
D34 13CM-RAM3
Vss5 12Vdd
CLK16 11CM-ROM
CLK27 10TEST
SYNC8 9RESET

●4004の構造

レジスタは以下の構成となっている。

アキュムレータ(ACC):4bit
スクラッチパッドレジスタ:4bit
(下表での組み合わせで8bitのインデックスレジスタとして使用可能)

IR 0IR 1
IR 2IR 3
IR 4IR 5
IR 6IR 7
IR 8IR 9
IR10IR11
IR12IR13
IR14IR15

プログラムカウンタ(PC):12bit
スタック1,2,3:12bit
コマンドラインレジスタ(CL):4bit

フラグは1bit「C」(Carry)のみである。

●4004の命令

命令(ニーモニック)は以下の構成となっている。

●一般命令

ニーモニック意味備考
NOPNo OPeration何もしない
JCNJump on CoNdition命令部下位4bitで条件指定のジャンプ ※1
FIMFetch IMmediate即値をロード(読込)
命令部下位4bitでレジスタ指定 ※2
SRCSend Register Control指定レジスタの内容をレジスタコントローラにストア(格納)
命令部下位4bitでレジスタ指定 ※3
FINFetch INdirect from romIR0-1の内容(アドレス)に該当するROMデータを指定レジスタにロード
レジスタ指定は「FIM」と同じ
JINJump INdirect指定レジスタの内容(アドレス)にジャンプ
レジスタ指定は「SRC」と同じ
JUMJUMp direct命令部下位4bitとデータ部8bitを12bitとして指定アドレスジャンプ
JMSJuMp to Subroutine命令部下位4bitとデータ部8bitを12bitとして指定アドレスサブルーチンコール
INCINCrement register命令部下位4bitで指定したレジスタをインクリメント(+1)
ISZIncrement register and jump if Status not Zero命令部下位4bitで指定したレジスタをインクリメント(+1)
結果が0でなければジャンプ
ADDADD register to accumulator with carry命令部下位4bitで指定したレジスタに「ACC」と「C」を加算
SUBSUBtract register to accumulator with borrow命令部下位4bitで指定したレジスタから「ACC」と「C」を減算
LDLoaD register to accumulator命令部下位4bitで指定したレジスタの内容を「ACC」にロード
XCHeXCHange register and accumulator命令部下位4bitで指定したレジスタの内容を「ACC」と交換
BBLBranch Back and Load data to accumulator命令部下位4bitを「ACC」にロードし、サブルーチンから復帰
LDMLoad Data to accuMulator命令部下位4bitを「ACC」にロード

●入出力命令

ニーモニック意味備考
WRMWrite accumulator into Ram main Memory character「ACC」の内容をRAM Main Memory Characterに書込
WMPWrite accumulator into raM output Port「ACC」の内容をRAM Output Portに書込
WRRWrite accumulator into Rom output poRt「ACC」の内容をROM Output Portに書込
WPMWrite accumulator into half byte of read/write Program Memory「ACC」の内容をHalf Byte of Read/Write Program Memoryに書込
WR0Write accumulator into Ram status character 0「ACC」の内容をRAM Status Character 0に書込
WR1Write accumulator into Ram status character 1「ACC」の内容をRAM Status Character 1に書込
WR2Write accumulator into Ram status character 2「ACC」の内容をRAM Status Character 2に書込
WR3Write accumulator into Ram status character 3「ACC」の内容をRAM Status Character 3に書込
SBMSuBtract the ram main Memory character from accumulator with borrowRAM Main Memory Characterの値から「ACC」と「C」を減算
RDMReaD ram main Memory character into accumulatorRAM Main Memory Characterの内容を「ACC」に読込
RDRReaD Rom output port into accumulatorROM Output Portの内容を「ACC」に読込
ADMADd the ram main Memory character from accumulator with carryRAM Main Memory Characterの値に「ACC」と「C」を加算
RD0ReaD ram status character 0 into accumulatorRAM Status Character 0の内容を「ACC」に読込
RD1ReaD ram status character 1 into accumulatorRAM Status Character 1の内容を「ACC」に読込
RD2ReaD ram status character 2 into accumulatorRAM Status Character 2の内容を「ACC」に読込
RD3ReaD ram status character 3 into accumulatorRAM Status Character 3の内容を「ACC」に読込

●アキュムレータ命令

ニーモニック意味備考
CLBCLear Both accumulator and carry「ACC」と「C」をクリア(0にする)
CLCCLear Carry「C」をクリア
IACIncrement ACcumulator「ACC」をインクリメント
CMCCoMplement Carry「C」の否定値
CMACoMplement Accumulator「ACC」の否定値
ROLROtate Left「ACC」と「C」を左ローテーション
RORROtate Right「ACC」と「C」を左ローテーション
TCCTransmit Carry to accumulator and Clear carry「C」の値を「ACC」に渡して、「C」をクリア
DACDecrement ACcumulator「ACC」をデクリメント(-1)
TCSTransfer Carry Subtract and clear carry10から「C」の値を減算し「ACC」に転送して、「C」をクリア
STCSeT Carry「C」をセット(1にする)
DAADecimal Adjust Accumulator「ACC」がA〜Fのとき、6を加算(10進補正)
KBPKeyBoard Process「ACC」の値を2進数コードに変換
DCLDesignate 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を足した値を使用。


[TOPに戻る]