Linuxで古いコンピューターで使用していたようなBASICコードを実行したいと思います。 (OSの機能をネイティブに実行できるBASICインタラプターを探しています)
どのようなオプションがありますか? (できればDebianベースとArchベース)
Linux BASICでネイティブに実行したい場合、Debianにはいくつかのパッケージがあり、以下から選択できます。
Brandyは、Acorn ComputersがARM ArchimedesやRisc PCなどのプロセッサを使用する一連のデスクトップコンピュータを提供し、現在も使用されているBASICの方言であるBBC BASIC Vの通訳です。これらと互換性について。
BASIC V is a much extended version of BBC BASIC.
これは、Acornが1980年代に作成した6502ベースのBBCマイクロで使用されていたBASICでした。
bwBASICは、さまざまなタイプのBASICインタープリターで使用可能な機能、コマンド、および機能をエミュレートするように構成できます。
bwBASICは、以前のBASICインタプリタでは利用できなかった1つの機能を実装しています。シェルコマンドはbwBASICプロンプトでインタラクティブに入力でき、インタプリタはコマンドシェルの下でそれを実行します。
たとえば、コマンド「dir * .bas」はbwBASIC(DOSの場合、またはUNIXの場合「ls -l * .bas」)に入力でき、オペレーティングシステムのコマンドラインから実行されます。シェルコマンドは、bwBASICプログラムの番号付きの行に指定することもできるため、bwBASICをシェルプログラミング言語として使用できます。 bwBASICのRMDIR、CHDIR、MKDIR、NAME、KILL、ENVIRON、およびENVIRON $()コマンドと関数の実装は、さらにシェル処理機能を提供します。
それらをインストールするには:
Sudo apt-get install brandy bwbasic
私の個人的な経験としては、テキストコマンドラインまたはシェルスクリプトでBASICの機能を利用できるbwbasic
を好みます。
別の方法として、古いコンピューターのエミュレーションパッケージもいくつかあります。BASIC構文に加えて、体験したい古いコンピューターのすべての環境を実装していることは明らかです。
興味深いことに、bwbasic
は理論的にはUnixでの操作の自動化を可能にします。 BASIC言語を使用してスクリプトを作成する。しかしそれを試したことはありません。
コメント から Foon's answer に書き込んだ
「古いコンピュータのように」というのは、そこにあるということです
LinuxシステムにインストールできるBASICインタープリターについていくつかの異なる提案を提供している人もいるので、ここでは説明しません。最近のPCには、通常、組み込みのBASICインタープリターが付属していないため、インストールされているBASICインタープリターを実行できるものを起動できません。
むしろ、上記のことは、初期のマイクロコンピュータ(Apple II、Commodore C-64 、Zinclair ZX-81、およびそれらのilk)がネイティブBASICインタープリターで起動しました。
これを行うには、基本的に3つの方法が考えられます。
これは、使い慣れたシステムと環境内で完全に機能するため、最も侵襲性が低くなります。
基本的に、デスクトップ環境が提供するあらゆる手段を通じて、プログラムランチャーを作成し、ターミナルで選択したBASICインタープリターを起動するように設定します。特別な効果を得るために、特定のフォントや色などを設定して、過去の環境をシミュレートできます。正確な方法は、指定していない使用しているデスクトップ環境によって異なりますが、現在クリックしてアプリケーションを起動している場所を右クリックして、新しいランチャーを作成するための選択肢を探すことから始めるとよいでしょう。 。
これは単純なデスクトップランチャーよりも少し複雑ですが、プロバイダーの分離が向上しているため、自分のファイルを破壊するリスクがありません。まず、BASICインタープリターをインストールします。この例ではbwbasic
を使用しますが、ターミナルでネイティブに実行される限り、実際には何でも実行できます。次に、ユーザーを追加し、そのシェルを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インタープリターおよび必要なすべてのファイルがルート(/
)ファイルシステムに配置されている必要があります。これは、initのタスクの1つがすべてのファイルシステムをマウントすることであり、init以外のプログラムをinitとして提供しているため、非ルートファイルシステムはマウントされていません。 (initのもう1つのタスクは、ルートファイルシステムを読み書きモードで再マウントすることです。そのため、簡単なアプローチでは何も保存できません。ただし、実装の詳細によっては、ルートファイルシステムを読み書き可能に再マウントするために、システムにmount -o remount,rw /
のようなものを実行させます。)選択したBASICインタープリターは、initが責任を負う他のものに依存してはなりません。また、 initまたはinitによって生成された任意のプロセス(たとえば、ネットワークまたはマルチユーザーサポート)。
ro quiet init=/usr/bin/bwbasic
のようなカーネルコマンドラインを使用すると、おそらく以前の状態にかなり近づくでしょう。
私のDebianシステム、そしておそらく他のほとんどのLinuxディストリビューションには、パッケージマネージャから直接利用できるいくつかの選択肢があります。その中で:
bwbasic
:Bywater BASICインタープリター(bwBASIC)は、最小BASICのANSI標準(X3.60-1978)の大規模なスーパーセットと、フルBASIC(X3.113-1987)のANSI標準の重要なサブセットをCで実装しています。 BASICの拡張としてのプログラミング機能。 bwBASICは、可能な限りポータブルであることを目指しています。
sdlbasic
:sdlBasicは、SDLライブラリの機能を使用してゲームを作成するための小さくて効率的なマルチプラットフォームのBASICインタープリターです。それは古くて輝かしいAMOSに触発されました。
「以前のPC」が「古いコンピューター」という意味であると誰もが思っているようですので、「古いコンピューター」を「Windows 9xより前のIBM互換」と解釈する別の方法を説明します。
QBASIC.EXE
を含むバージョンのMS-DOSを実行しているコンピューターを意味している場合、「Linuxで」それらを実行することをどの程度厳密に定義するかに応じて、3つのオプションがあります。
それでもQBASIC.EXE
のコピーが表示される場合は、 DOSBox または [〜#〜] dosemu [〜#〜] を使用して実行できます仮想化されたDOS環境。 (どちらもDebianのリポジトリで利用可能で、設定は簡単です。マウントするフォルダをC:
として設定し、QBASIC.EXE
をそこにドロップするだけで十分です。)
これにより、古いソースコードとの完全な互換性が得られますが、「C:
は実際にはディスクイメージではなくフォルダです」というホストOSとの統合はありません。
ただし、両者の間にはトレードオフがあることを明確にしておく必要があります。 DOSEMUは、好きな端末で実行できますが、QBasicのいくつかの機能(たとえば、特殊なグラフィックモード用)を使用した、洗練された低レベルのトリックはサポートしません。これをサポートするonly方法は、DOSBoxのような完全なエミュレータです...しかし、DOSBoxは、端末を使用するのではなく、独自のウィンドウをポップアップします。
FreeBASIC には、QuickBASICの 大きなサブセット との完全な互換性を目的としたqb
方言/モードがあります。 (サポートされていないものは、QuickBASICが16ビットのリアルモードシステムであり、FreeBASICが32ビットのプロテクトモードシステムであったという事実に関連する低レベルのものです。)
FreeBASICはLinuxバイナリを提供しますが、実際には「Debian」ではなく「Debian-family distros」を意味し、UbuntuまたはMintのようなUbuntu派生物を実行している場合にのみ、パッケージリポジトリで見つかります。
QB64 のLinuxビルドはUbuntuリポジトリにもありませんが、特に最も互換性の高いプロテクトモードQuickBASICの子孫になることを目的としており、IDE that QBasic/QuickBasic IDEを複製しようとします。
代替案を捨てるだけです:古いコンピューターを実行できるLinux用のエミュレーターが複数あります。例として、xkegsを使用して起動すると、applesoftの基本的なプロンプトが表示されるはずです。他のLinuxとの通信は読者に任せる練習です(ヒント:技術的には、エミュレートされたApple=の出力をエミュレートされたプリンターにリダイレクトできます。xkegsはネットワークソケットとして公開します。たとえばncを使用して、他のパイプアプリケーションなどにフィードできます。他の方法に進む方法があるかどうかはわかりませんが、同様のことができると期待しています。Commodore64エミュレータを期待します。同様に、コモドアのベーシックなどを実行する方法があります。
選択肢はたくさんあります。私の提案はssokolowの答えに似ています。 「モダン」なBASICが必要だが、構文が古いBASICインタプリタに似ている場合は、 BaCon を試してみてください。ネイティブコードを生成するBASICトランスパイラーです。プロジェクトにはかなり良いマニュアル、多くのライブラリと例、さらにはIDE BaConで書かれています。