内容


仿真与计算历史

计算机历史仿真项目和 SIMH

Comments

在 1978 年末,作为生日礼物,我收到了第一台计算机。那是一台 TRS-80 机型 1,它具有 4KB 内存和大容量存储磁带,之后我将其升级为 Exatron 软盘。在几周内,我的 BASIC 编程技能就已经发展到超出我即将完成程序的可用内存的地步:这真叫人感到悲哀。没想到 30 年后,作为嵌入式固件工程师,我还一直花费大量的时间试图将更多的代码和数据挤入较小的地址空间。

计算机的历史是很神奇的,开发的一些早期计算机也是如此。许多早期的计算机都是简陋的计算器,如 Konrad Zuse 的 Z1,他在 1931 年发明了它,再往回看,用于 1890 年人口普查的 Herman Hollerith 的机械分拣机;六年以后他的公司成为组成 IBM 的公司之一。Zuse 还为他的 Z4 计算机引入了名为 Plankalkül 的首个算法编程语言。Z4 是机电式的(继电器式),支持 64 个存储字,且运行高达 40Hz(消耗功率为 4KW)。John Atanasoff 教授开发了第一台数字计算机,他从 1937 年开始并于 1941 年完成,其对爱荷华州立大学的计算使用二进制。Atanasoff-Berry 计算机(Atanasoff-Berry Computer,ABC)的理念用于在第一台通用电子计算机,即 ENIAC。对这些系统编程对于我们大多数人(伴随着 Pascal、C 或 LISP 一起长大的人)来说都是陌生的。例如,对第一个 ENIAC 编程需要物理重新布线以便更改其编程。Wikipedia 提供了有关计算机仿真的非常吸引人的信息(请参考 参考资料)。

计算机历史仿真项目

就像我的旧的 TRS-80 一样(毫无生气地放在布满尘土的盒子中),计算历史很容易不知不觉地过去。幸运的是,有些人(如 Bob Supnik)已经将时间和精力投入到抢救一些最重要的计算历史中。通过仿真,Supnik 创建了计算机历史仿真项目,作为通过仿真恢复重要计算系统的一种方式。Supnik 的项目受到来自世界各地的人们的帮助,从而产生了名为 SIMH 的仿真大量计算系统的多系统框架。一些系统包括 Data General Nova、DEC 的 PDP 和 VAX、IBM 1401 和 7090/7094、Interdata 系统,甚至 MITS Altair 系统(适用于 8080 和 Z80)。要了解其他仿真系统,请参考 参考资料

SIMH 体系结构

让我们先看一下 SIMH 的一般体系结构,然后再探索一些 SIMH 的示例用法以便引导旧的仿真硬件。

SIMH 是一个框架,系统仿真器将构建到其中。在您探索 SIMH 源树的层级时,您将发现一系列常用的仿真器文件,以及一系列包含机器仿真(或机器模仿真类)的子目录。如图 1 所示,仿真器由仿真器控制包(包含仿真器控制台、终端和文件 I/O 库以及计时器和套接字)和一系列设备组成。设备的脚本是一系列寄存器,用来维护设备状态(在其激活时)和代表数据集的单位(通常是用来表示设备的文件)。并非所有设备都必须存在,例如网络就可能不适合。

图 1. SIMH 的基本体系结构
本图显示了 SIMH 的分层体系结构,仿真器控制包在底层、设备在中层以及用户提供的文件(软件工具包)位于顶层
本图显示了 SIMH 的分层体系结构,仿真器控制包在底层、设备在中层以及用户提供的文件(软件工具包)位于顶层

当在仿真器上启动虚拟机时,仿真器控制包首先识别环境信息(设备阵列、二进制装载机例程、指令集仿真器,等等)。如您将会看到的,在启动仿真器之后,您可以与其互动来启动虚拟机(或在文件中放置此互动以便简化步骤)。仿真器在本质上是调试器,因此您还可以设置断点并与设备、CPU 以及内存进行互动。考虑到 SIMH 中所提供的功能数量,代码易于阅读并不像您预期的那样大。

安装 SIMH

让我们来探讨 SIMH 如何带您回到计算的早期。此部分首先解释如何安装并构建 SIMH,然后再讨论软件包。

安装 SIMH

