周末尝试在面包板上搭建一个Z80的“最小系统”,整个过程出乎意料地顺利,一次就成功了。😎

看看运行起来的样子:
(视频加载失败,请刷新页面再试)
(面包板上,绿色 LED 是时钟信号,三个橙色 LED 对应地址线 A0 到 A2。)
电路构成很简单:
- 以 NE555 为核心的时钟发生器
- Z80 CPU
- AT28C256 EEPROM:存放要运行的程序
接线也不复杂:
- CPU 和 ROM 的地址线、数据线接起来
- 为了简化,我只接了地址线
A0~A2,ROM 的其他地址线全部直接接地。
- CPU 的
/NMI、/INT、/WAIT、/BUSRQ 都接 VCC
- CPU 的
/RESET 用电阻上拉,用一根杜邦线接地实现复位
- ROM 的
/WE 接 VCC
- CPU 和 ROM 之间的连线:
- LED(带限流电阻)的正极接
A0 到 A2,负极接 CPU 的 /M1
- 接
/M1 时,LED 显示的是取指令时的地址;如果直接接地,则会受到 Z80 刷新 DRAM 时地址信号的影响,看起来会有些“乱”。🤔
程序很简单:
org 0
start:
nop
nop
nop
nop
nop
nop
nop
jp start
对应的机器码是:00 00 00 00 00 00 00 C3 00 00。
用自己做的 28C 系列编程器,把机器码写入 AT28C256(见《回顾:自制 28C 系列 EEPROM 编程器》)。这个自制工具的经历,也是对基础 & 综合技能(如硬件调试和底层编程)的一次很好实践。
上电、复位,程序就跑起来了。🎉
jp 指令在地址 0x07,正好落在 3 位地址线的范围内。
这里有一个细节:执行到 jp 指令时,CPU 还会到 ROM 的 0x08 和 0x09 单元取跳转地址,但我们只能访问 ROM 的 0x00 到 0x07 单元。访问 0x08 和 0x09 单元时,实际上读到的是 ROM 的 0x00 和 0x01 单元的数据。这两处是 nop 指令,机器码正好是 0x00,所以只接了 3 根地址线的情况下,程序仍然能够正确运行。✨
对于想要深入了解这类经典处理器架构和计算机基础原理的朋友来说,这种“最小系统”的搭建是一个非常直观的入门方式。
(完)
相关的往期文章:
|