자일로그 Z80

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

자일로그 Z80(Zilog Z80)은 마이크로프로세서 가운데 하나로, 자일로그에서 만들었다. 1976년에 발표되어 1980년대 중순까지 개인용 컴퓨터 CPU 등에 쓰였다. 시마 마사토시를 비롯하여 인텔에서 나온 8080의 개발 스탭이 설계했기 때문에 8080과 바이너리 수준에서 호환된다.

2.5 MHz의 Z80, 4 MHz의 Z80A, 6 MHz의 Z80B, 8 MHz의 Z80H, Z80M 등의 변종과 타사에서의 세컨드 소스 제품이 있다.

Z80과 그 호환 CPU는 NEC의 PC-6001, 6601, 8001, 8801 시리즈, 샤프의 MZ, X1 시리즈, MSX 컴퓨터, 세가의 게임기등에 탑재되었다. 또, Z80에서 명령을 몇 개 뺀 간략판이 닌텐도의 게임보이에 사용되었다. S1 MP3 플레이어에도 사용된다.

자일로그사는 이를 16비트(자일로그 Z800, 자일로그 Z8000, 자일로그 Z180, 자일로그 Z280) 32비트 (자일로그 Z80000, 자일로그 Z380)로 확장하려고 노력하였으나, 다른 회사에서 이미 앞서는 바람에 좌절되었다. 자일로그사의 가장 최근의 중앙처리장치는 자일로그 eZ80이며, Z80을 24 MB의 어드레싱 능력을 가지도록 만든 빠른 CPU이다. 그 밖에도 8080에 있던 주변 회로 IC 8251(SIO)·8253(CTC/PIT)·8255(PIO) 에 대응하는 것으로 Z80SIO, Z80CTC, Z80PIO, Z80DMA 등의 패밀리가 있다.

MS-DOS의 전신인, 8비트 컴퓨터의 CP/M은 Z80을 기준으로 제작되었다.

Z80의 개요[편집]

Z80은 인텔 8080 마이크로 프로세서의 개량형이라고 할 수 있는 제품이며, 8080에 비해 약간의 아키텍처 확장, 전원 5V 단일화 및, 보다 높은 클럭 주파수 대응 등을 도모할 수 있었다. 주소 공간은 16비트(64KB)로 그 이상으로 확장할 때에는 MMU 등으로 뱅크 교환을 한다. i8080의 개발진들이 회사를 나와 설립한 회사가 자일로그였으며, Z80은 i8080과 소프트웨어 호환성이 있게 설계되었다. i8080에 더 많은 명령어, 인터럽트 모드가 추가되었다. DRAM 리프레시 회로도 포함하고 있다.

또한 최대클럭 주파수의 차이는 Z80A (4 MHz), Z80B (6 MHz) 등 말미에 붙인 알파벳으로 구분된다.

아키텍처 확장은 DRAM 정보를 유지(리프레쉬)하는 기능을 내장하기 위한 레지스터 추가, 8080에서는 1조인 범용 레지스터군을 바꾸어 사용할 수 있는 앞와 뒤, 2조로 했고, 또, 2 개의 인덱스 레지스터를 사용한 메모리 조작을 포함한 명령의 증강, 인터럽트 제어의 강화, 와이어드 로직에 의한 명령의 실행 등이 이루어졌다. 곱셈과 나눗셈 명령은 8080과 마찬가지로 존재하지 않는다.

8080에 대해서 상위 호환성을 가져, 8080을 위해서 쓰여진 소프트웨어를 모두의 변경 없이 실행할 수 있지만 명령을 써 나타내기 위한 「니모닉」는 8080과는 완전히 다르다. 보다 쉽게 기술할 수 있도록 정리된 것이다. (초보자도 알기 쉬운 반면 다른 CPU의 니모닉과 비교하면, 번지 매김(addressing mode)이 불확실하다는 결점도 있었다.) 리틀 엔디언으로 로드 명령은 소스가 뒤 목적 위치(데스티네이션)가 앞이다.

또, 본래 16비트 고정의 인덱스 레지스터를 8비트로 사용할 수 있는 등의 기능은 하드 구성에서 파생했다고 생각된다. 명령어 표에는 없는 숨겨진 명령이 존재했다.

Z80는 「실행에 걸리는 클럭 수나 명령의 총 바이트 수가 평상시 명령을 썼을 때보다 적다」는 테크닉이 많이 존재하며 이것들은 「최적화」「클럭 줄임」 등으로 불렸다. 또, 추가된 블록 전송 명령이나 인덱스 레지스터 명령은, 다른 명령으로 대신 쓰는 경우보다 소요 클럭수가 크고, 사용하지 않는 일이 있었다.

그 밖에 Z80는, 상대 점프는 할 수 있는 것의 범위가 좁은 등 위치를 바꿔 구성하는 것이 힘들고, 멀티태스킹 지원 운영 체제를 만들려면 적합하지 않다고 여겨졌다. 또, 주소를 참조할 때의 오프셋 지정은 범용 레지스터에는 쓰이지 않고, 인덱스 레지스터 사용에서는 오프셋 지정이 0~7으로 고정인 모아 두어 C 언어의 포인터와의 궁합이 좋지 않은 면이 있었다.

또한 Z80는 addressing mode가 적어서, 각 명령 코드를 16 진수로 기억하는 일도 그렇게 어렵지는 않았다.

레지스터 집합[편집]

(괄호 안은 레지스터 크기:비트 수)

A, B, C, D, E, H, L는 8080의 같은 이름의 레지스터와 같은 기능을 가진다. F,F'는 8080 호환의 플레그 레지스터이다.

  • 범용 레지스터표(8)
    • A F
    • B C
    • D E
    • H L
  • 범용 레지스터뒤(8)
    • A' F'
    • B' C'
    • D' E'
    • H' L'
  • 인덱스 레지스터(16)
    • IX
    • IY
  • 프로그램 카운터(16)
    • PC
  • 스택 포인터(16)
    • SP
  • 리프레시 카운터(7)
    • R
  • 인터럽트 벡터 레지스터(8)
    • I

데이터 버스 8비트, 주소 버스 16비트의 하드웨어에 A, F, B, C, D, E, H, L, IX, IY, R 등의 레지스터가 있다. 이 중 IX, IY는 16비트 길이의 인덱스 레지스터로 Z80에 추가된 것이다. 또 A, F, B, C, D, E, H, L은 각각 이면 레지스터 A', F', B', C', D', E', H', L'가 존재하므로 서로 전환해가며 사용할 수 있다. 레지스터 중 B, C, D, E, H, L의 8비트 레지스터들은 각각 BC, DE, HL로 묶어서 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      public1000 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와 교환해 동작시켰다.

다른 주된 Z80 호환 CPU[편집]

(고속화나, 주변 기능의 확장이 된 것)

  • HD64180 - 히타치 제작소(현르네사스테크노로지)가 개발. 고속화된 Z80. 빅터의MSX2, HC-90,95에 탑재되었다. 후지쯔의FM TOWNS HR등의 CD-ROM콘트롤러에도 사용되었다.
  • R800 - (주) ASCII가 개발한, 내부 16비트의 고속판 Z80 호환 CPU. 곱셈 명령을 확장하고 있지만 불편이 있다. MSX turboR에 탑재되었다. MMU나 DMA를 가지지만 같은 turboR에서는 사용되지 않았다.
  • μPD9002 - 일본 전기가 개발한, 16비트 PCPC-88VA에 탑재된 CPU. V30하지만 8080 호환 모드를 가지는 것과 같게, V30 모드와 Z80 호환 모드를 가진다.
  • KC80 - 카와사키 마이크로일렉트로닉스( 구카와사키 제철)의, Z80 호환의 고속판 CPU. 곱셈·나눗셈 명령을 가진다. KC80를 코어에 MMU등을 추가한 편입용 IC로서 * KL5C8012, KL5C8016, KL5C8400가 판매되고 있다. 16비트판으로 상위 호환의 것 KC160도 판매되고 있다.

후계 CPU[편집]

  • Z180 - 자일로그에서 히타치의 HD64180를 자사의 제품으로서 채용한 것.
  • Z280 - 16비트 확장판. 채용되는 일이 그다지 없고, 지금은 쓰이지 않는다.
  • Z380 - 32비트 확장판. 16비트의 Z8000에 흡수되어 발전적 해소했다.

주된 개발 환경[편집]

  • 어셈블러
  • M80
  • C 언어
  • LSI C-80
  • Hitech-C
  • BASIC은 생략