以下会话说明了如何下载并构建 SIMH。其演示了 SIMH 的 38.1 版,但是您应该检查网站来查看控制包是否已经更新。如清单 1 所示,我需要在制作控制包以前创建 ./BIN 子目录。

清单 1. 安装并构建 SIMH
$ mkdir simh ; cd simh

$ wget http://simh.trailing-edge.com/sources/simhv38-1.zip

$ unzip simhv38-1.zip
$ mkdir BIN
$ make -f makefile

在您完成了清单 1 中的步骤以后,您将在 ./BIN 子目录中拥有一系列二进制来表示单个仿真器(如 ibm1130vax780)。

软件工具包

在前面的步骤中,您构建了 SIMH 仿真器。然而,要使其可用,您需要用于这些仿真器的软件(操作系统和应用程序)。因为这些系统通过纸带和磁带操作,所以通过那些介质表示的软件已经被重新包装成易于使用的文件。作为这些演示的一部分,您将探讨必要的软件工具包并了解哪里可以下载它们。

导航仿真器

在您启动仿真器(针对正在仿真的机器命名,如 altairz80)时,您将看到 sim> 提示。该提示告诉您,您正在基仿真器中,然后您可以配置以便调出仿真目标。本文探讨了许多可以执行的命令中的一些。您可以使用 help 来查看大名单。还非常重要的是在仿真受支持的机器之一时,您可以使用 Ctrl-E 来使您回到仿真器。从那里,您可以设置断点、检查寄存器、查看仿真器事件队列等。

使用 SIMH

现在您已经大概了解了 SIMH,让我们来探讨与各种计算机系统一起使用它。您将看到 IBM 1130 系统上的 LISP、Interdata 32 位系统上的 UNIX ®、MITS Altair 机器上的 CPM 以及 PDP-15 上的 Focal。

IBM 1130

IBM 1130 系统是一款专注于低成本市场的流行计算系统。它依赖于穿孔卡片和纸带而且还使用廉价的磁盘存储(总量为 1MB)。该磁盘存储操作系统和数据。

1130 系统于 1965 年推出,那时主要的编程语言是 FORTRAN(其完全用汇编语言编写的编译器只能运行 4000 个词的内存)。它使用 15 位基于单词的地址空间,且将机器的核心内存限制为 64KB。

IBM 1130 系统的其中一个有趣的方面是对其他语言的支持。除了 FORTRAN 以外,1130 还可使用 APL 和 RPG 进行编程。Guy Steele(他可以访问波士顿的拉丁(高级)学校获的一台 1130)编写了一个我们直到现在还在使用的 LISP 解释器。让我们从维护 1130 的站点获得 LISP 解释器开始,其网址为 ibm1130.org(请参考清单 2)。请注意我假设您位于 ./simh 子目录中,在那里您安装了 SIMH。

清单 2. 安装 LISP 翻译器软件工具包
$ mkdir kits/ibm1130 ; cd kits/ibm1130
$ wget http://media.ibm1130.org/lisp.zip
$ unzip lisp.zip

虽然此仿真隐藏了许多使用 SIMH 的细节,但是它仍旧是一个 1130 使用上的有趣的历史性窥视。此演示是将作业指定到仿真器的批处理操作,其输出被发送到列表文件。您的作业是 LISP 解释器的非常简单的使用(您可以在输出中看到)。清单 3 提供批处理会话。

清单 3. 与 IBM 1130 仿真器一起使用 LISP 翻译器
$ ../../BIN/ibm1130 job lisptest

IBM 1130 simulator V3.8-1
PRT: creating new file
Loaded DMS V2M12 cold start card

Wait, IAR: 0000002A (4c80 BSC  I  ,0028   )
sim> quit
Goodbye
$ more lisptest.lst

PAGE   1

// JOB    1234

LOG DRIVE   CART SPEC   CART AVAIL  PHY DRIVE
  0000        1234        1234        0000

V2 M12   ACTUAL 32K  CONFIG 32K
^L
PAGE   1

// JOB

LOG DRIVE   CART SPEC   CART AVAIL  PHY DRIVE
  0000        1234        1234        0000

V2 M12   ACTUAL 32K  CONFIG 32K

// XEQ LISP

