TING BASIC的方言

2020-10-12 14:03:06

2020年9月12日,我学习了如何使用TRS-80 Level I Basic进行编程,TRS-80 Level I Basic是从Palo Alto Tiny Basic改编的4K实现。后来,我在PC-1、Astrocade和Apple II上使用了其他微小的基本实现,没有意识到它们的原始故事是如何汇聚在一起的。(Apple II的4K实现,Integer Basic,是由Woz编写的,他知道Homebrew Computer Club的许多微小的Basic工具。)。今年夏天,我一直在扩充维基百科上那篇小小的基本维基百科文章,以反映它丰富的历史。以下是我对这篇文章的贡献。

Tiny Basic语言是一个方言家族,属于最新的Basic编程语言版本,可以容纳4 KB或更少的内存。Tiny Basic是为了回应比尔·盖茨发表的一封公开信而设计的,公开信抱怨用户对售价150美元的Altair Basic进行了“盗版”。首先指定了微型BASIC语言,然后邀请程序员在不同的微处理器上实现它,并公开分享他们的源代码。“Palo Alto Tmall Basic”一书的作者王立晨博士创造了“版权左”一词来形容这一点。Tiny Basic是一个在自由软件运动之前就存在的自由软件开发项目的例子。社区对Tiny Basic的反响如此之大,以至于原计划的三份时事通讯被重新推出,成为第一份专注于微型计算机软件的定期期刊《多布博士的杂志》,这本杂志的印刷版持续了34年。

小尺寸和免费源代码使得这些实现在20世纪70年代中期的微型计算机早期是无价的,当时RAM很昂贵,典型的内存大小只有4000KB到8000KB。

为了满足这些严格的大小限制,微型BASIC方言通常在关键方面与BASIC的其他实现不同:

只有26个变量可用,名为A到Z;Run不一定将这些变量重置为零。

GOTO和GOSUB的参数可以是数字表达式:GOTO和GOSUB可以接受表达式而不是行号,提供分配给GOTO的参数,而不是更典型的BASIC结构的ON-GOTO/GOSUB结构的参数Switch语句。

由于这是社区对基本实现的呼吁,任何人都可以创建一种微小的基本方言,而且这些方言在语言结构上差异很大。一些截断的关键字,一些允许缩写,一些提供了非标准的访问RAM的方式来解决缺少数组和字符串处理的问题。

Tiny BASIC的总体设计发表在1975年9月的中国人民计算机公司通讯(PCC)上,以及中间语言源代码。时事通讯提供了编译器文本的参考,并特别提到了UIUC Basic。[1]1974年6月,伊利诺伊州立大学厄巴纳-香槟分校的Alfred Weaver、Michael Tindall和Ronald Danielson在他们的同名论文中证明,尽管他们的应用程序被部署到IBM 360/75的8008模拟器上,但他们有可能开发出“用于Intel 8008微处理器的BASIC语言解释器”。[2]

符合并经常超过设计标准的Tiny Basic的实现很快就被提交给了PCC,最著名的是Dick Whiple和John Arnold扩展的Tiny Basic,它运行在3K的内存中,并为…增加了功能。NXT执行循环,并允许使用单个数字数组。这两个人用八进制直接用机器代码编写了微型BASIC扩展。[1]。

Palo Alto Tmall Basic被改编成适用于夏普PC-1211手持式电脑。后来为可编程计算器开发了其他微型BASIC实现,但现代计算器基础与TING BASIC有很大不同,具有独特的语法和许多附加功能。在这些实现中,Tiny Basic的最后一个遗迹是对变量名的限制(在Casio Basic中,A-Z和一个数组Z,类似于添加编号字符串和列表的TI-Basic)。

Tiny Basic被设计为使用尽可能少的内存,这反映在它的高级解释器系统的功能以及细节的匮乏上。早期的微型计算机缺乏基本数据编译器的RAM和二级存储设备,而这在分时系统中更具代表性。

像那个时代的大多数基础知识一样,Tiny Basic与用户在命令行中键入语句是交互的。由于那个时代的微型计算机经常与电传打字机或“哑巴”终端一起使用,直接编辑现有文本是不可能的,编辑人员使用外卖字符(通常是反斜杠)来指示用户备份到哪里来编辑现有文本。

这种语法虽然简单,但增加了一项创新:*GOTO/GOSUB语句可以接受表达式,而不仅仅是行号,提供一个赋值为GOTO[3]的参数,而不是参数GOTO/GOSUB的参数SWITCH语句...。的一种结构,这种结构当时在惠普分时基本版中得到支持,并且早于...。后藤。允许IF-THEN语句的语法(而不是仅分支到的行号)在Dartuss Basic中还不像这次那样受支持,但已由Digital[4]引入,并由Microsoft复制。

