我想像在旧计算机上一样在Linux中运行BASIC代码。(我正在寻找可以本地运行OS功能的BASIC中断器)
我有什么选择?(最好用于基于Debian和Arch的应用程序)
我想像在旧计算机上一样在Linux中运行BASIC代码。(我正在寻找可以本地运行OS功能的BASIC中断器)
我有什么选择?(最好用于基于Debian和Arch的应用程序)
Answers:
如果要在Linux BASIC中本机运行,则可以在Debian中选择几个软件包:
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可以配置为仿真不同类型的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语言构建脚本。从来没有尝试过。
我的Debian系统以及可能的大多数其他Linux发行版都有直接通过软件包管理器提供的几种选择。其中:
bwbasic
:Bywater BASIC解释器(bwBASIC)在C中实现了最小BASIC ANSI标准(X3.60-1978)的大型超集和完全BASIC ANSI标准(X3.113-1987)的重要子集。它还提供了外壳编程功能作为BASIC的扩展。bwBASIC寻求尽可能地便携。
sdlbasic
:sdlBasic是一款小型,高效且多平台的BASIC解释器,可使用SDL库的功能来创建游戏。它的灵感来自古老而辉煌的AMOS。
由于每个人似乎都假设您用“较旧的计算机”来表示“ IBM之前的PC”,因此我将走另一条路线,并给出一个解释,将“较旧的计算机”解释为“ Windows 9x之前的IBM兼容产品”。
如果您的意思是计算机运行的MS-DOS版本包括QBASIC.EXE
,则有三个选项,具体取决于您定义“在Linux上”运行它们的严格程度:
如果仍然有副本QBASIC.EXE
,可以使用DOSBox或DOSEMU在虚拟DOS环境中运行它。(两者都可以在Debian的存储库中找到,并且设置都很简单。只需将一个文件夹设置为C:
,QBASIC.EXE
放入其中,就可以了。)
这样可以为您提供与旧源代码的完美兼容性,但是除了“ C:
实际上是一个文件夹,而不是磁盘映像” 之外,没有与主机操作系统的集成。
但是,我要澄清一下,两者之间需要权衡取舍。DOSEMU可以在您想要的任何终端上运行,但不支持某些QBasic东西(例如用于特殊图形模式)的高级花哨的低级技巧。支持该功能的唯一方法是像DOSBox这样的完整仿真器...但是DOSBox会弹出自己的窗口,而不是使用您的终端。
FreeBASIC具有一种qb
方言/模式,旨在与大量 QuickBASIC 完美兼容。(不受支持的内容主要是与QuickBASIC是16位实模式系统而FreeBASIC是32位保护模式系统这一事实有关的低级内容。)
FreeBASIC提供了Linux二进制文件,但是,如果您实际上是“ Debian系列发行版”而不是“ Debian”,并且正在运行Ubuntu或像Mint这样的Ubuntu衍生产品,则只能在软件包存储库中找到它。
QB64的Linux版本甚至不在Ubuntu存储库中,但它专门旨在成为最兼容的保护模式QuickBASIC后代,甚至提供了一个试图克隆QBasic / QuickBasic IDE的IDE。
我的意思是“就像旧计算机一样”
其他人为您可以安装在Linux系统上的BASIC解释器提供了几种不同的建议,所以我不会去那里。现代PC通常不带有内置的BASIC解释器,因此您无法启动可以运行已安装的BASIC解释器的东西。
相反,我将上面的意思表示您想要一种可以自动启动BASIC解释器的工具,类似于但不像早期的微型计算机(例如Apple II,Commodore C-64,Zinclair ZX-81及其类似产品) )引导到本地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解释器中,您也可以最接近早期微型计算机的工作方式。我不建议这样做,并且会认为如果不进行大量工作就不太可能工作,但是为了完整起见,我将其包括在内。
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将文本插入到根拥有的文件中?
init
将初始化系统配置为使用bwbasic
而agetty
不是启动X11显示管理器。(对于不知道我在说什么的其他人,内核提供了各种“虚拟控制台”,可通过Ctrl + Alt + F1到Ctrl + Alt + F12进行访问,默认情况下,init系统从agetty
1到6 开始,然后X 7上的X11显示管理器(提供登录对话框)。在Upstart和systemd之前,它是通过/etc/inittab
。控制的。getty
其后代将处理控制台登录提示。
只是提供了一种替代方案:有多个Linux模拟器可以运行您的旧计算机。例如,对于xkegs,如果启动它,则应该有一个applesoft基本提示正在等待您。与其他linux通讯是一个留给读者的练习(提示:从技术上讲,我相信您可以将仿真苹果中的输出重定向到仿真打印机,然后xkegs将作为网络套接字公开,您可以使用它,例如nc馈入。一些其他管道应用程序等。不确定是否有其他方法可以使用,但希望可以做类似的事情)。我希望commodore 64仿真器同样可以运行commodore的basic等。
kegs
似乎不是其中之一(没有apt-cache search
结果)。对于某些/大多数仿真器,您可能需要从某处获取原始ROM。
init=/usr/bin/sdlbasic
的Linux内核,这是否行得通将让你更接近,但它可能甚至可能没有工作。
有很多选择。我的建议类似于ssokolow的回答。如果您想要“现代”的BASIC,但是语法类似于旧的BASIC解释器,那么您应该尝试一下BaCon。这是一个生成本机代码的BASIC编译器。该项目有一个相当不错的手册,许多库和示例,甚至还有一个用BaCon编写的IDE。
您可以在浏览器中运行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/
在线上还有其他机器的模拟器,
但是其中许多机器直接进入您加载的任何程序,
而没有模拟到达那里所需的初始键盘输入。