***** 1130 LISP 1.6 ***** BOSTON LATIN SCHOOL ***** LITHP ITH LITHTENING...


(SETQQ A (X Y Z))

(X Y Z)


(CAR A)

X


(CDR A)

(Y Z)


(PLUS 1 2 3)

6


(QUIT)

***** 1130 LISP 1.6 ***** END OF RUN ***** THO LONG, COME AGAIN THOON
$

清单 3 中,您启动了 IBM 1130 仿真器并将作业指定到平台。在后台,代码为磁盘(在这里加载 LISP 翻译器)、读卡器(在这里读取作业)以及打印机(在这里产生输出)配置仿真器。您的作业出现在清单 4 中(即软件工具包中的 lisptest.job)。您可以在与带有 .lst 后缀的作业名相同的子目录中发现作业的输出。

清单 4. 文件 lisptest.job
// JOB
// XEQ LISP
(SETQQ A (X Y Z))
(CAR A)
(CDR A)
(PLUS 1 2 3)
(QUIT)

IBM1130.org 开发并维护 IBM 1130 软件工具包。在该站点,您还可以发现 APL 板面(除了 FORTRAN 和 RPG 以外)。

使用 UNIX V6 的 32 位 Interdata

从 1966 年开始,Interdata(在 1973 年成为 Perkin-Elmer 的一部分)开发出一系列 16 位和 32 位小型机。1974 年推出的 Interdata-7 是首批 32 位计算机之一。Interdata 的体系结构松散地基于 IBM System/360 大型机体系结构。从仿真器方面,在机器是如何引入的这一点此示例看起来有点深(通过仿真器配置选项)。

在清单 5 中,您下载了 UNIX 第 6 版的图像并将其提取到工具包下的子目录中。在您提取下载时,您启动了 Interdata 仿真器并开始配置。您首先要启动控制台终端 (TTP) 并将可编程异步线路控制器 (PAS) 和磁带控制器 (MT) 结合在一起以避免设备号冲突。

引导设备是盒式磁盘控制器 (DP),您可以将其与来自软件工具包的外部文件 (iu6_dp0.dsk) 关联。定义引导磁盘后,您现在可以引导此磁盘,这会导致启动 UNIX V6 图像。Interdata 是 UNIX 到非 PDP 系统的首批端口之一。

清单 5. 通过 UNIX 仿真 Interdata 32b 系统
$ mkdir kits/id_unix_v6 ; cd kits/id_unix_v6
$ wget http://simh.trailing-edge.com/kits/iu6swre.zip
$ unzip iu6swre.zip
$ ../../BIN/id32

Interdata 32b simulator V3.8-1
sim> set ttp ena
sim> set pas dev=12
sim> set mt dev=85
sim> att -e dp0 iu6_dp0.dsk
sim> boot dp0
?unix
Memory = 182.50 K

login: root
You have mail.
# ls -la
total 361
drwxr-xr-x  9 root      272 Jun  4 00:16 .
drwxr-xr-x  9 root      272 Jun  4 00:16 ..
drwxr-xr-x  2 root     1104 Nov 14  1978 bin
drwxr-xr-x  2 root      784 Jun  4 01:07 dev
drwxr-xr-x  2 root      528 Nov 14  1978 etc
drwxr-xr-x  2 root      240 Jun  3 21:44 lib
-rw-r--r--  1 root      552 Jun  3 20:48 mdl
drwxr-x---  2 root       32 Aug  2  1978 mnt
drwxrwxrwx  2 root      144 Jun  4 15:38 tmp
-rw-r--r--  1 root      424 Jun  4 00:27 tpboot
-rw-r--r--  1 root      568 Jun  3 20:48 tuboot
-rw-r--r--  1 root      728 Jun  3 20:48 uboot
-rw-r-----  1 root    52272 Jun  3 23:56 unix
-rwxrwxrwx  1 root    59236 Jun  4 01:21 unix.oxon
-rwxrwxrwx  1 rm      60852 Jun  4 01:44 unix.sydney
drwxr-xr-x 14 root      240 Jun  4 15:43 usr
#

清单 5 所示,在系统引导以后,您可以用类似于现在 UNIX 系统的方式与其进行互动。

具有 FOCAL 的 PDP-15