设计笔记指定了一台小型虚拟机,在该虚拟机中,微型BASIC语言解释器本身在虚拟机解释器上运行。设计师使用应用程序虚拟机的想法可以追溯到Val Schorre(1964年与Meta II合作)和Glennie(语法机器)。虚拟机方法的选择节省了内存空间和实现工作量,尽管在其上运行的基本程序执行起来有些慢。[5]。

使用虚拟机的方言包括Tiny Basic Extended、Tom Pittman的Tiny Basic[6]和NIBL。其他方言,如丹佛市小型机(DTB)和帕洛阿尔托小型机(Palo Alto Tiny Basic)都是直接口译员。一些程序员,如DTB的Fred Greeb,将IL程序视为让算法用汇编语言实现的伪代码;Denver Tiny Basic没有使用虚拟机,但它确实密切跟踪IL程序。

S1:TST S3;GO';GOTO还是GOSUB?TST S2,';至';;是...至,或...子调用EXPR;GET LABEL DONE;ERROR IF CR NOT NEXT XFER;SETUP AND JUMPS3:TST S8,';PRINT';PRINT。

程序中的一种常见模式是测试关键字或关键字的一部分,然后根据该信息执行操作。每个测试都是关于行缓冲区中下一个内容的断言。如果断言失败,控制将跳转到后续标签(通常是查找新的关键字或令牌)。在这里,系统将其缓冲区光标移动到任何空格上,并测试是否继续,如果找不到,则跳到第S3行。如果找到,则继续执行下一个IL命令。在这种情况下,系统接下来测试SUB,如果失败,跳到第S2行(测试SUB,看看这是否是一个新的GOSUB命令)。如果通过,控制将继续;在本例中,调用一个从label_expr开始的IL子例程,该子例程解析表达式。在Tmall Basic中,Goto X*10+100(计算转到)与Goto 100一样合法,是大型Basic实现On-Goto的替代方案。子例程*expr*将表达式的结果推入算术堆栈(在本例中为行号)。完成后,将验证表达式后面是否没有其他文本,如果有,则会给出错误。*XFER会从堆栈中弹出编号,并将执行转移(转到)相应的行号(如果存在)。

下表给出了编写第一个微型BASIC解释器的虚拟机的32个命令的部分列表。[7]TST/lbl,字符串如果字符串与基本行匹配,则将光标移到字符串上,并执行下一条IL指令;如果测试失败,则在标签:lblCALL/lblExecute IL子例程,从Lbl开始执行;保存控件栈调用后的IL地址DONE报告语法错误,如果删除前导空白后,光标没有定位到AE堆栈顶部的回车符XFERTEST值在ranqe内。如果没有,请报告错误。如果是,请尝试将光标定位在该行上。如果存在,则从那里开始解释;如果不存在,则报告错误。JUMP[lbl]在指定的标签处继续执行IL RTN返回到控件堆栈顶部指定的IL位置PRSP从基本文本到(但不包括)右引号之间的字符PRN通过弹出表达式堆栈顶部获得的PRNPrint编号SPC插入空格以将打印头移动到下一个区域NLINE将CRLF[8]输出到打印机。

汤姆·皮特曼(Tom Pittman)在讨论IL时说:“微型BASIC解释器是由丹尼斯·艾利森(Dennis Allison)设计的,是一个递归下降解析器。这种设计的一些优雅的简单性在语言的语法糖的添加中丢失了,但基本的形式仍然存在。IL特别适合于TING BASIC的递归下降解析,因为它的过程具有一般的递归性质,并且微小的BASIC标记非常简单。IL语言针对TINY的解释进行了有效的优化。经验表明,在语言中添加新功能的难度与这些功能的性质不成比例。通常需要添加额外的机器语言子例程来支持新功能。困难往往大于好处。“[9]。

皮特曼在为Homebrew Computer Club定义Tiny Basic时写道:“Tiny Basic是Dartmore Basic的一个适当子集,仅由以下语句类型组成:let、print、input、if、goto、GOSUB、return、end、clear、list、run。算术是16位整数,只有运算符+-*/和嵌套括号。只有26个单字母变量名A、B、…。Z,并且没有函数。没有字符串或数组…。Tiny BASIC指定的行号少于256。“[10]然后他继续描述他的实现:”这门语言已经扩展到包括RND、USR以及窥视和戳功能,使用户能够从BASIC程序访问他的6800中的所有系统组件。

许多实施者将他们自己使用HP分时BASIC或DEC BASIC-PLUS的经验带到了他们的设计中,并放松了正式的微型BASIC语言规范。在1977年发布的七个重要实现中:

