从 homebrew 到 vintage – VCF 看展记录

Vintage 原意是特定年份和产区生产出的优质葡萄酒,被引申用来指代特定历史年代的经典作品。在北美的 Vintage Computer Festival 中,可以看到展会方修复、保存、呈现的 “homebrew computer club” 年代的经典计算机系统。下面按照年代排序记录 2026 年 8 月 1 日 VCF West 展会上所见的部分系统:

1981 – Commodore SuperPET SP9000

1980 年代出头,个人计算机革命如火如荼。整个展区展览了 1977-1986 的诸多 Commodore PC,不过单挑这一个谈谈。

这个型号是由滑铁卢大学 CSG(Computer Systems Group)和康懋达国际(Commodore,北美计算机公司,在加拿大成立,总部在宾州)合作打造的机型,主要目的是作为学生实验平台,提供 Fortran, Pascal, Basic 等编程语言的编程环境,从而摆脱对昂贵大型机的依赖。所谓 “打造”,指处理器是购入的,但剩余的主板等硬件设计和软件生态基本都是它们自行设计实现的:

  • 那个年代的攒机和当下相比,需要自行购买通用电子元件(如 RAM 等)焊在电路板上
  • 软件生态更难打造,需要亲自开发上面的监控程序和应用

具体到这个型号,它可以选择使用两个处理器之一来启动:

  • 使用 MOS 6502 处理器 启动。它的指令集?不是 x86, 不是 arm,是 “MOS 6502″。监控程序是 Commodore Basic 4.0(衍生自 Microsoft BASIC),使用 BASIC 语言来管理硬盘、内存、运行程序。
  • 使用 Motorola 6809 处理器 启动。它的指令集?6809。监控程序是 UWaterloo 独立开发的 Waterloo KERNAL。

关于 BASIC 环境

对于并不了解 BASIC 环境的我而言,这个环境像某种现代 Shell 和编程语言 REPL 的集成:它即承担 “系统管理” 的职能,又是一个事实上被大量使用的编程语言。在摊主的演示过程中,我见识到了如下操作:

  • 用 dir 列出当前目录的内容
  • 大概形如如下的操作。注意这里使用 BASIC 的 program mode,即在每一行的开头手动输入行号,将该行程序存储在缓冲区中(若不输入行号,则会直接执行,这是 immediate mode)。之所以通常选用 10,20 作为行号,是因为方便后续插入一行新代码(作为第 15 行)。BASIC 运行环境会自动按照行号顺序执行。
10 PRINT "Hello VCF West 2026"
20 GOTO 10

在输入完这两行程序后,输入 RUN 回车,就会执行这些在 program mode 中编写的代码。

我的初步观感是,BASIC 作为一个 Shell 也是相当基础的,即只有一个地址空间供用户使用,只用一个进程,没有进程管理。

尝试切换系统

搬动机身开关,就可以切换处理器和相应的监控程序。这种模式切换让我想到 DE1-SOC 的 MSEL 针脚,它被用来在 EPCS、HPS 和 HPS U-boot 中选择启动模式。

  • 切换到 Waterloo KERNAL 之后,我就完全看不懂在干什么了,据说更像大型机的交互方式。

与这种 “硬切换” 类似还有终止程序的操作。在另一个摊位,并非 SuperPET 的拟 Commodore 机器上(名为 MEGA65,是原班成员对当年 Commodore 未发布的 Commodore 65 个人计算机的重新构建),展示人员展示了退出一个程序的方法:没有中断按键,只需要按一下键盘侧面的小按钮,断电重启或者重新 load OS。再想想如今应对死机的断电重启方法,这种原始的方法似乎并未过时。

1981.8 – IBM PC model 5150

其实没有注意到有没有展出这个机型,但它实在是其它展品太重要的背景了,所以单独为其写一节。

Commodore SuperPET 发布的当年,IBM PC 也发布,CSG 就转投 IBM PC 了,这是一个悲伤的故事。在那之后的很长时间 IBM PC 基本就成了 PC 的主流和标准(比如想想 IBM-PC compatible 这个概念),当时只有 Apple 的 Macintosh 能与之抗衡,Commodore 和 Atari 基本上就被挤到了缝隙里。请看 VCF brochure 上某个摊位的介绍词:

Experience old technology that made up compuer circuits in the 1960s and 1970s before the IC took over