DEC 最后的 18 位系统是 PDP-15,其在 1969 年推出。不同于早期的 PDP(其从分散的晶体管构建),PDP-15 通过 TTL 集成的电路实现。PDP-15 兼容早期的 PDP-9 并包括各种高级功能,包括内存保护和浮动点。

虽然 PDP-15 支持各种操作系统,但是此机器的有趣用法与公式计算器 (FOCAL) 语言一起使用。FOCAL 最初是 Richard Merrill 为 PDP-8 编写的且运行在只有 3000 字内存(12 位)和 1000 字用于用户程序的系统中。FOCAL 无需操作系统,其自身就是一个完整的环境。FOCAL 系统是作为用于二进制加载器格式的纸带图像而提供的(请单考清单 6)。在启动 PDP-15 仿真器以后,您可以加载 focal15 图像并发布一个要启动的运行。您首先收到 FOCAL15 提示,在那里您将输入简短的 FOCAL 程序并通过 GO 命令启动。

清单 6. 在 PDP-15 上演示 FOCAL
$ ../../BIN/pdp15 

PDP-15 simulator V3.8-1
sim> load focal15.bin
sim> run

FOCAL15 V6B
*01.10 ASK "WHAT YEAR WERE YOU BORN?", BORN
*01.20 ASK "WHAT YEAR IS IT?", YEAR
*01.30 SET AGE=YEAR-BORN
*01.40 TYPE "YOU ARE ", AGE-1, " OR ", AGE, " YEARS OLD.", !
*GO
WHAT YEAR WERE YOU BORN?:1964
WHAT YEAR IS IT?:2010
YOU ARE    45.0000 OR    46.0000 YEARS OLD.
*
<Ctrl-E>
Simulation stopped, PC: 000221 (SPA)
sim> show dev
PDP-15 simulator configuration

CPU, idle disabled
CLK, 60Hz, devno=00
FPP
PTR, devno=01
PTP, devno=02
TTI, devno=03
TTO, devno=04
LP9, disabled
LPT, devno=65-66
RF, devno=70-72
RP, devno=63-64, 8 units
DT, devno=75-76, 8 units
MT, devno=73, 8 units
TTIX, lines=1, devno=40-47
TTOX
sim>

此处还显示了与仿真器的互动。按 Control-E 以便退出仿真并返回仿真器框架控制台。在这一点上,您可以要求枚举设备,显示此 PDP-15 的各种仿真的设备(浮动点处理器、纸带读取器、纸带打孔,等等)。

此示例演示了 SIMH 的另一个方面,其中您的图像无需操作系统并是互动的(不同于运行在 IBM 1130 系统上的早期批处理)。

具有 CP/M 的 MITS Altair

SIMH 的最后演示仿真世界上第一台小型机,即 MITS Altair。设计于 1975 年的 Altair 基于 Intel® 8080 处理器,只具有 256 字节的内存。尽管功能最少,但是该机型还是在第一个月内就卖出了数千台。其总线(变成了 S-100)扩展到足够大量供应商为 18 槽系统开发卡片(如串口卡和磁盘控制器),并使其成为一台有用的计算机。

虽然在 Altair 以前就有设计好的计算机系统(它们中的一些也是基于 Intel 8008 处理器),但是 Altair 已强大到足以可用的程度(如为了运行 BASIC,该语言在那个时候被当做关键语言教授)。这就是广受赞誉的开启了个人计算机革命的火花。

在 SIMH 内,您可以运行标准的基于 Intel 8080 的 Altair 或使用 Zilog Z80 或 Intel 8086 处理器的衍生 Altair 系统。仿真 Altair 还提供一些附带功能,如库存内存。适用于 Altair 的软件工具包是获得微机控制程序(Control Program for Microcomputers,CP/M)运行的最简单方式之一。在如清单 7 所示的示例中,您可以启动 Altair 仿真器(在此例中,是 Z80 处理器变量),然后使用 cpm2 脚本文件来导入 CP/M。此脚本使用两个磁盘(操作系统磁盘和应用程序磁盘)来创建 CP/M 环境。创建 CP/M 环境后,您可以查看可用的文件,然后运行 Microsoft basic 来解释 Eliza 程序。

