자일로그 Z80

개요

Z80은 인텔 8080 마이크로프로세서의 개량형이라고 할 수 있는 제품이며, 8080에 비해 약간의 아키텍처 확장, 전원 5V 단일화 및 보다 높은 클럭 주파수 대응 등을 도모할 수 있었다. 주소 공간은 16비트(64KB)로 그 이상으로 확장할 때에는 MMU 등으로 뱅크 교환을 한다. 8080의 개발진들이 회사를 나와 설립한 회사가 자일로그였으며, Z80은 8080과 소프트웨어와 호환되도록 설계되었다. 8080에 더 많은 명령어, 인터럽트 모드가 추가되었다. DRAM 리프레시 회로도 포함하고 있다.
또한 최대 클럭 주파수의 차이는 Z80A (4 MHz), Z80B (6 MHz) 등 말미에 붙인 알파벳으로 구분된다.
아키텍처 확장은 DRAM 정보를 유지(리프레쉬)하는 기능을 내장하기 위한 레지스터를 추가했고, 8080에서는 1묶음인 범용 레지스터군을 바꾸어 사용할 수 있는 앞과 뒤, 2묶음으로 했으며, 또, 2개의 인덱스 레지스터를 사용한 메모리 조작을 포함한 명령의 증강, 인터럽트 제어의 강화, 와이어드 로직에 의한 명령의 실행 등이 이루어졌다. 곱셈과 나눗셈 명령은 8080과 마찬가지로 존재하지 않는다.
또, 본래 16비트 고정의 인덱스 레지스터를 8비트 단위로 사용할 수 있는 기능은 로직 설계상에서 파생되었다고 생각되며, 명령어 표에는 없는 숨겨진 명령이 존재했다.

어셈블러 사양

8080에 대해서 상위 호환성을 가지며, 8080용 바이너리를 그대로 실행할 수 있다. 어셈블리 프로그래밍 시 명령어를 표시하기 위한 '니모닉'은 8080과 완전히 다르다. 보다 쉽게 기술할 수 있도록 정리된 것이다. 이는 초보자도 알기 쉽다고 여겨지는 반면 다른 CPU의 니모닉과 비교하면, 주소 지정 방식(addressing mode)이 불확실하다는 결점도 있었다. 오퍼랜드의 순서는 데스티네이션이 앞이고 소스가 뒤이다.

특징

Z80에는 ' 특정 명령의 조합을 썼을 때, 평상시 명령을 썼을 때보다도 실행에 필요한 클럭 수나 명령의 총 바이트 수를 적게' 할 수 있는 테크닉이 많이 존재하며 이것들은 '최적화', '클럭 줄임' 등으로 불렸다. 예를 들어, 추가된 블록 전송 명령이나 인덱스 레지스터 명령은 다른 명령으로 대신 쓰는 경우보다 소요 클럭수가 증대된다는 장점이 있으며 명령의 메모리 공간상 점유율과 처리 속도의 상충 관계가 있다.
또 Z80는 같은 기간에 새로 개발된 타사의 8비트 CPU와 비교했을 때, 상대 점프는 할 수 있는 곳의 범위가 좁은 등 재배치 가능한 구성이 어렵고, 이진수화한 코드를 재배치 가능하도록 배치하여 작동시키는 드라이버나 디버거, 운영체제 등의 환경을 만드는 데는 부적합하다고 생각되었다. 재배치 불가능한 일반적인 바이너리는 배치 주소를 변경한 정도로 다시 컴파일이나 재링크가 필요하다. 또, 주소를 참조할 때의 오프셋도 범용 레지스터 사용시에는 지정되지 않고, 인덱스 레지스터 사용에서는 오프셋 지정이 -128~0~127의 범위로 제한되었기 때문에 C 언어의 포인터와의 궁합이 맞지 않는 면이 있다.
또한 Z80는 주소 지정 방식이 적어서, 각 명령 코드를 16 진수로 기억하는 일도 그렇게 어렵지는 않았다.

입출력 포트

Z80에는 8080과 같이 메모리 주소와는 별도로 0부터 FF(255)까지의 입출력 포트 주소를 가지고 있었다. 포트 주소는 주소 버스의 하위 8비트로 출력되었지만, 상위 8비트에도 동시에 값이 출력되는 사양이 되었다(이 값에는 입출력 주소를 C레지스터로 지정하는 명령의 경우는 B레지스터, 그 밖의 명령은 A 레지스터의 값이 이용된다).
이 사양을 이용하면 입출력 포트 공간을 16비트 주소로 취급할 수 있으며, 그래픽 메모리를 여기에 할당하여 메인 메모리가 그래픽 메모리에 의해서 압박 받는 것을 막을 수 있다. 같은 구성을 사용한 것은 샤프의 X1가 대표적으로, 그 밖에 Bubcom80 등이 있다.

예제 코드

; memcpy --
        ; Copy a block of memory from one location to another.
        ;
        ; Entry registers
        ;   BC - Number of bytes to copy
        ;   DE - Address of source data block
        ;   HL - Address of target data block
        ;
        ; Return registers
        ;   BC - Zero

1000            org   1000h    ;Origin at 1000h;
1000      memcpy   public
1000 78     loop    ld   a,b    ;Test BC,
1001 B1           or   c        ;If BC = 0,
1002 C8           retz          ;Return
1003 1A           ld   a,(de)   ;Load A from (DE)
1004 77           ld   (hl),a   ;Store A into (HL)
1005 13           inc  de       ;Increment DE
1006 23           inc  hl       ;Increment HL
1007 0B           dec  bc       ;Decrement BC
1008 C3 00 10     jp   loop     ;Repeat the loop
100B            end

자일로그 호환의 Z80

세컨드 소스 계약에 의하여 핀 수가 호환 가능한 호환 제품의 생산이 다른 회사에서도 이뤄졌다. 이러한 제품에는 샤프의 'LH0080', 모스텍의 'MK3880' 등이 있다. 또, 일본전기(NEC)가 독자적으로 호환 'μPD780'를 출하했던 것에 대해 자이로그는 칩 저작권 침해라며 소송을 걸었지만 최종적으로는 양자가 화해하여 제조 및 판매가 계속되었다.
원래는 NMOS 프로세스로 제조되었지만, 일부 세컨드 소스 제조사들은 독자적으로 CMOS 프로세스화해 소비 전력 감소를 도모한 제품(NEC 'μPD70008', 샤프 'LH5080', 도시바 'TMPZ84C00' 등)도 출시되고 있다.
또, 내셔널 반도체에서는 CMOS화와 더불어 인텔 8085과 같이 주소 버스의 하위와 데이터 버스를 같게 하고 Z80와 소프트웨어의 호환성을 가지도록 한 'NSC800'가 제조되었다.
아직까지 제어, 조입용으로서 메모리 및 주변기기의 제어용 회로를 단일의 패키지에 집적한 LSI가 제조되고 있으며, ASIC의 IP코어로서 Z80의 호환 프로세서를 준비하는 장치 제조사도 많다.
또, 최근에는 2002년에 샤프가 시스템 액정의 데몬스트레이션으로 유리 기판상에 Z80를 형성하였으며, MZ80C의 CPU와 교환해 동작시켰다.