所有的let都是可选的,并且赋值语句中的大多数let表达式都包含关系运算符。

除6800 TB外,所有行都支持语句分隔符,通常为:*,尽管TBX使用的是$,PATB使用的是$*;。

在If语句中,除了Minol之外,所有语句都不需要表达式包含关系运算符(例如,如果If X,则Ilet Y=X是有效的)。大多数人随后删除了它,使其成为可选的,或支持隐含的后藤健二。

很多修改后的打印界面支持打印区域,使用,可以转到下一个区域,可以不前进光标。

除了6800 TB和Minol之外,所有的公司都添加了一个函数来返回内存大小:TBX有SZE,DTB和PATB有相同的大小,L1B有MEM,NIBL有TOP。

有四个实施添加了阵列,无论是PATB和L1B中的单个无量纲阵列,还是TBX和DTB中的可DIMensionable阵列。

尽管Allison在第2期中抱怨BASIC的问题,但只有NIBL对结构化编程有任何认可,包括Do/Until。

作为标记化的替代方案,为了节省RAM、TBX、[11]、DTB、[12]和Minol[13]的截断关键字:用于打印的PR键,用于输入的键,用于输入的键,用于返回的键,用于返回的键。完整的、传统的关键字不被接受。相反,PATB允许接受传统关键字,但也允许将任何关键字缩写为其最小的唯一字符串,并在后面加上句点。例如,印刷品可以键入p.p,尽管PR.O和其他变体也有效。这个系统被保留在使用PATB的TRS-80的第一级基础版本中,后来也被发现在雅达利基础版本和各种夏普掌上电脑的基础版本中。[14]。

Tiny Basic最突出的方言是原始的Design Note、Tiny Basic Extended、Palo Alto Tiny Basic和6800 Tiny Basic。然而,还有许多其他版本的微型机。

Tiny Basic最初发表在美国人民计算机公司的一份时事通讯分支上,这份时事通讯后来成为长寿的计算杂志多布博士杂志(Dr.Dobb‘s Journal)。这本杂志大约出版了十个版本。

SCELBAL[24]和6800 Tiny Basic都在杂志中公布,但没有公布源代码。

王还用他的Tmall Basic编写了一个新的StarTrek应用程序,该程序出现在1976年7月的中国人民计算机公司通讯上。[25][26]。