清单 7. 在 MITS Altair 上演示 CP/M
$ mkdir cpm ; cd cpm
$ wget http://simh.trailing-edge.com/kits/psaltair.zip
$ unzip psaltair.zip
$ ../../../BIN/altairz80 

Altair 8800 (Z80) simulator V3.8-1
sim> do cpm2

62K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.17, 28-Apr-02)
A>dir
A: PIP      COM : LS       COM : XSUB     COM : STAT     COM
A: GO       COM : RSETSIMH MAC : SYSCOPY  COM : SHOWSEC  COM
A: DIF      COM : R        COM : W        COM : L80      COM
A: M80      COM : WM       HLP : WM       COM : CBIOSX   MAC
A: FORMAT   COM : SYSCPM2  SUB : DDTZ     COM : DSKBOOT  MAC
A: TSTART   COM : ED       COM : DDT      COM : EX8080   MAC
A: LOAD     COM : ASM      COM : LU       COM : MBASIC   COM
A: ELIZA    BAS : DUMP     COM : CREF80   COM : EXZ80    MAC
A: UNERA    COM : BOOT     COM : OTHELLO  COM : WORM     COM
A: LADDER   DAT : LADDER   COM : ZSID     COM : ZTRAN4   COM
A: SURVEY   MAC : CPMBOOT  COM : TSHOW    MAC : TSTART   MAC
A: TSTOP    MAC : UNERA    MAC : MOVER    MAC : EX8080   SUB
A: EXZ80    SUB : CCP      MAC : DSKBOOT  COM : USQ      COM
A: MC       SUB : MCC      SUB : BDOS     MAC : RSETSIMH COM
A: TSHOW    COM : TSTOP    COM : UNCR     COM : SURVEY   COM
A: EX8080   COM : EXZ80    COM : COPY     COM : SID      COM
A: BOOT     MAC : BOOTGEN  COM : LIB80    COM : DO       COM
A>
A>mbasic eliza.bas
BASIC-80 Rev. 5.21
[CP/M Version]
Copyright 1977-1981 (C) by Microsoft
Created: 28-Jul-81
32824 Bytes free

               **************************
                         ELIZA
                   CREATIVE COMPUTING
                 MORRISTOWN, NEW JERSEY

                  ADAPTED FOR IBM PC BY
                   PATRICIA DANIELSON AND PAUL HASHFIELD
                    BE SURE THAT THE CAPS LOCK IS ON

               PLEASE DON'T USE COMMAS OR PERIODS IN YOUR INPUTS

               *************************



HI! I'M ELIZA. WHAT'S YOUR PROBLEM?
? I'M IN LOVE WITH RETROCOMPUTING
DID YOU COME TO ME BECAUSE YOU ARE IN LOVE WITH RETROCOMPUTING   
?

正如您从该清单中所看到的,该磁盘包含大量有用的实用工具,如 CP/M 汇编程序 (ASM.COM)、行编辑器 (ED.COM)、一对调试器(适用于 Intel 8080 处理器的 SID.COM 和适用于 Z80 处理器的 ZID.COM)以及屏幕编辑器 (WM.COM)。

其他仿真项目

虽然 SIMH 对于旧的计算系统来说是很好的仿真器,但是它只是正在成长的仿真器和仿真器家族中的一员。其他历史上有趣的仿真器包括 Hercules,其在商品硬件上仿真 IBM 大型机(如 System/370、IBM System/390® 和 IBM zSeries®)。

一些仿真器不专注于振兴旧的硬件而是将视频游戏带入生活,这样硬件就不复存在了。最有趣的事情之一是多街机仿真器(Multi-Arcade Machine Emulator,MAME)。此仿真器为大量老式视频游戏硬件(包括街机)提供系统仿真并提供旧处理器的仿真和围绕它们(数据总线、存储设备、音频和视频硬件,等等)所构建的硬件环境。如今,MAME 项目为 4500 多个独特的游戏提供仿真。MAME 也是多仿真器超级系统(Multi-Emulator-Super-System,MESS)的核心,其仿真近 500 个独特的控制台、计算机和计算器。

