为什么我喜欢在 FreeDOS 上用 GW-BASIC 编程

BASIC 是我进入计算机编程的入门语言。我已经多年没有编写 BASIC 代码了,但我始终对 BASIC 和 GW-BASIC 怀有喜爱之情。
35 位读者喜欢这篇文章。
Old UNIX computer

Opensource.com

在我成长的过程中,似乎从 TRS-80 到 Commodore 再到 Apple 的每台“个人电脑”都允许你使用初学者通用符号指令代码(BASIC)编程语言编写自己的程序。我们家有一台 Apple II 的克隆机,叫做 Franklin ACE 1000,作为克隆机,它也运行 AppleSoft BASIC。我立刻喜欢上了 AppleSoft BASIC,并通过阅读书籍和杂志自学 BASIC 编程。

后来,我们家升级到了一台运行 DOS 的 IBM PC。就像之前的每台个人电脑一样,IBM PC 也运行着自己的 DOS 版本,叫做 BASICA。后来的 DOS 版本用一个叫做 GW-BASIC 的更新的解释器取代了 BASIC。

BASIC 是我进入计算机编程的入门语言。随着我长大,我学习了其他编程语言。我已经多年没有编写 BASIC 代码了,但我始终对 BASIC 和 GW-BASIC 怀有喜爱之情。

微软开源 GW-BASIC

2020 年 5 月,微软发布了 GW-BASIC 的源代码,让所有人(包括我)都感到惊讶。Rich Turner(微软)在微软开发者博客上的公告中写道:

自从去年在 GitHub 上重新开源 MS-DOS 1.25 和 2.0 以来,我们收到了许多也开源 Microsoft BASIC 的请求。好吧,我们来了!正如仓库的 readme 文件中明确指出的那样,这些源代码是 1983 年 2 月 10 日的 8088 汇编语言源代码,开源是为了历史参考和教育目的。这意味着我们不会接受任何修改源代码的 PR(Pull Requests)。

你可以在GW-BASIC GitHub上找到 GW-BASIC 源代码发布。是的,微软使用了MIT 许可证,这使其成为开源软件。

不幸的是,GW-BASIC 代码完全是用汇编语言编写的,无法用现代工具构建。但是开源开发者开始着手解决这个问题,并调整了代码以使用更新的 DOS 汇编器进行汇编。其中一个项目是TK Chia 的 GitHub 项目,旨在更新 GW-BASIC 以使用 JWASM 或其他汇编器进行汇编。你可以在 TK Chia 的项目上找到几个源代码和二进制版本。最新版本(2020 年 10 月)的注释提到,这是一个 2020 年重建的 GW-BASIC 的“预发布”二进制文件,并且 缺少对串口 I/O 的支持。光笔输入、操纵杆输入和打印机(并行端口)输出需要更多测试。 但是,如果你在 GW-BASIC 中不需要这些额外的功能,你应该可以使用这个最新版本重新开始使用开源 GW-BASIC 进行 BASIC 编程。

FreeDOS 1.3 RC4 不包含 GW-BASIC,但安装它非常容易。只需从 TK Chia 2020 年 10 月的 GW-BASIC 版本下载 gwbas-20201025.zip 压缩文件,并在你的 FreeDOS 系统上解压(unzip)。二进制文件包使用 \DEVEL\GWBASIC 的默认路径。

开始使用 GW-BASIC

要启动 GW-BASIC,请从 DOS 命令行运行 GWBASIC.EXE 程序。请注意,DOS 是大小写不敏感的,因此你实际上不需要全部输入大写字母。此外,DOS 将自动运行任何 EXECOMBAT 程序,因此你也不需要提供扩展名。进入 \DEVEL\GWBASIC 并键入 GWBASIC 以运行 BASIC。

GW-BASIC

GW-BASIC 解释器

(Jim Hall, CC-BY SA 4.0)

GW-BASIC 是一种解释型编程语言。GW-BASIC 环境是一个“shell”,它在运行代码时解析你的 BASIC 程序中的每一行。这比 C 这样的编译型语言要慢一点,但使编码-调试周期更容易。你可以通过将其输入到解释器中来随时测试你的代码。

GW-BASIC 程序中的每一行都需要以行号开头。GW-BASIC 使用行号来确保它以正确的顺序执行你的程序语句。使用这些行号,你稍后可以通过给它一个介于其他行号之间的行号,在两个其他语句之间“插入”新的程序语句。因此,大多数 BASIC 程序员编写的行号都以十为单位递增,这样行号就像 10、20、30 等等。

让我们从一个简单的程序开始,打印出随机数字列表。FOR 语句创建一个数字范围的循环,而 RND(1) 打印一个介于 0 和 1 之间的随机值。

GW-BASIC

输入我们的第一个程序

