[[분류:인텔/중앙처리장치]][[분류:1974년 출시]][[분류:1981년 단종]] [include(틀:펜티엄 이전의 인텔 CPU)] [목차] == 개요 == [[1974년]]에 출시된 [[인텔]]의 4비트 마이크로프로세서. [[인텔 4004]]의 후속작이다. == 상세 == 주로 전자제품용을 목적으로 사용되었으며 [[인텔 4004]]보다 너비가 2배 이상 더 넓었고 24핀[* 전작인 4004는 16핀을 적용했다.] 방식으로 제작되었다. 기존 4004의 명령어에 14개의 명령어가 추가해 총 60개의 명령어를 지원하고, 인터럽트 지원 및 디버깅 관련 기능이 추가되었다. 2개의 뱅크를 선택하는 방식으로 지원 롬 용량이 기존의 4KB(4096B)에서 8KB(8192B)로 증가하였으며 인덱스 레지스터 8개 및 스택 4칸이 추가되어 총 24개의 인덱스 레지스터 및 7단계의 스택을 제공한다. 새로 추가된 인덱스 레지스터는 확장된 ROM과 유사하게 뱅크를 전환하는 방식으로 사용할 수 있다. == 제원 == || 클럭 || 500~740KHz || || 데이터 폭 || 4비트 || || 어드레스 폭 || 12비트 || || 지원 명령어 || 60개 || || 트랜지스터 || 3,000개 || || 공정 || 10μm || == 아키텍처 == [[파일:1052px-4040_arch.svg.png|bgcolor=white]] === 레지스터 === * 4비트 인덱스 레지스터 24개: 0~7, 0*~7*, 8~15 * 0~7, 총 8개의 레지스터는 [[Z80]]의 레지스터 토글과 유사하게 Bank 0, 1을 지정해 사용할 수 있다. * 12비트 주소 레지스터 8개: PC 및 7단계 호출 스택 ===# 명령어 #=== 명령어는 1 word(8-bit) 또는 2 word(16-bit) 이진수로 인코딩된다. * RRRR: 인덱스 레지스터 1개 * RRRX: 인덱스 레지스터 쌍 * DDDD: 데이터 * AAAA: 주소 * CCCC: 조건 ||<|2> 16진수 코드 ||<|2> Mnemonic ||<-4> OPR(M,,1,,) ||<-4> OPA(M,,2,,) ||<|2> 설명 || || D,,3,, || D,,2,, || D,,1,, || D,,1,, || D,,3,, || D,,2,, || D,,1,, || D,,1,, || ||<-11> '''4004 명령어''' || ||<-11> 머신 명령어 || ||{{{00}}} ||NOP || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 ||No operation || ||<|2>{{{1- --}}} ||<|2>JCN[** 2바이트 명령어] || 0 || 0 || 0 || 1 || C,,1,, || C,,2,, || C,,3,, || C,,4,, ||<|2>if C,,1,,...C,,4,,[* C,,1,,: 점프 조건을 반전, C,,2,,: A = 0, C,,3,,: C = 1, C,,4,,: Test 핀 = 0; 1 = JNT, 2 = JC, 4 = JZ, 9 = JT, 10 = JNC, 12 = JNZ]: PC,,2:1,, ← ROM[RRR*] ; 조건 C,,1,,...C,,4,, 만족시 JCN 명령어와 동일한 ROM의 A,,2,,...A,,1,,로 점프 || || A,,2,, || A,,2,, || A,,2,, || A,,2,, || A,,1,, || A,,1,, || A,,1,, || A,,1,, || ||<|2>{{{2- --}}} ||<|2>FIM[** 2바이트 명령어] || 0 || 0 || 1 || 0 || R || R || R || 0 ||<|2>RRR* ← ROM[D,,2,,...D,,1,,] ; Fetch immediate (direct) from ROM to index register pair RRR || || D,,2,, || D,,2,, || D,,2,, || D,,2,, || D,,1,, || D,,1,, || D,,1,, || D,,1,, || ||{{{3-}}} ||FIN || 0 || 0 || 1 || 1 || R || R || R || 0 ||R*,,0,, ← ROM[RRR*] || ||{{{3-}}} ||JIN || 0 || 0 || 1 || 1 || R || R || R || 1 ||PC,,2:1,, ← ROM[RRR*] || ||<|2>{{{4- --}}} ||<|2>JUN[** 2바이트 명령어] || 0 || 1 || 0 || 0 || A,,3,, || A,,3,, || A,,3,, || A,,3,, ||<|2>PC ← A,,3,,...A,,1,, ; ROM의 A,,3,,...A,,1,,로 점프 || || A,,2,, || A,,2,, || A,,2,, || A,,2,, || A,,1,, || A,,1,, || A,,1,, || A,,1,, || ||<|2>{{{5- --}}} ||<|2>JMS[** 2바이트 명령어] || 0 || 1 || 0 || 1 || A,,3,, || A,,3,, || A,,3,, || A,,3,, ||<|2>Stack ← PC, PC ← A,,3,,...A,,1,, ; ROM의 A,,3,,...A,,1,,로 점프 및 이전 주소를 스택에 저장 || || A,,2,, || A,,2,, || A,,2,, || A,,2,, || A,,1,, || A,,1,, || A,,1,, || A,,1,, || ||{{{6-}}} ||INC || 0 || 1 || 1 || 0 || R || R || R || R ||RRRR ← RRRR+1 || ||<|2>{{{7- --}}} ||<|2>ISZ[** 2바이트 명령어] || 0 || 1 || 1 || 1 || R || R || R || R ||<|2>RRRR ← RRRR+1, PC,,2:1,, ← ROM[RRR*] || || A,,2,, || A,,2,, || A,,2,, || A,,2,, || A,,1,, || A,,1,, || A,,1,, || A,,1,, || ||{{{8-}}} ||ADD || 1 || 0 || 0 || 0 || R || R || R || R ||A ← A + RRRR + C || ||{{{9-}}} ||SUB || 1 || 0 || 0 || 1 || R || R || R || R ||A ← A - RRRR - C || ||{{{A-}}} ||LD || 1 || 0 || 1 || 0 || R || R || R || R ||A ← RRRR || ||{{{B-}}} ||XCH || 1 || 0 || 1 || 1 || R || R || R || R ||A ↔ RRRR || ||{{{C-}}} ||BBL || 1 || 1 || 0 || 0 || D || D || D || D ||PC ← Stack, A ← DDDD || ||{{{D-}}} ||LDM || 1 || 1 || 0 || 1 || D || D || D || D ||A ← DDDD || ||<-11> 누산기 명령어 || ||{{{F0}}} ||CLB || 1 || 1 || 1 || 1 || 0 || 0 || 0 || 0 ||A ← 0, C ← 0; Clear both. || ||{{{F1}}} ||CLC || 1 || 1 || 1 || 1 || 0 || 0 || 0 || 0 ||C ← 0; Clear carry. || ||{{{F2}}} ||IAC || 1 || 1 || 1 || 1 || 0 || 0 || 1 || 0 ||A ← A+1; Increment accumulator. || ||{{{F3}}} ||CMC || 1 || 1 || 1 || 1 || 0 || 0 || 1 || 1 ||C ← ~C; Complement carry. || ||{{{F4}}} ||CMA || 1 || 1 || 1 || 1 || 0 || 1 || 0 || 0 ||A ← ~A; Complement accumulator. || ||{{{F5}}} ||RAL || 1 || 1 || 1 || 1 || 0 || 1 || 0 || 1 ||; Rotate left. (Accumulator and carry) || ||{{{F6}}} ||RAR || 1 || 1 || 1 || 1 || 0 || 1 || 1 || 0 ||; Rotate right. (Accumulator and carry) || ||{{{F7}}} ||TCC || 1 || 1 || 1 || 1 || 0 || 1 || 1 || 1 ||A ← C, C ← 0; Transmit carry to accumulator and clear carry. || ||{{{F8}}} ||DAC || 1 || 1 || 1 || 1 || 1 || 0 || 0 || 0 ||A ← A-1;Decrement accumulator. || ||{{{F9}}} ||TCS || 1 || 1 || 1 || 1 || 1 || 0 || 0 || 1 ||; Transfer carry subtract and clear carry. || ||{{{FA}}} ||STC || 1 || 1 || 1 || 1 || 1 || 0 || 1 || 0 ||Set carry. || ||{{{FB}}} ||DAA || 1 || 1 || 1 || 1 || 1 || 0 || 1 || 1 ||Decimal adjust accumulator || ||{{{FC}}} ||KBP || 1 || 1 || 1 || 1 || 1 || 1 || 0 || 0 ||Keyboard process. || ||{{{FD}}} ||DCL || 1 || 1 || 1 || 1 || 1 || 1 || 0 || 1 ||Designate command line. || ||<-11> 입출력 명령어 || ||{{{2-}}} ||SRC || 0 || 0 || 1 || 0 || R || R || R || 1 || || ||{{{E0}}} ||WRM || 0 || 0 || 1 || 0 || 0 || 0 || 0 || 0 || || ||{{{E1}}} ||WMP || 0 || 0 || 1 || 0 || 0 || 0 || 0 || 1 || || ||{{{E2}}} ||WRR || 0 || 0 || 1 || 0 || 0 || 0 || 1 || 0 || || ||{{{E3}}} ||WPM || 0 || 0 || 1 || 0 || 0 || 0 || 1 || 1 || || ||{{{E4}}} ||WR0 || 0 || 0 || 1 || 0 || 0 || 1 || 0 || 0 || || ||{{{E5}}} ||WR1 || 0 || 0 || 1 || 0 || 0 || 1 || 0 || 1 || || ||{{{E6}}} ||WR2 || 0 || 0 || 1 || 0 || 0 || 1 || 1 || 0 || || ||{{{E7}}} ||WR3 || 0 || 0 || 1 || 0 || 0 || 1 || 1 || 1 || || ||{{{E8}}} ||SBM || 0 || 0 || 1 || 0 || 1 || 0 || 0 || 0 || || ||{{{E9}}} ||RDM || 0 || 0 || 1 || 0 || 1 || 0 || 0 || 1 || || ||{{{EA}}} ||RDR || 0 || 0 || 1 || 0 || 1 || 0 || 1 || 0 || || ||{{{EB}}} ||ADM || 0 || 0 || 1 || 0 || 1 || 0 || 1 || 1 || || ||{{{EC}}} ||RD0 || 0 || 0 || 1 || 0 || 1 || 1 || 0 || 0 || || ||{{{ED}}} ||RD1 || 0 || 0 || 1 || 0 || 1 || 1 || 0 || 1 || || ||{{{EE}}} ||RD2 || 0 || 0 || 1 || 0 || 1 || 1 || 1 || 0 || || ||{{{EF}}} ||RD3 || 0 || 0 || 1 || 0 || 1 || 1 || 1 || 1 || || ||<-11> '''4040 추가 명령어''' || ||{{{01}}} ||HLT || 0 || 0 || 1 || 0 || 0 || 0 || 0 || 1 ||Halt || ||{{{02}}} ||BBS || 0 || 0 || 1 || 0 || 0 || 0 || 1 || 0 || || ||{{{03}}} ||LCR || 0 || 0 || 1 || 0 || 0 || 0 || 1 || 1 || || ||{{{04}}} ||OR4 || 0 || 0 || 1 || 0 || 0 || 1 || 0 || 0 ||A ← A | R[4] || ||{{{05}}} ||OR5 || 0 || 0 || 1 || 0 || 0 || 1 || 0 || 1 ||A ← A | R[5] || ||{{{06}}} ||AN6 || 0 || 0 || 1 || 0 || 0 || 1 || 1 || 0 ||A ← A & R[6] || ||{{{07}}} ||AN7 || 0 || 0 || 1 || 0 || 0 || 1 || 1 || 1 ||A ← A & R[7] || ||{{{08}}} ||DB0 || 0 || 0 || 1 || 0 || 1 || 0 || 0 || 0 ||Designate ROM bank 0. CM-ROM,,0,, becomes enabled. || ||{{{09}}} ||DB1 || 0 || 0 || 1 || 0 || 1 || 0 || 0 || 1 ||Designate ROM bank 1. CM-ROM,,1,, becomes enabled. || ||{{{0A}}} ||SB0 || 0 || 0 || 1 || 0 || 1 || 0 || 1 || 0 ||Select index register bank 0. || ||{{{0B}}} ||SB1 || 0 || 0 || 1 || 0 || 1 || 0 || 1 || 1 ||Select index register bank 1. || ||{{{0C}}} ||EIN || 0 || 0 || 1 || 0 || 1 || 1 || 0 || 0 ||Enable interrupt. || ||{{{0D}}} ||DIN || 0 || 0 || 1 || 0 || 1 || 1 || 0 || 1 ||Disable interrupt. || ||{{{0E}}} ||RPM || 0 || 0 || 1 || 0 || 1 || 1 || 1 || 0 ||Read program memory. || == 핀아웃 == [[파일:Intel_4040_processor_pinout.png|bgcolor=white]] == 지원 칩 == == 여담 ==