如何在终端中运行BASIC代码?


20

我想像在旧计算机上一样在Linux中运行BASIC代码。(我正在寻找可以本地运行OS功能的BASIC中断器)

我有什么选择?(最好用于基于Debian和Arch的应用程序)


2
有许多基本版本(并非真正兼容)。
托马斯·迪基

2
@ThomasDickey我把Debian放在了问题上,因为它有一个Debian标签。
Rui F Ribeiro

Answers:


24

如果要在Linux BASIC中本机运行,则可以在Debian中选择几个软件包:

  • brandy-兼容的BBC Micro BASIC-在X11图形界面中工作,显然支持声音和图形;

Brandy是BBC BASIC V的解释器,Bcorn BASIC V是Acorn Computer随其使用ARM处理器的一系列台式计算机(例如阿基米德和Risc PC)一起提供的BASIC方言,至今仍在与它们兼容使用。

   BASIC V is a much extended version of BBC BASIC. 

这是Acorn在1980年代生产的基于6502的BBC Micro上使用的BASIC。

  • bwbasic-byWater BASIC-文本模式,声称与ANSI兼容,具有外壳感知的扩展,并声称能够与几种“旧” BASIC方言(包括IBM BASICA,Microsoft BASIC和gwBASIC)进行仿真/具有良好的兼容性。

bwBASIC可以配置为仿真不同类型的BASIC解释器上可用的功能,命令和功能;

bwBASIC实现了以前的BASIC解释器中不可用的一项功能:可以在bwBASIC提示符下以交互方式输入shell命令,然后解释器将在命令shell下执行该命令。
例如,可以在bwBASIC中输入命令“ dir * .bas”(在DOS下输入,或者在UNIX中输入“ ls -l * .bas”),并将从操作系统命令行执行该命令。

Shell命令也可以在bwBASIC程序中的编号行上给出,因此bwBASIC可以用作Shell编程语言。bwBASIC对RMDIR,CHDIR,MKDIR,NAME,KILL,ENVIRON和ENVIRON $()命令和函数的实现提供了进一步的外壳处理功能。

要安装它们:

sudo apt-get install brandy bwbasic

就我的个人经验而言,我更喜欢bwbasic它,因为它允许在文本命令行或Shell脚本中具有BASIC的功能。

作为替代方案,您还拥有一些旧计算机的仿真程序包,很明显,除了BASIC语法之外,它还实现了您可能想重现的某些旧计算机的所有环境。

有趣的是,bwbasic理论上可以允许在Unix中自动化操作,例如使用BASIC语言构建脚本。从来没有尝试过。


9

我的Debian系统以及可能的大多数其他Linux发行版都有直接通过软件包管理器提供的几种选择。其中:

  • bwbasic

Bywater BASIC解释器(bwBASIC)在C中实现了最小BASIC ANSI标准(X3.60-1978)的大型超集和完全BASIC ANSI标准(X3.113-1987)的重要子集。它还提供了外壳编程功能作为BASIC的扩展。bwBASIC寻求尽可能地便携。

  • sdlbasic

sdlBasic是一款小型,高效且多平台的BASIC解释器,可使用SDL库的功能来创建游戏。它的灵感来自古老而辉煌的AMOS。

主页(参考指南)

维基百科


8

由于每个人似乎都假设您用“较旧的计算机”来表示“ IBM之前的PC”,因此我将走另一条路线,并给出一个解释,将“较旧的计算机”解释为“ Windows 9x之前的IBM兼容产品”。

如果您的意思是计算机运行的MS-DOS版本包括QBASIC.EXE,则有三个选项,具体取决于您定义“在Linux上”运行它们的严格程度:

  1. 如果仍然有副本QBASIC.EXE,可以使用DOSBoxDOSEMU在虚拟DOS环境中运行它。(两者都可以在Debian的存储库中找到,并且设置都很简单。只需将一个文件夹设置为C:QBASIC.EXE放入其中,就可以了。)

    这样可以为您提供与旧源代码的完美兼容性,但是除了“ C:实际上是一个文件夹,而不是磁盘映像” 之外,没有与主机操作系统的集成。

    但是,我要澄清一下,两者之间需要权衡取舍。DOSEMU可以在您想要的任何终端上运行,但不支持某些QBasic东西(例如用于特殊图形模式)的高级花哨的低级技巧。支持该功能的唯一方法是像DOSBox这样的完整仿真器...但是DOSBox会弹出自己的窗口,而不是使用您的终端。

  2. FreeBASIC具有一种qb方言/模式,旨在与大量 QuickBASIC 完美兼容。(不受支持的内容主要是与QuickBASIC是16位实模式系统而FreeBASIC是32位保护模式系统这一事实有关的低级内容。)

    FreeBASIC提供了Linux二进制文件,但是,如果您实际上是“ Debian系列发行版”而不是“ Debian”,并且正在运行Ubuntu或像Mint这样的Ubuntu衍生产品,则只能在软件包存储库中找到它。

  3. QB64的Linux版本甚至不在Ubuntu存储库中,但它专门旨在成为最兼容的保护模式QuickBASIC后代,甚至提供了一个试图克隆QBasic / QuickBasic IDE的IDE。