(Jim Hall, CC-BY SA 4.0)

你看到屏幕底部那些高亮显示的单词了吗?这些是你可以使用键盘上的“F”键(或功能键)访问的键盘快捷键。例如,F1 将在 GW-BASIC 解释器中插入单词 LIST。“左箭头”表示快捷方式将为你按下 Enter,因此 F2 将输入 RUN 命令并立即执行它。让我们运行程序几次,看看会发生什么。

GW-BASIC

两组随机数字列表是相同的

(Jim Hall, CC-BY SA 4.0)

有趣的是,每次我们运行 BASIC 程序时,随机数字列表都是相同的。这是因为 GW-BASIC 随机数生成器在每次你执行 BASIC 程序时都会重置。

为了每次都生成新的随机数,我们需要用一个值“播种”随机数生成器。一种方法是提示用户输入他们自己的种子,然后将该值与 RANDOMIZE 指令一起使用。我们可以使用行号 1 和 2 将这两个语句插入到程序的顶部。GW-BASIC 将自动在第 10 行之前添加这些语句。

由于随机数生成器使用新的种子,因此每次我们运行程序时都会得到不同的随机数字列表。

GW-BASIC

现在随机数字列表是不同的了

(Jim Hall, CC-BY SA 4.0)

GW-BASIC 中的“猜数字”游戏

每当我开始学习一种新的编程语言时,我都会专注于定义变量、编写语句和评估表达式。一旦我对这些概念有了大致的了解,我通常就可以自己弄清楚其余的内容。大多数编程语言都有一些相似之处,所以一旦你掌握了一种编程语言,学习下一种语言就变成了弄清楚独特的细节并识别差异的问题。

为了帮助我练习一种新的编程语言,我喜欢编写一些测试程序。我经常编写的一个示例程序是一个简单的“猜数字”游戏,其中计算机选择一个介于 1 到 100 之间的数字,并要求我猜它。程序循环直到我猜对为止。

让我们用 GW-BASIC 编写一个版本的“猜数字”游戏。首先,输入 NEW 指令,告诉 GW-BASIC 忘记之前的程序并开始一个新的程序。

我的“猜数字”程序首先提示用户输入一个随机数种子,然后生成一个介于 1 和 100 之间的随机数。RND(1) 函数实际上生成一个介于 0 和 1 之间的随机值(实际上是 0.9999…),所以我首先将 RND(1) 乘以 100 以获得一个介于 0 和 99.9999… 之间的值,然后将其转换为整数(删除小数点后的所有内容)。加 1 得到一个介于 1 和 100 之间的数字。

然后,程序进入一个简单的循环,在该循环中,它提示用户进行猜测。如果猜测太低或太高,程序会告知用户调整他们的猜测。只要用户的猜测与之前选择的随机数相同,循环就会继续。

GW-BASIC

输入“猜数字”程序

(Jim Hall, CC-BY SA 4.0)

我们可以通过点击 F2 键来运行程序。使用 1234 的随机种子会生成一个全新的随机数。我猜了六次才猜出秘密数字是 49。

GW-BASIC

猜出秘密数字

(Jim Hall, CC-BY SA 4.0)

这就是你对 GW-BASIC 编程的初步介绍!感谢微软将这个伟大的历史作品作为开源软件发布,也感谢许多开源开发者汇编了 GW-BASIC,以便我们能够运行它。

在我离开之前还有一件事——退出 GW-BASIC 的方法并不明显。解释器有一个特殊的指令用于此——要退出,输入 SYSTEM,GW-BASIC 将退出返回 DOS。

GW-BASIC

输入 SYSTEM 退出 GW-BASIC

(Jim Hall, CC-BY SA 4.0)

 

接下来阅读什么

开始使用 FreeDOS

它看起来像复古计算,但它是一个现代操作系统,你可以用它来完成工作。

(特约编辑)
2021 年 6 月 1 日

FreeDOS 如何启动

概述你的计算机如何启动并启动像 FreeDOS 这样的简单操作系统。

(特约编辑)
2021 年 6 月 8 日

如何将 FreeDOS 用作嵌入式系统

如今,许多嵌入式系统都在 Linux 上运行。但曾经有一段时间,嵌入式系统要么在定制的专有平台上运行,要么在 DOS 上运行。

(特约编辑)
2021 年 6 月 16 日

为什么 FreeDOS 有 16 种颜色

为什么文本只有这种有限的调色板,以及为什么 FreeDOS 使用这些颜色和色调,而不是其他颜色?答案就像技术中的许多事情一样是……

(特约编辑)
2021 年 6 月 17 日
标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发者,以 GNOME 的可用性测试以及作为 FreeDOS 的创始人 + 项目协调员而闻名。

评论已关闭。

© . All rights reserved.