你写过成千上万行代码,但你能回答这个问题吗:CPU 收到一条指令后,物理层面上到底发生了什么?
大多数程序员的答案是模糊的。我们背过“取指-译码-执行”,但那只是三个词,不是画面。这期要解读的视频系列,恰好补上了这块认知缺口——Ben Eater 的 "Build a 6502 computer"(在面包板上造一台6502计算机) 系列。这位前 Khan Academy 工程师(据其个人频道介绍)用几十集视频,当着观众的面,用一颗1975年架构的 CPU、几块 RAM/ROM 芯片和一堆杜邦线,从零攒出一台真正能跑程序的计算机,最后甚至让它在裸机上运行了 BASIC。
这个系列为什么值得程序员花十几个小时去看?因为它把计算机科学课本里最抽象的章节——总线、内存映射、地址译码、复位向量——全部变成了看得见、摸得着、还能用万用表量的实物。在 YouTube 上,这个系列单集播放量普遍在几十万到数百万级,频道订阅早已超过百万(以上数据未经精确核实,以频道页面为准)。它可能是过去十年里,把“计算机是如何工作的”讲得最透彻的一套免费视频。
| 项目 | 内容 |
|---|---|
| 视频系列 | Build a 6502 computer(面包板6502计算机系列) |
| 频道 | Ben Eater |
| 作者背景 | 据 Ben Eater 自述,曾长期担任 Khan Academy 软件工程师,后全职做硬件教育内容 |
| 时长 | 单集约 15-30 分钟,系列20余集,总时长超过10小时 |
| 播放量 | 频道订阅超百万,6502系列累计播放达千万级(据频道页面,未经精确核实) |
| 核心主题 | 用1975年的 6502 CPU 从零搭建一台可编程计算机,拆解冯·诺依曼架构的每个物理细节 |
| 配套资源 | eater.net/6502 提供全套接线图、芯片手册和零件清单 |
说明:本系列自2019年起陆续发布,属于常青经典内容。之所以在第2轮编程主题中选择它,是因为“程序员理解计算机本体”这个方向在此前的选题矩阵中完全空白,而它恰恰是一切编程知识的物理地基。
系列的第一课不是 CPU,而是时钟。Ben 用一颗成本几毛钱的 555 定时器芯片,搭了一个非稳态多谐振荡电路,让 LED 以固定频率闪烁——这就是数字世界的“心跳”(视频演示)。
关键洞察在于:CPU 本身没有任何“智能”,它只是一个每收到一个时钟脉冲就走一步的状态机。你把时钟调到 1Hz,就能用肉眼看着计算机一个周期一个周期地“爬”——这正是 Ben 系列最著名的设计:单步模式。他做了一个带按钮的时钟模块,按一下,CPU 走一个时钟周期,地址总线和数据总线上的 LED 会实时显示当前发生了什么。
(延伸分析)这一招的教育价值被严重低估了。现代 CPU 有十几级流水线、乱序执行、分支预测,你永远不可能“看见”它在干什么;而 6502 每条指令 2-7 个周期,行为完全确定。想理解任何复杂系统,先找一个能单步运行的简化版本——这个方法论适用于数据库、网络协议、编译器,远不止硬件。
时钟搭好后,Ben 请出主角:Western Design Center 的 W65C02 CPU——经典 MOS 6502 的 CMOS 后裔。他把 CPU 的 40 根引脚分成三类,这也是全系列的骨架(视频讲解):
(延伸分析)这个划分精确对应了课本里的冯·诺依曼架构,但在面包板上它的意义完全不同:你会亲眼看到,所谓“内存访问”就是 CPU 把一个16位地址放到地址总线上,拉低 R/W 引脚,然后等一个或几个时钟周期。没有魔法,没有抽象层。之后你再学 DMA、内存屏障、为什么未对齐访问慢,脑子里都有画面了。
裸机没有操作系统,没有虚拟内存——CPU 吐出一个地址,谁来响应?答案是地址译码电路。Ben 用少量逻辑门,把 64KB 空间划成一张内存地图(视频演示):
$0000–$7FFF:32KB 静态 RAM(62256 芯片),程序运行的地方$6000 附近:65C22 VIA 接口芯片,负责外部 I/O$8000–$FFFF:32KB EEPROM(AT28C256),存放程序和启动代码(延伸分析)这是全系列思想密度最高的一集。内存映射 I/O(Memory-Mapped I/O)——CPU 对外设的“访问”和对内存的“访问”是同一条指令、同一套总线——彻底统一了“计算”与“通信”两个世界。往近了说,今天显卡的显存映射、嵌入式开发里寄存器闪灯,原理与1975年一模一样;往远了说,这也是理解为什么 mmap 能把文件“变成”内存的钥匙。
按下复位键后 CPU 做的第一件事是什么?Ben 用总线 LED 给出了教科书级别的演示:65C02 复位后,会自动去地址 $FFFC 和 $FFFD 读取两个字节,把它们拼成16位程序计数器(PC)的初始值,然后从那里开始执行(视频演示)。这两个字节叫复位向量(Reset Vector)。
为什么地址在 EEPROM 区域的最高处?因为复位向量必须放在断电不丢的存储里,而 65C02 的设计者把它固定在地址空间的顶端,于是启动代码自然被放在 ROM 顶部,开机即达。
(延伸分析)对照现代系统,这条线索一路延续:BIOS/UEFI 找到引导扇区(x86 上是 512 字节、以 0x55AA 结尾),引导扇区加载 bootloader,bootloader 加载内核——一层层的“复位向量”。面包板上那两字节,就是你电脑每次按开机键时上演的那场大戏的最小完整版本。
芯片买来时是空白的,程序怎么进去?Ben 的方案极具启发性:用一块 Arduino 板自制 EEPROM 编程器——Arduino 通过控制引脚时序,逐字节写入机器码(视频演示)。
他没有买商用烧录器,而是先写个 sketch 设置地址总线、再从数据总线写值、拉一下写使能引脚,一百行代码解决问题。(延伸分析)这个片段藏着硬件圈最宝贵的精神气质:接口是公开的,时序是文档化的,那么任何东西都可以用另一台计算机来驱动。程序员平时被现成工具链惯坏了,很少体验“工具不存在,自己造一个”的状态——而这恰恰是对系统理解最快速的路径。
程序终于跑起来了,但怎么证明?Ben 选择驱动一块经典的 1602 字符型 LCD(HD44780 控制器):程序通过 65C22 VIA 芯片的 I/O 口,严格按照 HD44780 的数据手册发送初始化序列和字符(视频演示)。
这一集的技术细节密度全系列最高:4位模式接线以节省引脚、忙标志查询、使能脉冲的时序要求。Ben 反复强调一个动作——读数据手册(datasheet)。他全程就是拿着几页几十年前的英文文档,一根线一根线接出来的。
(延伸分析)“读手册”是被现代开发环境废掉的肌肉。框架和 SDK 把一切封装成 install 和 import,程序员越来越不敢直接面对一份原始规格文档。这一集等于当众示范:数据手册不是参考书,是操作手册,硬着头皮读十页,你就超过90%的人。
系列后期最精彩的工具:Ben 把一块 Arduino 直接插到计算机的总线上,做成总线监听器(bus sniffer),实时打印 CPU 每个周期取了哪个地址、读了什么数据(视频演示)。于是“程序在运行”变成了屏幕上一行行滚动的十六进制——你可以看着 6502 一条指令一条指令地执行你写的循环。
(延伸分析)这就是可观测性(observability)思想的物理形态。软件工程师熟悉的 strace、Chrome DevTools、分布式追踪,本质上都是“总线监听器”:在不干扰系统的前提下,窥视它的每一次取指。当你亲手接过一次总线,你对“日志为什么只能看到一半真相”会有全新的体感。
视频里反复出现的 6502,值得单独讲讲背景(此部分为延伸资料,非视频内容):1975 年,MOS Technology 的 Chuck Peddle 团队以 25 美元的价格发布 6502,而当时 Intel 8080 卖 179 美元。价格雪崩之后,个人计算机才成为可能:Apple I/II 用 6502,任天堂 NES 的核心是 6502 衍生品(理光 2A03),Commodore 64 用的 6510 同样源自 6502 家族,后者以约 1700 万台的销量长期保持“单型号最畅销计算机”纪录。更冷知识的是:WDC 的 W65C02 至今仍在量产销售,活跃在嵌入式和航天级应用中——一颗 1975 年架构的芯片,服役超过半个世纪。
(延伸分析)程序员看这段历史会有奇妙的既视感:低价引爆生态、生态反哺标准的故事,与开源软件、云计算、大模型 API 的价格战如出一辙。技术在换代,商业的物理学没变。
graph TD
CLK[时钟模块<br/>555定时器/晶振] -->|CLK 节拍脉冲| CPU[W65C02 CPU]
CPU -->|16位地址总线| MAP[64KB 地址空间]
CPU -->|8位数据总线| BUS[数据搬运]
CPU -->|R/W 控制信号| CTRL[控制总线]
MAP --> A1[$0000-$7FFF<br/>32KB SRAM 62256]
MAP --> A2[$6000 区域<br/>65C22 VIA I/O 芯片]
MAP --> A3[$8000-$FFFF<br/>32KB EEPROM 程序]
A3 -->|复位向量 $FFFC| CPU
A2 -->|PORT A/B| IO[LED / LCD / 按键]
SNIF[Arduino 总线监听器] -.实时窥视.-> BUS
PROG[Arduino EEPROM 烧录器] -.写入机器码.-> A3
style CPU fill:#f9f,stroke:#333
style CLK fill:#bbf,stroke:#333
而这套知识如何回流到程序员的日常:
graph LR
A[面包板实践] --> B[理解取指-译码-执行]
A --> C[读懂数据手册的能力]
A --> D[单步调试的观测思维]
B --> E[看懂汇编/性能剖析]
C --> F[直接面对原始文档]
D --> G[strace/DevTools/分布式追踪]
E & F & G --> H[从框架使用者<br/>变成系统理解者]
第一,你不需要买芯片就能完成80%的学习。 Ben Eater 官网 eater.net/6502 提供全套接线图、零件清单和分步说明,动手派可以照做(全套零件成本不高,他后来也推出了成品套件);纯键盘派则可以用在线模拟器先跑起来,比如 easy6502(skilldrick.github.io/easy6502),浏览器里就能写 6502 汇编、看内存、点灯。建议路径:先在模拟器里写一段“从 $8000 死循环点亮 LED”的程序,再回头看视频,代入感完全不同。
第二,把“单步”带回你的软件世界。 这个系列最值得偷师的不是电路,而是方法:把系统降到 1Hz,观察每个周期。对应到日常——用 strace 看一次进程的系统调用,用浏览器断点看一次事件循环,用 EXPLAIN ANALYZE 看一次查询。可观测性不是运维专属技能,而是理解的代名词。
第三,重拾读文档的勇气。 Ben 全程只靠芯片 datasheet 完成一切。给自己立个规矩:下次遇到新库,先花30分钟读它的原始规范或 README 全文,而不是搜教程。这30分钟会持续复利。
第四,对“黑盒”保持解剖欲。 从 555 方波到 LCD 亮起,中间没有任何一行代码是“框架帮你写好的”。程序员的价值分层正在于此:会用工具的人很多,理解工具之下还有一层、再有一层的人极少。面试里被问“从输入 URL 到页面显示发生了什么”时,看过这个系列的人给出的答案会自带电路图的颗粒度。
这个系列最大的价值,是把"计算机"从你屏幕上一个不可名状的抽象符号,还原成一块插满芯片的面包板——看过一次取指-译码-执行的物理现场,你对代码的理解从此有了地板。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