8

你在写评论,以欢的回答

我的意思是“就像旧计算机一样”

其他人为您可以安装在Linux系统上的BASIC解释器提供了几种不同的建议,所以我不会去那里。现代PC通常不带有内置的BASIC解释器,因此您无法启动可以运行已安装的BASIC解释器的东西。

相反,我将上面的意思表示您想要一种可以自动启动BASIC解释器的工具,类似于但不像早期的微型计算机(例如Apple II,Commodore C-64,Zinclair ZX-81及其类似产品) )引导到本地BASIC解释器中。

我可以想到的基本上有三种方法:

创建一个打开终端的桌面启动器

这是侵入性最小的,因为它完全可以在您习惯的系统和环境中工作。

基本上,通过桌面环境提供的任何方式,您都可以创建程序启动器并将其设置为在终端中启动您选择的BASIC解释器。为了产生额外的效果,您可以设置特定的字体,颜色等,以模拟过去的日子。确切的执行方式取决于您使用的桌面环境(尚未指定),但是右键单击当前单击以启动应用程序的位置,然后寻找创建新启动器的选择将是一个不错的开始。 。

创建一个单独的用户帐户,以BASIC解释程序作为外壳程序

这比简单的桌面启动器要复杂得多,但是提供程序提供了更好的隔离性,因此您不必冒险弄乱自己的文件。首先,安装一个BASIC解释器;我将使用bwbasic该示例,但是只要它在终端中本地运行,实际上一切都会发生。然后添加一个用户并将其shell设置为bwbasic解释器。可以通过GUI完成此操作,但这取决于您所使用的桌面环境。便携式方法是在使用的终端中这样做useradd。这将类似于

$ sudo -i
# grep -q "$(type -pP bwbasic)" /etc/shells || echo "$(type -pP bwbasic)" >>/etc/shells
# useradd --home /home/basic --create-home --shell "$(type -pP bwbasic)" basic

然后,您应该能够通过sudo进入一个干净的BASIC环境:

$ sudo -i -u basic

如果需要,您可以创建一个启动程序(如上所述),在终端中执行此命令。

在sudo提示时输入普通密码。您可以根据需要编辑sudoers配置以避免输入密码,但是请注意,编辑sudoers有点复杂,甚至更危险。您可以将自己锁定在root帐户之外,从而很难修复配置。

使用BASIC解释器作为init

这是最具侵入性的方法,但是通过直接启动到BASIC解释器中,您也可以最接近早期微型计算机的工作方式。我不建议这样做,并且会认为如果不进行大量工作就不太可能工作,但是为了完整起见,我将其包括在内。

Linux内核接受名为的命令行参数(是的,Linux内核具有命令行参数;您可以通过从/ proc / cmdline读取来查看当前引导的命令行)init,该参数指定内核初始化完成后要执行的程序。您可以配置引导加载程序(最有可能是GRUB)来引导init应该显示的内核条目/usr/bin/bwbasic(或安装的其他任何BASIC解释器)。

为了使其正常工作,BASIC解释器及其所需的所有文件必须位于root(/)文件系统上。这是因为init的任务之一是挂载所有文件系统,并且由于要提供一个非init程序作为init,因此非根文件系统将不会被挂载。(我相信init的另一项任务是以读写模式重新挂载根文件系统,因此,通过这种简单的方法,您将无法保存任何内容。不过,您可以根据确切的实现细节来执行以下操作:让系统执行类似mount -o remount,rw / 以便以读写方式重新挂载根文件系统。)您选择的BASIC解释器也必须不依赖于init负责的其他任何事情,并且您将无法访问init处理的任何功能或init产生的任何进程(例如, ,网络或多用户支持)。