1986 – Macintosh Plus

其它都忘了,似乎和如今的 Mac 使用体验相近,印象深刻的只有对 Floppy disk 的使用。摊位桌上有八台 Macintosh 模样的计算机,每台计算机边上都有一个盒子,装着若干 3.5 寸软盘,包括系统盘和游戏。

在其中一台计算机前坐下之后,首先要学习如何在 Macintosh 中弹出上一个人已经插入的软盘。这个把鼠标放到左上角的菜单,按住鼠标不松,拖动到下拉菜单中选择 Eject。算是和当下不兼容的 UI 菜单交互逻辑了。

插入软盘很简单,软盘上有一个箭头表明插入方向。放入软盘口,推一下,软盘口会把软盘吸进去。

观察软盘外部结构:

  • 软盘有一个可滑动的金属遮片,将其拉开可以暴露出里面的磁性介质。计算机中工作的软盘就是这样拉开金属遮片读写磁性介质的。
  • 中央有一轴,让磁性介质可以被软盘驱动器带动旋转。

见到了两类软盘:

  • 应用软盘。通常自带系统,直接插入也能使用该应用。不过弹出后在插入下一个软盘前,计算机就无法运行任何应用了。
  • 系统软盘。会把系统加载到内存中。可能由多张软盘组成,大概是要逐个插入弹出。
  • 系统在内存中时,如果插入应用软盘,应用或许可以被加载到内存中,让应用在弹出应用软盘后仍然可用。

遇到软盘故障,请摊主帮忙弹出软盘:

  • 重启电脑的同时按住鼠标键(这个 Macintosh 的鼠标不分左右键只有一个键)
  • 最后的物理手段:使用回形针(paperclip),从软盘口边上的小孔往里捅。类似 SIM 卡针的原理

顺便一提,在 VCF 的寄售区(consignment)通常有大量二手软盘和二手软盘驱动器可供交易。

1991 – NeXT Cube

NeXT Cube 是 Steve Jobs 离开 Apple 创立 NeXT 时期的创作。演示中,已经发现了很多现代 Apple 计算机人机交互逻辑的原型或开端:

  • 双击图标,运行程序
  • 多窗口 GUI 中,拖动窗口时窗口内的内容仍然可见,而不是变成一片灰的轮廓。很别具用心的设计。
  • 在 Email 中录制语音。录制好之后,在邮件编辑窗口上显示一个嘴唇的符号。再点击这个嘴唇符号,你能重听你录制的内容。很神奇的设计。

外传:CHM Demo Lab

由于 VCF West 2026 在 Computer History Museum 举办,日期恰好是 8 月的第一个星期六,所以可以顺便看到 CHM 两个文物级计算机系统的现场操作演示(Demo Lab)。

1959 – PDP-1

PDP-1 (Programmed Data Processor-1) 是 DEC (Digital Equipment Corporation,读作 “deck”) 公司开发的产品。让我们看看 CHM 主页对其的评价

it was the first commercial computer that focused on interaction with the user rather than the efficient use of computer cycles.

PDP-1 的实时计算传统传承自 MIT Lincoln Lab,包括人员上和技术上的传统。DEC 的创始人 Ken Olsen 和 Harlan Anderson 两人都来自 MIT Lincoln Lab,前者参与了该实验室主导的 TX-0 和 TX-2 的设计。PDP-1 的设计师(designer),Ben Gurley,也是前 Lincoln Lab 成员,他曾经参与设计 TX-0 的 CRT 显示屏和光笔(light pen),在技术上,PDP-1 是 TX-0 和 TX-2 的后继者

  • MIT Lincoln Lab 的实时计算传统可以追溯到服务于美国军方飞行模拟的 Whirlwind 项目。它之后推动的 TX-0 (Transistorized Experimental computer 0) 和 TX-2 项目中,CRT 显示屏和激光笔提供的实时交互方案也和当时盛行的 Punchcard + 批处理交互方案分庭抗礼。

Ken Olsen 和 Harlan Anderson 从 Lincoln Lab 离开创立 DEC,起家的产品并非整台计算机,而是面向电气工程师的所谓 “Lab Modules”比如振荡器、加法器等等电路模块,不同模块之间可以相互连接组成更大系统。事实上,这些将这些模块组合起来是可以得到计算机系统的,于是 DEC 在一段时间的暂避风头之后大胆进入当时巨头林立的计算机市场。PDP 系列计算机的设计深受 Lincoln lab 传统的影响,而 PDP-1 也回流到了 MIT:

