ターミナルでBASICコードを実行するにはどうすればよいですか?


20

Linuxで以前のコンピューターで行っていたように、BASICコードを実行したいと思います。(OS機能をネイティブに実行できるBASIC Interrupterを探しています)

どのようなオプションがありますか?(できればDebianベースおよびArchベース)


2
基本には多くの(実際には互換性がない)バージョンがあります。
トーマスディッキー

2
@ThomasDickey Debianタグを持っている/持っていたので、Debianを質問に入れました。
ルイFリベイロ

回答:


24

Linux BASICでネイティブに実行したい場合、Debianにはいくつかのパッケージがあります:

  • brandy-互換性のあるBBC Micro BASIC-X11グラフィカルインターフェイスで動作し、サウンドとグラフィックスを明確にサポートします。

Brandyは、Acorn ComputersがArchimedesやRisc PCなどのARMプロセッサーを使用するデスクトップコンピューターの範囲で提供しているBASICの方言であるBBC BASIC Vのインタープリターであり、現在もこれらおよび互換機で使用されています。

   BASIC V is a much extended version of BBC BASIC. 

これは、1980年代にAcornが作成した6502ベースのBBC Microで使用されていたBASICです。

  • bwbasic-byWater BASIC-テキストモード、ANSI互換であると主張し、シェル対応の拡張機能を備え、IBM BASICA、Microsoft BASIC、gwBASICを含むいくつかのタイプの「古い」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

私の個人的な経験bwbasicとしては、テキストコマンドラインまたはシェルスクリプトでBASICの機能を使用できるため、好みです。

代替として、古いコンピューターのエミュレーションパッケージもいくつかあります。BASIC構文に加えて、明らかにしたい古いコンピューターのすべての環境を実装しています。

興味深いことにbwbasic、理論的には、Unixでの操作の自動化(たとえば、BASIC言語を使用したスクリプトの作成)が可能になります。しかし、それを試したことはありません。


9

私のDebianシステム、およびおそらく他のほとんどのLinuxディストリビューションには、パッケージマネージャーから直接利用できるいくつかの選択肢があります。その中で:

  • bwbasic

Bywater BASIC Interpreter(bwBASIC)は、Minimal BASICのANSI標準(X3.60-1978)の大規模なスーパーセットと、CのFull BASICのANSI標準(X3.113-1987)の重要なサブセットを実装します。 BASICの拡張としてのプログラミング機能。bwBASICは、可能な限りポータブルであることを目指しています。

  • sdlbasic

sdlBasicは、SDLライブラリのパワーを使用してゲームを作成するための、小型で効率的なマルチプラットフォームBASICインタープリターです。それは古くて輝かしいAMOSに触発されました。

ホームページ(リファレンスガイド)

ウィキペディア


8

「古いコンピューター」とは「IBM以前のPC」を意味するとみなしているようですので、別の方法で「古いコンピューター」を「Windows 9x以前のIBM互換」と解釈する回答を提供します。

を含むMS-DOSのバージョンを実行するコンピューターを意味する場合、QBASIC.EXE「Linuxで」それらを実行することをどの程度厳密に定義するかに応じて、3つのオプションがあります。

  1. まだQBASIC.EXEキックのコピーがある場合は、DOSBoxまたはDOSEMUを使用して仮想化DOS環境で実行できます。(どちらもDebianのリポジトリで利用でき、セットアップも簡単です。フォルダをマウントするように設定し、そこにC:ドロップQBASIC.EXEするだけで、準備完了です。)

    これにより、古いソースコードとの完全な互換性が得られますが、C:「ディスクイメージではなく、実際にはフォルダーです」以外のホストOSとの統合はありません。

    ただし、2つの間にトレードオフがあることを明確にする必要があります。DOSEMUは任意の端末で実行できますが、使用するQBasicの一部の特殊な低レベルトリック(たとえば、特殊なグラフィックモード用)はサポートしません。これをサポートする唯一の方法は、DOSBoxのような完全なエミュレータです...しかし、DOSBoxはターミナルを使用するのではなく、独自のウィンドウをポップアップします。

  2. FreeBASICには、QuickBASICの大部分のサブセットqbとの完全な互換性を目指した方言/モードがあります。(サポートされていないものは、主にQuickBASICが16ビットのリアルモードシステムであり、FreeBASICが32ビットのプロテクトモードシステムであるという事実に関連する低レベルのものです。)

    FreeBASICはLinuxバイナリを提供しますが、実際には「Debian」ではなく「Debian-family distros」を意味し、UbuntuまたはMintなどのUbuntu派生物を実行している場合にのみ、パッケージリポジトリで見つけることができます。

  3. QB64のLinuxビルドはUbuntuリポジトリにもありませんが、最も互換性のあるプロテクトモードQuickBASICの子孫になることを特に目指しており、QBasic / QuickBasic IDEのクローンを作成しようとするIDEも提供します。


8

あなたはに書いたコメントFOONの答えということ

「古いコンピューターのように」というのは、そこにあるということです

他の人は、LinuxシステムにインストールできるBASICインタープリターに対していくつかの異なる提案を提供しているので、そこには行きません。一般に、最近のPCにはBASICインタープリターが組み込まれていないため、インストールされているBASICインタープリターを実行できるものを起動するのが面倒です。

むしろ、BASICインタープリターを自動的に起動するものを望んでいることを意味しますが、これは初期のマイクロコンピューター(Apple II、Commodore C-64、Zinclair ZX-81、およびそれらのilkなど) )ネイティブBASICインタープリターを起動しました。

これを行うには、基本的に3つの方法が考えられます。