诸如此类的内核命令行ro quiet init=/usr/bin/bwbasic可能会使您接近过去的样子。



您对的使用sudo echo并没有达到您的意思,并且-bash: /etc/shells: Permission denied无论如何您都可能会遇到,因为在>>评估其余命令之前,bash设置了重定向。最好是改用它type -P bwbasic | sudo tee -a /etc/shells。请参阅“ 权限-如何使用sudo将文本插入到根拥有的文件中?
-Unix

@shalomb好点,谢谢你提到它。我已解决此问题,但方式有所不同。
CVn

1
@MichaelKjörling替代使用BASIC解释器的一种不那么激进的选择,是init将初始化系统配置为使用bwbasicagetty不是启动X11显示管理器。(对于不知道我在说什么的其他人,内核提供了各种“虚拟控制台”,可通过Ctrl + Alt + F1到Ctrl + Alt + F12进行访问,默认情况下,init系统从agetty1到6 开始,然后X 7上的X11显示管理器(提供登录对话框)。在Upstart和systemd之前,它是通过/etc/inittab。控制的。getty其后代将处理控制台登录提示。
ssokolow

@ssokolow完整性的好主意,但那时候您仅是使用bwbasic shell的专用用户帐户的第一步,因此,就整体种类而言,我认为它并没有真正增加太多。
CVn

4

只是提供了一种替代方案:有多个Linux模拟器可以运行您的旧计算机。例如,对于xkegs,如果启动它,则应该有一个applesoft基本提示正在等待您。与其他linux通讯是一个留给读者的练习(提示:从技术上讲,我相信您可以将仿真苹果中的输出重定向到仿真打印机,然后xkegs将作为网络套接字公开,您可以使用它,例如nc馈入。一些其他管道应用程序等。不确定是否有其他方法可以使用,但希望可以做类似的事情)。我希望commodore 64仿真器同样可以运行commodore的basic等。


是的,在Debian中可以轻松安装许多仿真器,但kegs似乎不是其中之一(没有apt-cache search结果)。对于某些/大多数仿真器,您可能需要从某处获取原始ROM。
Alex Stragies

您可能还需要编辑答案以引用可以在终端中运行的仿真器(OP在过去的某个时间编辑过Q)
Alex Stragies


我的意思是“就像旧计算机一样”
-DiamondCoderMan

1
@DiamondCoderMan您可以设置一个使用bwbasic,brandy或sdlbasic之类的外壳程序代替bash的用户帐户。在Linux上,这实际上是最接近于像启动到BASIC解释器中的旧微型计算机一样运行的系统的系统。你可能也通过类似init=/usr/bin/sdlbasic的Linux内核,这是否行得通将让你更接近,但它可能甚至可能没有工作。
CVn

1

有很多选择。我的建议类似于ssokolow的回答。如果您想要“现代”的BASIC,但是语法类似于旧的BASIC解释器,那么您应该尝试一下BaCon。这是一个生成本机代码的BASIC编译器。该项目有一个相当不错的手册,许多库和示例,甚至还有一个用BaCon编写的IDE。

在此处输入图片说明


但这不是针对终端的
DiamondCoderMan

编译器在终端中工作。它很小,并且使用C编译器来生成可执行文件。IDE只是该项目功能强大的一个示例。
Rufo El Magufo

-2

您可以在浏览器中运行C64,然后以这种方式使用BASIC。

http://codeazur.com.br/stuff/fc64_final/

请注意,键盘布局是不同的,即Shift-2引号。

http://jilltxt.net/wp-content/uploads/C64-keyboard-layout.png

如果您愿意,可以使用Applesoft BASIC- http: //calormen.com/jsbasic/

在线上还有其他机器的模拟器,
但是其中许多机器直接进入您加载的任何程序,
而没有模拟到达那里所需的初始键盘输入。


1
如果您在基于JavaScript的Web浏览器模拟器中运行它,该“如何在终端中显示”?
Wyatt8740

3
问题的标题位于“终端”中
roaima

1
@ Doyousketch2仔细看一下标题。i.imgur.com/jDBZVEO.png
Wyatt8740 '17

1
甚至在第一个修订版标题中,该标题都显示了如何在BASH终端中运行BASIC代码?
CVn

2
如果它是用于C64或其他8位系统的软件,则最好是模拟一台完整的计算机-那个时代几乎没有假冒的基本程序,甚至假装都与硬件无关!
rackandboneman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.