试玩 Spacewar!

Hingham Institute Space Warfare Study Group 鼎力开发,后续又由原作者协助修复

1961 – IBM 1401 及配套系统

先从背景(参考 CHM 主页上对 IBM 1401 的介绍)说起。在此之前,小型企业记账系统的主流机器是 tabulator,这种机器使用 plugboard(可以理解为插线板)来控制复杂运算,即通过插拔 plugboard 上的跳线来改变机器的功能。与之相对,IBM 1401 使用 punchcard 读入程序。在商业上,IBM 1401 很大程度上在小型企业记账系统市场淘汰了 tabulator,成为该市场流行的第一个 Stored-program computing 机器。

  • 一个细微但关键的问题:”程序” 的容器是一个以特定形式连接起来的 plugboard,还是一叠 punchcard(乃至后来存储在软盘、磁盘)- 前者的成果是临时的,完成后可能很快就会被拆除重组;而后者的成果可以长久保留。
  • Stored-program computing(把程序放在计算机存储中)的概念此前已经存在。Punchcard 虽然最初在 Hollerith 推广普及它的年代主要用来存储统计数据,但早在 IBM 1401 系统出现前,Punchcard 就被用来存储 Fortran 程序了。例如,在 1957 年,人工智能学者 Frank Rosenblat 就利用了 Cornell Aeronautical Laboratory 里的一台 IBM 704 机器实现了早期 Perceptron 的原型,推测这里的编程环境就是 Punchcard + stored-program computing。
  • IBM 1401 没有创造一个新的编程的物理环境,它创造的是一个新的编程的社会语境,即一般企业、技术员乃至广泛市场上的程序员的语境下的编程。

系统构成

IBM 1401 处理器是与诸多其它部件一起使用的,比如下面的部件(并非完整列表):

IBM 729 (II) Magnetic Tape Unit – 磁带的古怪之处

  • 当时的内存大小只够存储几英寸长度的磁带所携带的信息。所以磁带被分成若干个 segment,每个 segment 恰好能被一次性处理,segment 之间是空白不存储数据的地方。
  • 磁带转动的过程是一个不断启停的过程 – 加速转动到下一个 segment 然后刹车(伴随而来的机械磨损就体现出 segment 间空白区域的作用了),停止并等待磁带内容被读取至内存并被 CPU 完成处理,然后再前往下一个 segment。

IBM 83 Card Sorter – 打孔卡分拣机(sorter)。了解到了它的一个样例使用方式 – 给一叠 Punchcard 按照多位数排序

  • 分拣机每次只能按照一个位置的打孔数值来分拣,比如说按照该位置数值 0-9 把卡分拣到 10 个筐里(大意,实际上有 13 个而非 10 个筐)
  • 方法是人工 radix sort,先按照最后一位分拣,把 10 个筐里的卡按顺序叠放到一起,再按照倒数第二位分拣,以此类推。这样一来,在第 k 轮,可以保证得到的那叠卡后 k 位是顺序排列的

IBM 1403 printer

  • 打印纸被左右两边的小孔阵列固定在机器上。打印纸前面是链条 (print chain) 驱动、高速运动的字模 (type slug),字模和打印纸前面中间有横跨整个纸宽的色带 (ink ribbon) ;打印纸后面,逐列都有一个电磁铁驱动的小锤。
  • 当字模运动到恰当的位置时,小锤敲击纸张,将其按压到色带及其背后的字模上,打印出字符。
  • 打印机自身的逻辑是精简的,它的正确运作完全依赖处理器那边驱动程序的控制。
  • 事实上,IBM 1403 打印机的优良性能让它比 IBM 1401 有更长的市场寿命。

Demo:程序、程序的运行和运行结果

程序就是如图所示的这一叠 Punchcard。

运行时,需要(大概)按照 JOB card – 这一叠程序 – 数据卡 的顺序叠放 punchcard,交给一个 IBM 1402 card reader 输入。整个机房的机器由地板下的超粗线缆相连,程序运行会让 IBM 1403 printer 打印出结果:

你甚至可以看到博物馆工作人员对程序的版本控制:BIGPRINT REV 17.1


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *