Zilog Z80微处理器迎来50周年
速览
1974年诞生的Zilog Z80微处理器今年迎来50周年。它曾是家用电脑、游戏机及嵌入式系统的核心,对个人计算机发展影响深远。至今仍在部分领域被使用,展现其经典地位。
AI 深度解读
背景
1976年7月,Zilog Z80处理器正式发布,距今已满50年。当时距离人类最后一次登月(1972年)不到4年,距离二战结束比距离今天更近,大致处于肯尼迪遇刺(1963年)与柏林墙倒塌(1989年)的中点,比朝鲜战争(1950‑1953年)更接近如今,但比“9·11”事件(2001年)还要早得多——而“9·11”本身已是25年前的事了。
Z80极为成功,广泛应用于大量8位微型计算机,包括早期个人电脑、家庭及爱好型计算机,以及众多嵌入式、工业应用。它与二进制兼容的Intel 8080和8085一起,共同为8位微处理器创造了事实上的硬件标准,进而催生了CP/M操作系统和Microsoft BASIC这样的事实性软件标准。Z80自身也衍生出众多克隆芯片和派生架构,最著名的包括Sharp LR35902(用于初代Game Boy)。Zilog后来放弃了自有16位/32位衍生架构,重新回到基于Z80的微控制器及变体(如流水线、更高主频的eZ80),主要面向工业应用。
原文作者声称自己年纪太小,没有亲历Z80在家庭电脑领域的辉煌(除了前面提到的Game Boy),但它在工业领域的广泛使用意味着原版Z80仍然存活,直到两年前Zilog才正式停产。作者本人第一次接触Z80是在十几岁时,翻阅一家电子公司的目录,惊讶地发现它们仍在销售。于是自己设计了一台Z80小电脑,说服学校老师允许夜间使用摄影暗房来蚀刻PCB。几位老师好奇他在做什么,作者因此听到了许多关于老式家用电脑、游戏机的有趣轶事,还有一个关于用Tupperware保鲜盒做成的DIY绕线计算机、运行CP/M和WordStar、连接一台“借来的”IBM终端来写论文的故事。后来作者收到了许多旧芯片当作礼物,包括MCS‑85系列、多个Z80、8085、6502和6522。这段经历教会了他许多系统工程经验,以及一些意想不到的教训(可靠的电源上电复位惊人地困难;写链接器比写汇编器难得多;而写编译器其实是可以做到的)。
核心内容
Z80的故事要从更早的Intel 8008说起。当年计算机终端公司(Computer Terminal Corporation, CTC)建造了一款可编程终端Datapoint 2200,其8位处理器由分立TTL芯片构成。Intel当时为CTC提供移位寄存器和存储芯片。有人提议用定制集成电路取代部分TTL“墓地”,最终考虑将整个8位CPU做到单芯片上。CTC委托了两家公司:Texas Instruments和Intel。但两家都没能按时完成设计。当Intel准备好芯片时(最初按系统命名法叫1201),CTC已经基于TTL设计开始销售终端了。CTC的工程师对芯片性能也不满意,并且已经为下一代终端修改了架构。TI最终放弃了设计,而Intel则继续推进并成功将其商业化,版本命名为8008(像4004一样,由市场部门重新命名)。
8008拥有7个寄存器:A、B、C、D、E、H、L。其中A是累加器,其余可用作操作数或临时存储。H和L分别构成内存指针的高低位。通过第8个伪寄存器M访问内存,M表示HL指向的内存字节。处理器内部通过几个标志位(进位、奇偶、零、符号)跟踪ALU状态,并据此执行条件跳转(包括调用和返回)。程序计数器PC几乎从不直接可见。有专门的函数调用和返回指令,但处理器使用一个内部返回地址栈,深度为8层。原因是Datapoint 2200原本计划使用串行内存,将调用栈放在内存中会被视为性能瓶颈。内存地址宽度14位,有独立的I/O地址空间,共32个I/O端口(地址总是立即数,并嵌入操作码中)。中断处理有一个特殊的“重启”指令,可调用地址空间开头8个槽位之一(0x00, 0x08, 0x10, ..., 0x38),槽位索引嵌入RST操作码自身。发生中断时,处理器向外部发出信号表示已收到提示,然后盲目执行数据总线上的当前内容——那应该是一条RST指令。这有点棘手:CPU没有通用堆栈来保存寄存器,所有内存访问都需要HL,但中断处理程序中不能破坏HL。预期的解决方案是通过I/O总线上的外部锁存器作为临时寄存器。总体而言,架构相当简单,约3500个晶体管,采用DIP18封装。地址和数据复用,需要外部锁存。内部译码/执行状态暴露,需要外部译码来驱动锁存器并判断处理器正在做什么(读/写内存还是I/O总线)。处理器需要两相移相时钟(运行在500kHz),+5V正电源和-9V负电源。
8008架构的缺点在开发期间就已为人所知,典型的工程循环:在开发完成之前,改进架构的想法已被提出。Federico Faggin(从4004项目调来)推动开始改进版工作,但管理层坚持先看看市场对两款微处理器的反应。竞争对手陆续宣布他们正在设计8位方案,这些延误最终让Intel损失了9个月的市场领先时间。甚至在项目最终获批之前,Faggin就获准从Busicom招聘Masatoshi Shima来参与8080设计。与CTC参与8008开发类似,Busicom也参与了4004的开发(他们最初想要一组用于计算器的定制芯片)。潜在客户对8008的批评和反馈也影响了8080的设计,并且早期决定放弃二进制兼容。
8080本质上拥有与8008相同的寄存器集,但用外部堆栈(位于内存中,通过栈指针寄存器SP访问)取代了内部返回地址栈。栈指针可以与HL交换或移入/移出,寄存器可以成对入栈/出栈。除了HL,其他寄存器对包括BC、DE和AF(累加器和ALU标志),但8080汇编更喜欢将后者称为“程序状态字”PSW。内存地址提升到完整的16位,提供64KB地址空间。I/O端口是……
(原文在此处中断,但根据上下文,应为8080的I/O端口细节,因原文未完整,我们已知8080有256个I/O端口,通过IN/OUT指令访问,地址空间独立。后续内容作者未写完,但核心内容已足够。)
关键要点
- Z80发布50周年:1976年7月正式发布,距今半个世纪,比许多历史事件更早。
- 广泛应用:从个人电脑、家用电脑到工业嵌入式系统,Z80成为8位微处理器的标杆。
- 与8080/8085的兼容性:共同定义了8位CPU的硬件标准,催生了CP/M和Microsoft BASIC。
- 衍生架构:包括Sharp LR35902(Game Boy)、Zilog自身的eZ80等,至今仍在工业领域使用。
- 起源故事:源自CTC Datapoint 2200终端,Intel 8008(原1201)是第一个尝试