ターミナルを開くデスクトップランチャーを作成する

これは、使用しているシステムと環境内で完全に機能するため、最も侵襲性が低くなります。

基本的に、デスクトップ環境が提供するあらゆる手段を通じて、プログラムランチャーを作成し、ターミナルで選択したBASICインタープリターを起動するようにセットアップします。特別な効果を得るには、特定のフォント、色などを設定して、過ぎ去った日の環境をシミュレートできます。正確にこれを行う方法は、指定していない使用しているデスクトップ環境によって異なりますが、現在クリックしている場所を右クリックしてアプリケーションを起動し、新しいランチャーを作成するための選択肢を探すことは良いスタートです。

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の編集はやや複雑で、さらにリスクが高いことに注意してください。ルートアカウントから自分をロックアウトして、構成を修復するのが非常に困難になる可能性があります。

initとしてBASICインタープリターを使用する

これは最も侵襲的なアプローチですが、BASICインタープリターを直接起動することにより、初期のマイクロコンピューターがどのように機能するかに最も近づきます。これはお勧めしません。重要な作業なしでは機能しないと思われますが、完全を期すために含めています。

Linuxカーネルはコマンドラインパラメーターを受け入れます(はい、Linuxカーネルにはコマンドラインパラメーターがあります./proc/cmdlineから読み取ることで現在ブートされているコマンドラインを確認できます)namedは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すると、おそらく昔のように見えます。



の使用は意図したとおりにはsudo echo動作せず、コマンドの残りが評価される前にリダイレクトがbashによってセットアップさ-bash: /etc/shells: Permission deniedれるため、とにかく遭遇する可能性>>があります。type -P bwbasic | sudo tee -a /etc/shells代わりに使用することをお勧めします。「権限
-sudo

@shalomb良い点、言及してくれてありがとう。私はそれを修正しましたが、多少異なる方法で。
CVn

1
@MichaelKjörlingX11 ディスプレイマネージャーの代わりinitに使用し、X11ディスプレイマネージャーを起動しないように初期化システムを構成する場合と同様に、BASICインタープリターを使用するより劇的な代替手段。(私が話していることを知らない人のために、カーネルはCtrl + Alt + F1からCtrl + Alt + F12でアクセスできるさまざまな「仮想コンソール」を提供し、デフォルトではinitシステムは1から6 で起動し、 7のX11ディスプレイマネージャー(ログインダイアログを提供)。Upstartおよびsystemdの前は、これは。を介して制御されていました。その子孫はコンソールログインプロンプトを処理します。bwbasicagettyagetty/etc/inittabgetty
ssokolow

@ssokolow完全を期すために良いアイデアですが、その時点では、bwbasicシェルを使用した専用ユーザーアカウントの一歩先にあるだけなので、全体的な多様性という点ではあまり追加されていないと思います。
CVn

4

代替手段を捨てるために、古いコンピューターを実行できるLinux用のエミュレーターが複数あります。たとえば、xkegsで起動すると、applesoftの基本プロンプトが表示されます。技術的には、私はあなたがエミュレートされたプリンタにエミュレートリンゴで出力をリダイレクトすることができると信じて、xkegsは、あなたが例えば使用できるネットワークソケットとして公開されます:他のLinuxのものとの通信は、リーダー(ヒントに左運動であるNCをへフィードに他のパイプされたアプリケーションなど。他の方法を使用する方法があるかどうかはわかりませんが、同様のことができると期待しています。コモドール64エミュレーターも同様にコモドールの基本などを実行する方法を持っていると思います。


はい、Debianには簡単にインストールできるエミュレータがたくさんありますがkegs、それらの1つではないようです(apt-cache search結果なし)。エミュレータの一部/ほとんどについては、おそらくどこかからオリジナルのROMを入手する必要があります。
アレックスストラジェス

ターミナルで実行できるエミュレーターを参照するように回答を編集することもできます(OPは過去にQを編集したことがあります)
Alex Stragies


「古いコンピューターのように」私が意味するのは、まさにそこにあることです
DiamondCoderMan

1
@DiamondCoderMan bashの代わりに、シェルとしてbwbasic、brandy、またはsdlbasicなどを使用するユーザーアカウントを設定できます。Linuxでは、おそらく、BASICインタープリターを起動する古いマイクロコンピューターのように動作するシステムに実際に到達できる最も近いものです。あなたは可能性もようなものを渡しinit=/usr/bin/sdlbasicた、Linuxカーネルにそれが動作するかどうか、あなたがずっと近くなりますが、それはよく、またはなくても仕事。
CVn

1

多くの選択肢があります。私の提案は、ssokolowの答えに似ています。「最新の」BASICが必要であるが、古いBASICインタープリターに類似した構文を使用する場合は、BaConに試してみてください。これは、ネイティブコードを生成するBASICトランスパイラーです。このプロジェクトには、非常に優れたマニュアル、多くのライブラリとサンプル、そしてBaConで書かれたIDEさえあります。

ここに画像の説明を入力してください


しかし、これは端末向けではありません
-DiamondCoderMan

トランスパイラーはターミナルで動作します。小さく、Cコンパイラを使用して実行可能ファイルをビルドします。IDEは、プロジェクトがどれだけ強力かを示す一例にすぎません。
ルーフォエルマグーフォ

-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

1
それは最初のリビジョンのタイトルでさえあり、BASHターミナルでBASICコードを実行するには?
CVn

2
それがC64または他の8ビットシステム向けのソフトウェアである場合、マシン全体をエミュレートすることは確かに最良のアイデアです。
rackandboneman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.