인텔 8085

코어수 = **인텔 8085**는 인텔이 1977년 발표한 8비트 마이크로프로세서다. 8085는 인텔 8080과 바이너리 호환성이 있었으나 하드웨어 지원이 부족해 단순하고 값싼 마이크로 컴퓨터 시스템에 사용되었다. 8085의 모델 번호 “5”는 +5V, -5V, +12V의 3가지 전원이 필요한 8080에 비해 8085는 +5V 만으로 작동하였기 때문에 붙여진 것이다. 8080과 8085 프로세서는 둘 다 컴퓨터에서 CP/M 운영 체제를 실행하기 위해 사용되기도 하였으며 8085는 구성 부품을 줄일 수 있다는 장점이 있어 마이크로컨트롤러로도 사용되었다. 그러나 두 프로세서는 호환성과 좀 더 많은 기능을 가진 자일로그 Z80에게 데스크톱 컴퓨터 시장에서 밀려나게 된다. Z80은 CP/M 컴퓨터 시장의 대부분을 빼앗았으며 1980년대 초중반 가정용 컴퓨터 시장의 과반수를 차지하게 된다. 8085는 컨트롤러로서 긴 수명을 누렸다. 1970년대 말, DECtape 컨트롤러와 VT100 비디오 단말기 같은 기기에 사용되었는데 이것은 이들의 수명이 다할 때까지 사용이 지속되는 것이며 일반적으로 데스크톱 컴퓨터의 제품 주기보다는 긴 것이다.
# 세부 사항
8085는 폰 노이만 구조의 인텔 8080을 기본으로 하고 있지만 8080과는 다르게 8비트 데이터 버스가 16비트 어드레스 버스의 하위 부분과 멀티플렉스(multiplex) 되어 있다. 8085는 6,500개의 트랜지스터로 구성되었으며url-status=dead nMOS 회로를 사용하여 설계되었으나 나중에 “H" 버전은 HMOS라고 부르는 인텔의 향상된 nMOS 공정을 사용했다. HMOS는 원래 고속 SRAM 생산을 위해 개발된 기술이었다. 8085는 8224(클럭 제네레이터)와 8228(시스템 컨트롤러)의 기능을 통합해서 집적도를 높였다. Z80과 같이 당시의 프로세서와 비교하면 멀티플렉스 되어 있는 버스를 분리(demultiplex) 해야 한다는 단점이 있지만 인텔의 8155, 8355, 8755 메모리는 어드레스 래치로 직접 연결이 가능했다. 그래서 8085 시스템의 대부분은 이들 칩셋으로 구성되었다. 8085는 RST 7.5, RST 6.5, RST 5.5 등 3개의 인터럽트와 TRAP이라는 NMI(Non-Maskable interrupt), INTR이라는 외부 서비스 인터럽트를 지원한다. RST n.5 인터럽트는 프로세서의 실제 핀으로 할당되어 있는데 간단한 시스템에서 별도의 인터럽트 컨트롤러를 사용할 필요가 없어 비용을 줄일 수 있다. 8080처럼 8085도 외부의 대기 상태 신호(35번 핀, READY)를 받아 느린 메모리를 사용했으며 DMA(Direct Memory Access)는 HOLD(39번 핀)와 HLDA(38번 핀) 신호를 이용했다. 8080보다 개선된 점은 수정 진동자를 직접 연결해 내장된 클럭 제네레이터로 수정 진동자의 주파수의 절반인 내부 클럭을 발생시킬 수 있다는 것이다. 예를 들어 6.14MHz의 수정 진동자를 연결할 경우 3.07MHz의 내부 클럭을 발생시킨다.
## 프로그래밍 모델
8085는 더 높은 집적률과 단일 5V 전원 사용과 함께 바이너리 호환성으로 8080을 철저하게 뒤쫓았다. 8080과 8085 기본적인 명령어 집합은 컴퓨터 터미널 코퍼레이션에서 개발한 8008과 같았으며 이들 프로세서는 이전 프로세서 제품들과 소스 코드 호환성이 있었다. 8080은 8008 명령어에 몇 가지 유용하고 편리한 16비트 실행을 추가하였으며 8085는 8080 명령어 집합에 2개의 명령어만 추가하였다.
### 레지스터
8085에는 7개의 8비트 레지스터(A, B, C, D, E, H, L)가 있는데 A는 8비트 누산기(accumulator)에서 사용되며 다른 6개는 바이트 레지스터나 특정 명령어에서 16비트 레지스터 짝(BC, DE, HL)으로 사용된다. 어떤 명령어에서는 HL 레지스터가 제한된 16비트 누산기 레지스터로도 사용된다. 또한 16비트 스택 포인터와 16비트 프로그램 카운터도 가지고 있다.
### 명령어
다른 8비트 프로세서처럼 모든 명령어는 싱글 바이트로 되어 있다. 명령어 중 어떤 것은 명령어 뒤에 1 - 2 바이트의 데이터가 따라오는데 메모리 어드레스나 포트 넘버 같은 피연산자(operand)도 여기에 포함된다. 멀티 레벨 프로시져 호출과 복귀를 위한 CALL, RET 명령어를 갖추고 있으며 명령어는 스택상의 어떠한 16비트 레지스터 짝에도 저장과 복원을 할 수 있다. 또 서브루틴이 위치한 고정된 주소 1 바이트 8개(00h, 08h, 10h,...,38h)를 호출하는 명령어(RST)도 있다. 이들은 인터럽트 서비스 루틴에 대응하는 순서대로 외부 하드웨어에서 지원할 목적이었지만 빠른 시스템 호출에도 자주 사용된다. 가장 복잡한 명령으로 XTHL이 있는데 스택 포인터를 가리키는 어드레스가 저장된 HL 레지스터의 값을 교환하는데 사용된다.
#### 8비트 명령어
대부분의 8비트 작업은 8비트 누산기(A 레지스터)에서만 실행된다. 8비트 작업이 2개인 경우 A 레지스터에 저장된 값 이외에 수치는 또 다른 8비트 레지스터나 HL 16비트 레지스터가 가리키는 메모리 셀을 사용하는데 2개의 8비트 레지스터 사이의 직접 복사나 8비트 레지스터와 HL이 가리키는 메모리 셀 사이의 직접 복사도 지원한다. MOV 명령어의 정기적인 인코딩으로 인해(사용 가능한 오프코드의 1/4을 차지) 레지스터끼리 스스로 복사하는(예를 들면 MOV B,B) 중복 코드가 되는데 지연시키는 용도를 제외하면 거의 사용되지 않는다. 하지만 HL이 가리키는 셀끼리 복사하는 것(MOV M,M)은 인터럽트나 외부 리셋이 될 때까지 실행을 정지하는 HLT 명령어 대신 사용되기도 한다.
#### 16비트 작동
8085는 8비트 프로세서지만 16비트 작업을 실행할 수 있는 제한된 능력을 가지고 있다. 3개의 16비트 레지스터 짝(BC, DE, HL)이나 SP는 인접한 16비트 값을 불러와(LXI 사용) 증가나 감소(INX나 DCX 사용) 또는 HL과 덧셈(DAD 사용)할 수 있다. XCHG 명령어는 HL과 DE의 값을 바꾸는데 사용한다. HL을 HL의 값으로 더하는 것은 하나의 명령으로 16비트 레프트 시프트와 같은 결과를 갖는다. 유일한 16비트 명령어는 플래그에 영향을 미치는 DAD인데 CY(캐리) 플래그를 설정하는 것으로 24비트나 32비트 연산을 할 수 있으며 부동소수점 연산을 하는데도 필요하다.
### I/O 설계
8085는 256개의 I/O 포트를 지원하며 전용 I/O 명령어로 접근할 수 있다. 이런 I/O 맵핑 설계는 프로세서의 제한된 어드레스 공간을 최대한 활용할 수 있다는 장점으로 인식되었다. 많은 CPU 아키텍처에서 전용 I/O 명령어가 필요 없는 공통 어드레스 공간을 대신 사용하는데 이런 설계의 단점은 메모리보다 느린 주변기기 같은 특별한 하드웨어에서는 대기 상태를 추가로 넣어야만 한다. 그렇지만 어떤 간단한 8080 컴퓨터에서 I/O는 실제 메모리 셀을 가리키며 사용되지 않는 I/O 명령어는 버려진다. I/O 어드레싱은 때때로 하위와 상위 어드레스 바이트가 같은 8비트 포트 어드레스를 출력할 때도 사용된다. 즉, IN 05h는 16비트 어드레스 버스에 0505h 어드레스를 출력한다. 이와 비슷한 I/O 포트 설계는 8080 호환의 자일로그 Z80과 x86 마이크로프로세서 패밀리에서도 사용되었다.
## 개발 시스템
인텔은 8080과 8085를 위한 개발 시스템 시리즈를 판매하였는데 Personal Development System이라 불렀다. 오리지널 PDS는 CPU와 모니터, 8인치 플로피 디스크를 사용하는 커다란 박스였는데 ISIS 운영체제와 에뮬레이터 포드와 EPROM 프로그래머를 작동할 수 있었다. 나중에 iPDS는 작은 녹색 스크린과 5¼인치 플로피 디스크 등 좀 더 휴대성 있는 특징을 가지며 ISIS-II 운영체제를 실행할 수 있었다, 또한 두 번째 8085 프로세서를 사용할 수 있어서 두 CPU 간의 스크린, 키보드, 플로피 디스크 드라이브 공유 등의 제한된 형태의 멀티프로세서 작업이 가능했다. 인텔은 8080/8085 어셈블러뿐 만 아니라 PL/M-80과 파스칼 컴파일러, EPROM 라이터 등의 임베디드 시스템에 사용되는 프로그램도 판매하였다.
# 응용 사례
8085가 다양하게 널리 사용되기 위해 MOV, ADD, SUB, JMP 등과 같은 다양한 명령어로 이루어진 명령어 셋을 제공하는데 이 명령어는 분기, 덧셈, 뺄셈, 비트연산과 비트 시프트 작업같은 다양한 작업을 실행하는 프로그램 형태로 작성되어 있다. 더 복잡한 작업이나 연산은 소프트웨어에서 해결해야 했다. 예를 들어 곱셈은 곱셈 알고리즘을 사용해서 수행한다. 8085 프로세서는 작은 규모의 컴퓨터에서 드물게 사용되었다. TRS-80 모델 100 시리즈에 80C85가 사용되었는데 80C85는 8085의 CMOS 버전으로 여러 회사에서 생산되었으며 어떤 버전은 추가적인 기능을 가지고 있었다. 예를 들어 툰드라 세미컨덕터 코퍼레이션의 CA80C85B는 추가된 명령어를 가지고 있었다. 한가지 틈새 응용 사례로 1990년대와 2000년대 초, NASA와 ESA의 CRRES, Polar, FAST, Cluster, HESSI, Sojourner(rover), THEMIS 등 우주 물리학 임무에서 사용한 데이터 프로세서 기기에서 8085를 사용한 것이다. 1980년대 스위스의 SAIA 사는 PCA1 제품 라인에 8085와 8085-2를 사용했다.
# MCS-85 패밀리
8085는 시스템을 구성하기 위해 인텔이 개발한 많은 주변 칩들이 있는데 이 칩들을 MCS-85 패밀리라 한다. 8085는 큰 성공을 거두지는 못했지만 나중에 8086 프로세서도 이 칩들을 조합해서 사용하였으며 오늘날에도 여전히 사용되고 있는데 현재 PC에는 이들 칩이 직접 사용되지는 않지만 사우스브리지라는 VLSI 칩에 이 칩들과 동등한 기능이 내장되어 있다. * 8007 - RAM 컨트롤러 * 8085 - CPU * 8155 - RAM+ 3 I/O 포트+타이머 * 8156 - RAM+ 3 I/O 포트+타이머 * 8185 - SRAM * 8202 - DRAM 컨트롤러 * 8203 - DRAM 컨트롤러 * 8205 - 1 ~ 8 이진 디코더 * 8206 - 오류 검출 정정 장치 * 8207 - DRAM 컨트롤러 * 8210 - TTL To MOS 시프터 & 고전압 클럭 드라이버 * 8212 - 8비트 I/O 포트 * 8216 - 4비트 양방향 병렬 버스 드라이버 * 8218/8219 - 버스 컨트롤러 * 8222 - DRAM 리프레시 컨트롤러 * 8226 - 4비트 양방향 병렬 버스 드라이버 * 8231 - 산술 처리 유닛 * 8232 - 부동소수점 프로세서 * 8237 - DMA 컨트롤러 * 8251 - 커뮤니케이션 컨트롤러 * 8253 - 프로그래머블 인터벌 타이머 * 8254 - 프로그래머블 인터벌 타이머 * 8255 - 프로그래머블 주변기기 인터페이스 (PPI) * 8256 - 멀티펑션 서포트 컨트롤러 * 8257 - DMA 컨트롤러 * 8259 - 프로그래머블 인터럽트 컨트롤러 * 8271 - 프로그래머블 플로피 디스크 컨트롤러 * 8272 - 싱글/더블 밀도 플로피 디스크 컨트롤러 * 8273 - 프로그래머블 HDLC/SDLC 프로토콜 컨트롤러 * 8274 - 멀티 프로토콜 시리얼 컨트롤러 * 8275 - CRT 컨트롤러 * 8276 - 스몰 시스템 CRT 컨트롤러 * 8278 - 프로그래머블 키보드 인터페이스 * 8279 - 키보드/디스플레이 컨트롤러 * 8282 - 8비트 Non-Inverting Latch with Output Buffer * 8283 - 8비트 Inverting Latch with Output Buffer * 8291 - GPIB Talker/Listener * 8292 - GPIB 컨트롤러 * 8293 - GPIB 트랜시버 * 8294 - 데이터 암호화/암호해독 유닛 + O/P 포트 * 8295 - 도트 매트릭스 프린터 컨트롤러 * 8296 - GPIB 트랜시버 * 8297 - GPIB 트랜시버 * 8355 - 16,384비트 (2048 x 8) ROM + I/O * 8604 - 4096비트 (512 x 8) PROM * 8702 - 2048비트 (265 x 8 ) PROM * 8755 - EPROM+2 I/O 포트
# 시뮬레이터
8085 시뮬레이터는 여러 가지가 있는데 오픈 소스로 GNUSim8085와 GSim85가 리눅스, 윈도우 환경에서 작동하며 프리웨어로 Win85와 Sim8085가 마이크로소프트 Win32 플랫폼에서 작동한다.
# 어드레싱 모드
8085는 다이렉트 어드레싱 모드, 레지스터 어드레싱 모드, 레지스터 인다이렉트 어드레싱 모드, 이미디어트(immediate) 어드레싱 모드 등 4가지 어드레싱 모드가 있다.