최근 수정 시각 : 2023-08-04 18:24:30

인텔 4004


펜티엄 이전의 인텔 CPU
아키텍처 분류 제품
x86 이전 (4비트) 4004 (1971) 4040 (1974)
x86 이전 (8비트) 8008 (1972) 8080 (1974) 8085 (1977)
x86 (16비트) 8086/8088 (1978/1979) 80186/80188 (1982) 80286 (1982)
x86(IA32) (32비트) 80386 (1985) 80486 (1989)
기타 iAPX432(8800) i860 i960
관련 문서 인텔 펜티엄 시리즈 인텔 코어 시리즈 인텔 코어2 시리즈
인텔 코어i 시리즈 인텔 코어 Ultra 시리즈

파일:6a00d83452989a69e200e5503ce44d8833-800wi.jpg
1. 개요2. 역사3. 제원4. 아키텍처
4.1. 레지스터
5. 핀아웃6. 지원 칩7. 여담

1. 개요

1971년 11월 15일 인텔에서 출시된 4비트 마이크로프로세서이자 세계 최초의 민간용으로 출시된 단일 칩 4비트 마이크로프로세서이다. 10μm PMOS 공정으로 생산되었으며, 2300개의 트랜지스터로 구성되어 있다.

2. 역사

인텔의 인텔 4004 역사 소개
일본 정보처리학회 컴퓨터 박물관의 설명

원래 인텔 4004는 일본의 전자계산기 회사, 비지콤의 금전 등록 출납기, 141-PF에 들어가는 주문형 집적 회로로 시작되었다. 비지콤은 자사 뿐만 아니라 다른 회사에 OEM으로 전자계산기를 납품하는 회사였다. 비지콤은 다양한 회사의 요구에 맞추면서도 개발 시간과 비용의 절감을 위해 범용 하드웨어에 소프트웨어를 통해 수요를 맞추기로 결정했고, 그러면서도 반도체의 수를 줄이기 위해 MSI(Medium-Scale Integration) 설계와 PMOS 공정 기술이 있었던 인텔과 접촉했다.

인텔과 비지콤은 여러번 의견 교환 끝에 인텔의 12번째 사원이었던 테드 호프(Marcian 'Tedd' Hoff)는 ROM이 통합되어 있는 인텔 4004와 DRAM, 시프트 레지스터(Shift Register), I/O 컨트롤러, 총 4개의 칩을 비지콤에 제안했고, 비지콤은 이를 수락하면서 비지콤의 시마 마사토시(嶋正利)와 인텔의 페데리코 파진(Federico Faggin)을 팀장으로 테드 호프, 스탠리 마조르(Stanley Mazor)과 함께 1969년부터 개발에 돌입해 1971년에 완성했다. 인텔은 이 4개의 칩셋을 MCS-4라 불렀다.

그러나 1971년 비지콤은 재정난에 허덕여 회사의 앞날이 불투명한 상태였고, 이를 알게 된 페데리코 파진과 테드 호프는 당시 인텔의 CEO였던 로버트 노이스(Robert Noyce)에게 보고했다. 실제로 3년 후인 1974년 비지콤은 파산했다. 인텔과 비지콤은 원래 독점 공급 계약을 맺었으나 인텔이 다른 업종 판매권을 6만 달러에 사들이는 방식으로 재정을 지원해 비지콤만이 아닌 일반 기업들에게 판매할 수 있게 됐다. 실제로 내셔널 세미컨덕터는 인텔과 라이선스 계약을 맺어 세컨드 소스로 INS4004를 생산해 판매하기도 했다.

3. 제원

클럭 108~740KHz
데이터 폭 4비트
어드레스 폭 12비트
지원 명령어 46개[1]
트랜지스터 2,300개
공정 10μm
4비트 누산기와 4비트 인덱스 레지스터 16개 및 12비트 주소 스택 3개를 가지고 있다. 연산은 누산기에 인덱스 레지스터를 더하거나 빼는 방식으로 연산했다. 이 형식의 구조는 인텔 8080까지 이어졌다. 클럭 주파수는 108~740 kHz이다. 명령어 실행에는 명령어당 8-16 클럭 사이클이 소요된다. 최대 4096바이트의 ROM 및 5120비트의 RAM에 직접 접근이 가능했다. 내부 서브루틴 스택은 3개의 레벨까지만 지원했다. 이는 함수 호출을 총 3번까지 할 수 있다는 뜻이다.

4. 아키텍처