他后来将该语言改编成用于Cromemco的3K Control Basic,添加了字母数字形式的变量名(例如,从A0到3Z9)、逻辑函数(AND()、XOR()、XOR())、用于执行机器语言例程的调用命令、更多打印格式选项以及其他(get()和put(),而不是窥视(和Pokke;I/O端口函数)。[27][27]。

Palo Alto Tmall Basic还适用于许多其他实现,包括Level I Basic(1977),用于夏普PC-1211袖珍计算机的Basic(1980),以及Astro Basic(1982,作者:Jamie Fenton)。[28][28]。

Minol由一名高三学生编写,是唯一一个不支持完整的Design Note的实现,缺少运算符优先级,只有三次重做(<;,=,#),省略了GOSUB返回和返回。它只支持无符号8位精度(与其他所有实现的有符号16位精度形成对比)和0到254之间的行号。

除字符串外,不允许有空格;在表达式加载该地址的字符串之前,返回一个随机数,即$;返回操作系统。内存是可寻址的,就像它是高字节和低字节的二维数组一样(例如,“(0,0)”到“(255,255)”);它的调用调用机器语言子例程。[13]。

许多方言出现在各种其他出版物中。1977年5月号的特色是一张包含微型BASIC光盘的软盘。

受到PCC对微小基础知识的呼吁的启发,Robert Uiterwyk为SWTPC项目(一个6800美元的系统)编写了Micro Basic 1.3,SWTPC在1976年6月号的SWTPC时事通讯上发表了这篇文章。Uiterwyk在一块合法的平板电脑上手写了这种语言。他后来将语言扩展到4K,增加了对浮点的支持;这种实现在BASIC解释器中是独一无二的,使用了精度为9位的二进制编码的十进制,范围高达10E99,并作为“软盘ROM”杂志插页免费出版。8K版本增加了字符串变量和三角函数。4K和8K版本都是由SWTPC销售的。1978年1月,Uiterwyk将源代码版权出售给了摩托罗拉。[29][30][30]。

Thomas F.Waitman在1976年为惠普HP-2640和HP-2645终端(使用Intel 8008和8080处理器)写了一本微型BASIC,发表在《惠普杂志》上。

发表在1976年12月号《界面时代》上的是LLL(劳伦斯·利弗莫尔实验室)BASIC,它的初稿由Steve Leininger根据Allison的规范开发,在Leininger离开美国国家半导体公司加盟Tandy Corporation之前。最终的口译器是由爱达荷州州立大学的John Dickenson,Jerry Barber和John Teeter根据与LLL的合同开发的。对于5K,它包括一个浮点数包,由David Mead、Hal Brand和Frank Olken开发。该项目由LLL置于公共领域,该公司在美国能源研究和发展管理局(U.S.Energy Research and Development Administration)的赞助下开发了该系统。[31][31]。

Altair BASIC,4K BASIC,可以在一台4kB的RAM机器上运行,只有大约790字节可供程序代码使用。[32]这项小小的Basic计划是为了响应牛郎星4K Basic 150美元的费用而启动的。

1975年,史蒂夫·沃兹尼亚克加入了新成立的Homebrew计算机俱乐部,俱乐部成员有王立晨(Palo Alto Tiny Basic)和汤姆·皮特曼(Tom Pittman)(6800 Tiny Basic)。沃兹尼亚克的结论是,他的新机器必须有自己的基础,希望这将是MOS Technology 6502处理器的第一个基础。由于该语言需要4kB的RAM,他将其作为设计的最小内存。[34]《Integer Basic》最初于1976年在盒式磁带光盘上出版。

1977年,The Radio Shack公司(当时名为TRS-80)发布了他们的第一台计算机--TRS-80,这是一款Z80计算机系统,在4kB的ROM中有一个I级BASIC语言。Tandy的雇员史蒂夫·莱宁格(Steve Leininger)在受雇于美国国家半导体公司(National Semiconductor)期间,曾为NIBL(国家工业基本语言)编写了NIBL(国家工业基本语言)解释器的初稿。[19]由于无法随身携带源代码,他将王立晨的Palo Alto Basic改编为TRS-80 Model I的原始原型。他对解释器进行了广泛的修改,增加了浮点支持、简单的黑白图形。并读取/数据/恢复所有语句。[35]。

最初开发于1979年,由John Grant编写的Sclair 4K Basic使用1978年的美国国家标准协会(ANSI)最低基本标准作为其语言定义,但其本身是一个仅具有整数算术的不完整的4KB实现。[36][36]。

微型机的基本实现已经适用于处理器控制和其他微控制器,如Arduino:

Stephen A.Ness于1977年为Mark Williams公司编写了XYBASIC,这是一个4K整数实现。该语言经常用于过程控制应用程序。[37]。

Arduino basic-改编自Gordon Brandly的68000微型Basic,由Mike Field移植到C。

下表将微型Basic实现的语言功能与它们之前的其他重要基础进行了比较。

Dim(一个字母名称,二维);如果省略,则假定从0到10;所有数组中最多1500个元素。

Dim(一个字母名称,一维;最多4个数组,共64个条目)。

^*英特尔8008微处理器的BASIC语言解释器。伊利诺伊大学香槟分校计算机科学系(1974年出版)。1974年6月。

丹尼斯·艾利森(1976):“微型基础版快速参考指南”。摘自“多布博士杂志”(Dr.Dobb‘s Journal)。第1卷第1期第1页第6页。

^《BASIC-PLUS语言手册》(PDF)。马萨诸塞州梅纳德:数字设备公司。1972年。第3-13页。

^我是艾伦,丹尼斯。“微型BASIC”。中国人民计算机公司。第4期(3)。

霍尔格·维特,“汤姆·皮特曼的6800微型基础版”。检索日期为2017年5月2日。

汤姆·皮特曼著,“微型基础实验工具包”。检索于2020年8月9日。

罗杰·劳斯科尔布(1976年12月),“王博士的Palo Alto Tiny Basic”(PDF),“界面时代”。第92-108页。

^“增强型&Amp;修改了6800个微小的Basic”。参见Dobb博士的“计算机健美操&Amodontia杂志”,“Running Light Without Overbyte”。1980年10月。

“德州微小基础(TBX)与电视卡带操作系统(TVCOS)联姻”。见多布博士的“计算机健美操与正畸杂志”,“Running Light Without Overbyte”。第1期(5):28-31页。1976年5月。

马克·阿诺德,沃兹沃斯,NAT(1976年2月),“SCELBAL--8008/8080系统的高级语言”,“Dobb博士期刊”。第30-53页。

^1“3K控制基本说明手册”(PDF)。克罗门科。存档自2013/12/22年的原件(PDF)。检索日期为2013-02-18。

史蒂文·沃兹尼亚克(2014年5月1日)“史蒂夫·沃兹尼亚克如何从头开始为最初的苹果写BASIC”。

大卫·威尔士;特蕾莎·威尔士(2007)。“启动水泵:TRS-80爱好者如何帮助点燃PC革命”。第7页。