user: 인텔 8085에 대해 설명해 주세요.

gpt: **인텔 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 비디오 단말기 같은 기기에 사용되었는데 이것은 이들의 수명이 다할 때까지 사용이 지속되는 것이며 일반적으로 데스크톱 컴퓨터의 제품 주기보다는 긴 것이다.

user: 세부 사항에 대해서도 설명해 줘.

gpt: 8085는 폰 노이만 구조의 인텔 8080을 기본으로 하고 있지만 8080과는 다르게 8비트 데이터 버스가 16비트 어드레스 버스의 하위 부분과 멀티플렉스 되어 있다. 8085는 6,500개의 트랜지스터로 구성되었으며 nMOS 회로를 사용하여 설계되었으나 나중에 “H" 버전은 HMOS라고 부르는 인텔의 향상된 nMOS 공정을 사용했다. HMOS는 원래 고속 SRAM 생산을 위해 개발된 기술이었다.

8085는 8224와 8228의 기능을 통합해서 집적도를 높였다. Z80과 같이 당시의 프로세서와 비교하면 멀티플렉스 되어 있는 버스를 분리 해야 한다는 단점이 있지만 인텔의 8155, 8355, 8755 메모리는 어드레스 래치로 직접 연결이 가능했다. 그래서 8085 시스템의 대부분은 이들 칩셋으로 구성되었다.

8085는 RST 7.5, RST 6.5, RST 5.5 등 3개의 인터럽트와 TRAP이라는 NMI, INTR이라는 외부 서비스 인터럽트를 지원한다. RST n.5 인터럽트는 프로세서의 실제 핀으로 할당되어 있는데 간단한 시스템에서 별도의 인터럽트 컨트롤러를 사용할 필요가 없어 비용을 줄일 수 있다.

8080처럼 8085도 외부의 대기 상태 신호를 받아 느린 메모리를 사용했으며 DMA는 HOLD와 HLDA 신호를 이용했다. 8080보다 개선된 점은 수정 진동자를 직접 연결해 내장된 클럭 제네레이터로 수정 진동자의 주파수의 절반인 내부 클럭을 발생시킬 수 있다는 것이다. 예를 들어 6.14MHz의 수정 진동자를 연결할 경우 3.07MHz의 내부 클럭을 발생시킨다.

## 프로그래밍 모델
8085는 더 높은 집적률과 단일 5V 전원 사용과 함께 바이너리 호환성으로 8080을 철저하게 뒤쫓았다. 8080과 8085 기본적인 명령어 집합은 컴퓨터 터미널 코퍼레이션에서 개발한 8008과 같았으며 이들 프로세서는 이전 프로세서 제품들과 소스 코드 호환성이 있었다. 8080은 8008 명령어에 몇 가지 유용하고 편리한 16비트 실행을 추가하였으며 8085는 8080 명령어 집합에 2개의 명령어만 추가하였다.

### 레지스터
8085에는 7개의 8비트 레지스터가 있는데 A는 8비트 누산기에서 사용되며 다른 6개는 바이트 레지스터나 특정 명령어에서 16비트 레지스터 짝으로 사용된다. 어떤 명령어에서는 HL 레지스터가 제한된 16비트 누산기 레지스터로도 사용된다. 또한 16비트 스택 포인터와 16비트 프로그램 카운터도 가지고 있다.

### 명령어
다른 8비트 프로세서처럼 모든 명령어는 싱글 바이트로 되어 있다. 명령어 중 어떤 것은 명령어 뒤에 1 - 2 바이트의 데이터가 따라오는데 메모리 어드레스나 포트 넘버 같은 피연산자도 여기에 포함된다. 멀티 레벨 프로시져 호출과 복귀를 위한 CALL, RET 명령어를 갖추고 있으며 명령어는 스택상의 어떠한 16비트 레지스터 짝에도 저장과 복원을 할 수 있다. 또 서브루틴이 위치한 고정된 주소 1 바이트 8개를 호출하는 명령어도 있다. 이들은 인터럽트 서비스 루틴에 대응하는 순서대로 외부 하드웨어에서 지원할 목적이었지만 빠른 시스템 호출에도 자주 사용된다. 가장 복잡한 명령으로 XTHL이 있는데 스택 포인터를 가리키는 어드레스가 저장된 HL 레지스터의 값을 교환하는데 사용된다.

#### 8비트 명령어
대부분의 8비트 작업은 8비트 누산기에서만 실행된다. 8비트 작업이 2개인 경우 A 레지스터에 저장된 값 이외에 수치는 또 다른 8비트 레지스터나 HL 16비트 레지스터가 가리키는 메모리 셀을 사용하는데 2개의 8비트 레지스터 사이의 직접 복사나 8비트 레지스터와 HL이 가리키는 메모리 셀 사이의 직접 복사도 지원한다.
MOV 명령어의 정기적인 인코딩으로 인해 레지스터끼리 스스로 복사하는 중복 코드가 되는데 지연시키는 용도를 제외하면 거의 사용되지 않는다. 하지만 HL이 가리키는 셀끼리 복사하는 것은 인터럽트나 외부 리셋이 될 때까지 실행을 정지하는 HLT 명령어 대신 사용되기도 한다.

#### 16비트 작동
8085는 8비트 프로세서지만 16비트 작업을 실행할 수 있는 제한된 능력을 가지고 있다. 3개의 16비트 레지스터 짝이나 SP는 인접한 16비트 값을 불러와 증가나 감소 또는 HL과 덧셈할 수 있다. 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 라이터 등의 임베디드 시스템에 사용되는 프로그램도 판매하였다.