파일:1391px-4004_arch.svg.png
위 그림과 같은 구조의 멀티사이클 CPU로서 8클럭을 1사이클로 하여 동작한다. 실행 사이클은 A1-A2-A3-M1-M2-X1-X2-X3으로 구성되어 있으며, 1바이트 명령어의 경우 1사이클(8클럭), 2바이트 명령어의 경우 2사이클(16클럭)이 소요된다.

4.1. 레지스터

  • 4비트 인덱스 레지스터 16개: 0~15
  • 12비트 주소 레지스터 4개: PC 및 3단계 호출 스택

===# 명령어 #===
명령어는 1 word(8-bit) 또는 2 word(16-bit) 이진수로 인코딩된다.
  • RRRR: 인덱스 레지스터 1개
  • RRRX: 인덱스 레지스터 쌍
  • DDDD: 데이터
  • AAAA: 주소
  • CCCC: 조건
16진수 코드 Mnemonic OPR(M1) OPA(M2) 설명
D3 D2 D1 D1 D3 D2 D1 D1
00 NOP 0 0 0 0 0 0 0 0 No operation
1- -- JCN[*] 0 0 0 1 C1 C2 C3 C4 if C1...C4[3]: PC2:1 ← ROM[RRR*]
; 조건 C1...C4 만족시 JCN 명령어와 동일한 ROM의 A2...A1로 점프
A2 A2 A2 A2 A1 A1 A1 A1
2- -- FIM[*] 0 0 1 0 R R R 0 RRR* ← ROM[D2...D1]
; Fetch immediate (direct) from ROM to index register pair RRR
D2 D2 D2 D2 D1 D1 D1 D1
3- FIN 0 0 1 1 R R R 0 R*0 ← ROM[RRR*]
3- JIN 0 0 1 1 R R R 1 PC2:1 ← ROM[RRR*]
4- -- JUN[*] 0 1 0 0 A3 A3 A3 A3 PC ← A3...A1
; ROM의 A3...A1로 점프
A2 A2 A2 A2 A1 A1 A1 A1
5- -- JMS[*] 0 1 0 1 A3 A3 A3 A3 Stack ← PC, PC ← A3...A1
; ROM의 A3...A1로 점프 및 이전 주소를 스택에 저장
A2 A2 A2 A2 A1 A1 A1 A1
6- INC 0 1 1 0 R R R R RRRR ← RRRR+1
7- -- ISZ[*] 0 1 1 1 R R R R RRRR ← RRRR+1, PC2:1 ← ROM[RRR*]
A2 A2 A2 A2 A1 A1 A1 A1
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
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.
입출력 명령어
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

5. 핀아웃

파일:830px-4004_dil.svg.png

6. 지원 칩

  • 인텔 4001: 256바이트 용량의 고정 기억 장치(ROM)와 4비트 입출력 포트.
  • 인텔 4002: 40바이트 용량의 램(RAM)과 4비트 출력 포트 램 부분은 4비트 워드 20개로 이루어진 레지스터 4개가 탑재되어 있다.
  • 인텔 4003: 키보드, 모니터, 프린터 등을 제어하기 위한 10비트 병렬 출력 레지스터를 탑재하고 있다.
  • 인텔 4008: 표준 메모리 칩 접근을 위한 8비트 주소 레지스터와 4비트 칩 입출력 포트을 탑재하고 있다.
  • 인텔 4009: 표준 메모리와 입출력 칩을 위한 컨버터

7. 여담

  • 후속작으로 인텔 4040이 있다. 인터럽트를 포함한 여러기능이 추가되었다.
  • 인텔 4004의 우측 하단에 F.F.가 새겨져 있다. 개발자들 중 한 명인 페데리코 파진을 뜻한다.
  • 4비트 CPU에 불과하지만 이 구조는 8080까지 비슷하게 이어지게 된다. 물론 내부는 완전히 다르겠지만 A, r의 계산 형태, CLC와 STC, DAA 등의 명령어는 8080까지 그대로 옮겨왔고 CLC, STC, DAA는 8086까지 안착했기 때문에 현재도 사용할 수 있는 명령어들이다. 다만 BCD 명령어(DAA, DAS 등)는 롱 모드(64비트 모드)에서는 사용할 수 없다.(알 수 없는 명령어 취급) 레거시 모드(보호 모드와 가상 8086 모드)와 리얼 모드에만 동작한다.

[1] NOP 포함 46개. NOP 제외 45개.[*] 2바이트 명령어[3] C1: 점프 조건을 반전, C2: A = 0, C3: C = 1, C4: Test 핀 = 0; 1 = JNT, 2 = JC, 4 = JZ, 9 = JT, 10 = JNC, 12 = JNZ[*] 2바이트 명령어[*] 2바이트 명령어[*] 2바이트 명령어[*] 2바이트 명령어