您还可以为专门硬件寻找仿真器,如用于阿波罗登月任务的阿波罗导航计算机(Apollo Guidance Computer,AGC)。类似的工作仿真了在进入轨道期间管理火箭引擎点火的运载火箭数字计算机(Launch Vehicle Digital Computer,LVDC)。虽然 LVDC 是晶体管计算机,但是 AGC 使用集成电路设计的计算机。通过在其原型机代码中设计的程序,两者都自定义了指令集。

要获得有关这些和其他仿真器的更多信息,请参考 参考资料

更进一步

一些有关复古计算的事情真的很吸引人。我们今天所拥有的一切都源自旧的计算系统,其中许多不再具有我们可以使用的功能硬件。幸运的是,SIMH 项目将这种硬件(操作系统和应用程序)带回生活中以便新一代人们可以享用它们。


相关主题

  • Konrad Zuse 的 “Z” 机被很好地记录在柏林技术大学。您可以阅读有关 Zuse 的 Z3Z4 和称为 Plankalkül 的第一种语言的更多信息。
  • 有关 计算机的演化 的 Wikipedia 文章提供了构建计算机和各种已定义架构的静默竞赛的有趣历史(从 Konrad Zuse 的早期 Z 机到用于破译德国代码以及其他的秘密 British Colossus 计算机)。
  • 截至 2010 年,用于自动计算的第一台数字计算机的发明者一直是争论的战场。虽然我们大多数人知道 ENIAC 和宾夕法尼亚大学,但是那是以前的工作现在已经很少提及了。在 20 世纪 30年代后期,John Atanasoff 和 Clifford Berry 开始构建第一台计算机,现在称其为 ABC.。Jane Smiley 出版了一本新书,讲述了这些早期历史,最近在 Wired普利策奖获得者讲述世界第一台电脑的传奇 文章中对 Jane Smiley 进行了讲述。除了涵盖一些历史以外,Smiley 还揭示了此发明背后的政治、心理和企业活动。
  • 1971 年,Intel 发布了芯片中的第一个商用微处理器,名为 4004。4004 处理器是 4 位 CPU,其可以每秒执行 92,000 条指令。其后面是 4040 处理器(1974 发布),其具有扩展指令集、程序内存、寄存器集和堆栈。
  • 计算机历史仿真项目为大量计算系统实现仿真器。在 项目网站 上您可以看到 30 多个重要系统的列表。
  • 在文档 为 SIMH 系统编写仿真器,您可以了解有关仿真器体系结构以及各种仿真计算机的一些详细信息。有关其他信息,您还可以阅读 Bob Supnik 的名为 SIMH:回到过去 演示文稿,包括任何理解历史系统以便进行仿真。
  • Peter Schorn 为 SIMH 维护 Altair 仿真器和一个网站,其中包含 Altair 的大量信息和来源。在他的站点中,您可以发现一个 Altair 操作系统、其他编程语言以及其他应用程序的大的列表。
  • Hercules 是开源仿真器,适用于各种 IBM 大型机(包括 System/370、ESA/390 和 z/Architecture)。Hercules 可用在各种主机操作系统上,包括 Linux® 和 FreeBSD。
  • 本文讨论了专注于专业电子的其他仿真器,例如 AGC。虚拟 AGC(和有关仿真器)保留了计算系统的另一个有趣的方面。您可以在 月球之旅:阿波罗导航计算机的历史 中了解有关 AGC 及其历史的更多信息。
  • 游戏仿真器是一个有趣的开发领域。虽然仿真器可以免费提供,但是提供游戏的 ROM 始终属于许可证持有人。在下载或使用下载的 ROM 以前,请确保查看相关的许可证。在许多情况下,可以购买这些老游戏以在新的硬件上运行。除了 多仿真器超级系统(在其核心使用 MAME)以外,多街机仿真器 是最有趣的项目之一。在 Wikipedia 上,您还可以发现一系列 视屏游戏控制台仿真器仿真器的大的列表
  • SIMH 用户指南 提出了有关 SIMH 实现的大量信息以及可用于仿真器框架的命令。您还可以在 计算机历史和仿真链接 中发现有关其他仿真器项目的更多信息(包括计算系统恢复)。
  • 随时关注 developerWorks 技术活动网络广播
  • 访问 developerWorks Open source 专区获得丰富的 how-to 信息、工具和项目更新以及最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Open source
ArticleID=649261
ArticleTitle=仿真与计算历史
publish-date=04202011