1983年的个人电脑解释器

1983年,微软公司推出面向IBM PC XT及兼容机的GW-BASIC解释器。它承接IBM Advanced BASIC(BASICA)与微软BASIC的代码传统,将输入指令、编辑程序和执行运算结合在个人电脑上的交互环境中。用户可以直接算一道题,也可以保存一组带行号的指令反复执行。

现存早期源码提供了一个明确的开发时间点:汇编文件头注明由4.3版转换工具在1983年2月10日生成。这是源码转换快照的日期;微软后来公布档案时,将面向PC XT及兼容机的产品发布记在1983年。

参考:[1] [3]

继承代码与分模块实现

GWMAIN主模块保留了早期微软BASIC的作者记录:比尔·盖茨、保罗·艾伦参与1975年在PDP-10上编写的实现,蒙特·戴维多夫负责数学程序包。GW-BASIC是在这套积累上继续移植、配置和扩展的工程,已有代码与新的设备接口共同进入解释器。

其他模块留下了具体分工:尼克拉斯·特劳布署名的启动模块解决MS-DOS控制块与BASIC预期内存位置的衔接;磁盘驱动模块则署名T. Corbett,注明它在BASCOM-86代码基础上实现BASIC-86通用输入输出。

1983年快照由汇编语言组成,并按解释执行、表达式求值、数学运算、磁盘、键盘、屏幕和图形等功能分成模块。微软利用公共源实现生成不同处理器、不同机器的代码,减少逐一重写整个解释器的工作;目标机器所需的差异则通过配置开关和接口处理。

参考:[1] [3]

把共同语言接到不同设备上

配置文件OEM.H列出屏幕行数、功能键数、通信端口数及声音等选项。公开快照启用了IBM兼容和IBM词法记号兼容选项,也启用了屏幕编辑器、磁盘输入输出以及PLAY、SOUND、BEEP相关功能。编译期的配置让共同语言实现与机器的具体能力相配合。

通用图形模块使用16位横纵坐标,并把向上、向下移动等底层操作交给机器相关接口。注释要求接口遵守固定约定,以免每移植一种机器就修改整套通用图形算法。这种分层将绘图逻辑与屏幕硬件之间的边界直接写进程序结构。

参考:[1]

行号、词法记号与屏幕编辑

解释器既接受立即执行的命令,也保存带行号的程序。输入行经过词法处理,关键字转换成内部记号;源码中的问号判断会将“?”转换为PRINT记号,因此两种写法可以进入同一输出处理过程。它同时区分字符串、注释和普通语句,避免把所有输入都按关键字处理。

屏幕编辑模块为程序行输入、INPUT读入和EDIT命令提供入口。出现语法错误时,相关例程可列出出错行并把光标定位到行首。1987年用户指南进一步说明:LIST显示程序,用户可以在屏幕上修改,按回车才把整行存回;相同的行号替换原行,便于反复试验小程序。

参考:[1] [2]

一个循环怎样产生计算表

用户指南的平方根例子只用三行:第10行“FOR X=10 TO 25 STEP 5”,第20行“PRINT X; SQR(X)”,第30行“NEXT”。输入RUN后,程序依次取10、15、20、25,打印各数及其平方根,最后一行结果为25和5。行号组织顺序,FOR与NEXT控制重复,SQR完成数值计算。

早期NEXT86模块说明了这一循环的内部状态:栈上保存循环变量的位置、步长、上限、FOR所在行号和程序文本指针。到NEXT时,解释器寻找对应的循环记录,更新变量并判断是否继续;若找不到匹配的FOR,便进入错误处理。简短语句因此对应一套由解释器维护的执行状态。

参考:[1] [2]

文件操作与原始档案的保存

到1987年版手册,GW-BASIC的使用流程已经包括用SAVE把程序写入磁盘、用LOAD读回,以及按顺序文件或随机访问文件组织数据。手册以员工姓名、部门和聘用日期为例,演示录入和筛选记录,显示这种交互语言也可用于小型数据处理。

2020年5月21日,微软以MIT许可证公开1983年源码,保留其历史状态。档案包含解释器源文件,但没有构建脚本、所需工具或预编译可执行程序。它使读者能够直接查看当时如何安排语言、存储和设备接口,同时把1980年代的产品与后来的源码公开区分开来。

参考:[1] [2] [3]