Bagaimana saya bisa menjalankan kode BASIC di terminal?

20

Saya ingin menjalankan kode BASIC, seperti yang biasa Anda lakukan pada komputer lama, di Linux. (Saya mencari BASIC Interrupter yang dapat menjalankan fungsi OS secara native)

Opsi apa yang saya miliki? (Lebih disukai untuk Debian dan Arch berbasis)

DiamondCoderMan
sumber
2
Ada banyak (tidak benar-benar kompatibel) versi dasar.
Thomas Dickey
2
@ThomasDickey Saya menempatkan Debian dalam pertanyaan, karena memiliki / memiliki tag Debian.
Rui F Ribeiro

Jawaban:

24

Jika Anda ingin menjalankan secara native di Linux BASIC Anda memiliki beberapa paket di Debian untuk dipilih:

  • brandy - BBC Micro BASIC yang kompatibel - berfungsi dalam antarmuka grafis X11, sangat mendukung suara dan grafik;

Brandy adalah seorang juru bahasa untuk BBC BASIC V, dialek dari BASIC yang disediakan oleh Acorn Computers dengan jajaran komputer desktop mereka yang menggunakan prosesor ARM seperti Archimedes dan Risc PC, dan masih digunakan pada ini dan kompatibel.

   BASIC V is a much extended version of BBC BASIC. 

Ini adalah BASIC yang digunakan pada BBC Micro berbasis 6502 yang dibuat Acorn selama 1980-an.

  • bwbasic - byWater BASIC - mode teks, mengklaim kompatibel dengan ANSI, memiliki ekstensi shells aware, dan mengklaim mampu meniru / memiliki kompatibilitas yang baik dengan beberapa jenis dialek BASIC "lama" - termasuk IBM BASICA, Microsoft BASIC dan gwBASIC.

bwBASIC dapat dikonfigurasi untuk meniru fitur, perintah, dan fungsi yang tersedia pada berbagai jenis penerjemah BASIC;

bwBASIC mengimplementasikan satu fitur yang tidak tersedia pada penerjemah BASIC sebelumnya: perintah shell dapat dimasukkan secara interaktif pada prompt bwBASIC, dan penerjemah akan menjalankannya di bawah shell perintah.
Misalnya, perintah "dir * .bas" dapat dimasukkan dalam bwBASIC (di bawah DOS, atau "ls -l * .bas" di bawah UNIX) dan perintah itu akan dieksekusi sebagai dari baris perintah sistem operasi.

Perintah Shell juga dapat diberikan pada baris bernomor dalam program bwBASIC, sehingga bwBASIC dapat digunakan sebagai bahasa pemrograman shell. bwBASIC mengimplementasikan perintah dan fungsi RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON, dan ENVIRON $ () menawarkan kemampuan pemrosesan shell lebih lanjut.

Untuk menginstalnya:

sudo apt-get install brandy bwbasic

Adapun pengalaman pribadi saya, saya lebih suka bwbasickarena memungkinkan untuk memiliki kekuatan BASIC dalam baris perintah teks atau skrip shell.

Sebagai alternatif, Anda juga memiliki beberapa paket emulasi komputer lama, yang jelas selain sintaks BASIC mengimplementasikan semua lingkungan beberapa komputer lama yang mungkin ingin Anda hidupkan kembali.

Cukup menarik, bwbasicsecara teori dapat memungkinkan operasi otomatis di Unix misalnya membangun skrip menggunakan bahasa BASIC. Namun tidak pernah mencobanya.

Rui F Ribeiro
sumber
9

Sistem Debian saya, dan mungkin sebagian besar distribusi Linux lainnya, memiliki beberapa pilihan yang tersedia secara langsung melalui manajer paket. Diantara mereka:

  • bwbasic:

Bywater BASIC Interpreter (bwBASIC) mengimplementasikan superset besar dari Standar ANSI untuk Minimal BASIC (X3.60-1978) dan bagian signifikan dari Standar ANSI untuk BASIC Penuh (X3.113-1987) di C. Ia juga menawarkan shell fasilitas pemrograman sebagai perpanjangan dari BASIC. bwBASIC berupaya untuk menjadi se portable mungkin.

  • sdlbasic:

sdlBasic adalah interpreter BASIC kecil, efisien dan multiplatform untuk membuat game menggunakan kekuatan perpustakaan SDL. Itu terinspirasi oleh AMOS tua dan mulia.

Beranda (Panduan referensi)

Wikipedia

Alex Stragies
sumber
8

Karena semua orang tampaknya menganggap Anda bermaksud "PC pra-IBM" oleh "komputer lama", saya akan memilih rute lain dan menawarkan jawaban yang mengartikan "komputer lama" berarti "kompatibel dengan IBM sebelum Windows 9x".

Jika, yang Anda maksud adalah komputer yang menjalankan versi MS-DOS yang termasuk QBASIC.EXE, Anda memiliki tiga opsi, tergantung pada seberapa ketat Anda mendefinisikan menjalankannya "di Linux":

  1. Jika Anda masih memiliki salinan untuk QBASIC.EXEditendang, Anda bisa menggunakan DOSBox atau DOSEMU untuk menjalankannya di lingkungan DOS tervirtualisasi. (Keduanya tersedia di repositori Debian dan mudah diatur. Cukup atur folder yang akan di-mount C:, letakkan di QBASIC.EXEdalamnya, dan Anda siap melakukannya.)

    Itu akan memberi Anda kompatibilitas sempurna dengan kode sumber lama, tetapi tidak ada integrasi dengan OS host di luar " C:sebenarnya folder, daripada gambar disk".

    Saya harus mengklarifikasi, bahwa ada pertukaran antara keduanya. DOSEMU akan berjalan di terminal apa pun yang Anda inginkan, tetapi tidak akan mendukung trik tingkat rendah yang mewah beberapa barang QBasic digunakan (misalnya untuk mode grafis khusus). Satu- satunya cara untuk mendukung itu adalah emulator penuh seperti DOSBox ... tetapi DOSBox akan muncul jendela sendiri daripada menggunakan terminal Anda.

  2. FreeBASIC memiliki qbdialek / mode yang bertujuan untuk kompatibilitas sempurna dengan sebagian besar QuickBASIC. (Hal-hal yang tidak didukung sebagian besar adalah hal-hal tingkat rendah yang terkait dengan fakta bahwa QuickBASIC adalah sistem mode-nyata 16-bit sementara FreeBASIC adalah sistem mode terlindungi 32-bit.)

    FreeBASIC menawarkan binari Linux, tetapi Anda hanya akan menemukannya di repositori paket Anda jika Anda sebenarnya bermaksud "distro keluarga Debian" daripada "Debian" dan menjalankan Ubuntu atau turunan Ubuntu seperti Mint.

  3. Linux membangun QB64 bahkan tidak di repositori Ubuntu, tetapi secara khusus bertujuan untuk menjadi keturunan QuickBASIC terlindungi-mode yang paling kompatibel dan bahkan menyediakan IDE yang mencoba untuk mengkloning QBasic / QuickBasic IDE.

ssokolow
sumber
8

Anda menulis dalam komentar untuk jawaban Foon ini yang

Yang saya maksud dengan "seperti komputer lama" adalah hanya ada di sana

Yang lain telah memberikan beberapa saran berbeda untuk penerjemah BASIC yang dapat Anda instal pada sistem Linux, jadi saya tidak akan pergi ke sana. PC modern umumnya tidak dilengkapi dengan penerjemah BASIC bawaan, jadi Anda terjebak untuk mem-boot sesuatu yang dapat menjalankan penerjemah BASIC yang diinstal.

Sebaliknya, saya akan mengambil di atas berarti bahwa Anda menginginkan sesuatu yang memulai penerjemah BASIC secara otomatis, mirip dengan tetapi tidak seperti mikrokomputer awal (seperti Apple II, Commodore C-64, Zinclair ZX-81, dan sejenisnya) ) boot ke penerjemah BASIC asli.

Pada dasarnya ada tiga cara untuk melakukan ini yang dapat saya pikirkan:

Buat peluncur desktop yang membuka terminal

Ini adalah yang paling tidak invasif, karena berfungsi sepenuhnya dalam sistem dan lingkungan tempat Anda terbiasa.

Pada dasarnya, melalui segala cara yang disediakan oleh lingkungan desktop Anda, Anda membuat peluncur program dan mengaturnya untuk meluncurkan penerjemah BASIC pilihan Anda di terminal. Untuk efek ekstra, Anda dapat mengatur font, warna, dll. Khusus, untuk mensimulasikan lingkungan yang berlalu. Bagaimana tepatnya Anda melakukan ini tergantung pada lingkungan desktop yang Anda gunakan, yang belum Anda tentukan, tetapi mengklik kanan di mana Anda saat ini mengklik untuk meluncurkan aplikasi dan mencari pilihan untuk membuat peluncur baru akan menjadi awal yang baik .

Buat akun pengguna terpisah dengan penerjemah BASIC sebagai shell

Ini sedikit lebih terlibat daripada peluncur desktop sederhana, tetapi menyediakan isolasi yang lebih baik sehingga Anda tidak berisiko mengacaukan file Anda sendiri. Pertama, instal juru BASIC; Saya akan gunakan bwbasicuntuk contoh, tetapi apapun berjalan, sungguh, selama itu berjalan secara native di terminal. Kemudian tambahkan pengguna dan atur shellnya menjadi juru bahasa bwbasic. Ini dapat dilakukan melalui GUI, tetapi itu tergantung pada lingkungan desktop mana yang Anda gunakan; pendekatan portabel adalah melakukannya di terminal menggunakan useradd. Ini akan menjadi sesuatu yang mirip

$ 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

Kemudian, Anda harus dapat memasuki lingkungan BASIC yang bersih melalui sudo:

$ sudo -i -u basic

Anda dapat membuat peluncur (seperti di atas) yang mengeksekusi perintah ini di terminal, jika Anda mau.

Berikan kata sandi normal Anda saat diminta oleh sudo. Anda dapat mengedit konfigurasi sudoers untuk menghindari prompt kata sandi jika diinginkan, tetapi perlu diketahui bahwa mengedit sudoers agak rumit dan lebih dari itu, berisiko; Anda dapat mengunci diri dari akun root, sehingga cukup sulit untuk memperbaiki konfigurasi.

Gunakan penerjemah BASIC sebagai init

Ini adalah pendekatan yang paling invasif, tetapi juga membuat Anda paling dekat dengan bagaimana mikrokomputer awal bekerja, dengan mem-boot langsung ke penerjemah BASIC. Saya tidak merekomendasikan ini, dan akan menganggapnya tidak akan berhasil tanpa kerja yang signifikan, tetapi saya memasukkannya untuk kelengkapan.

Kernel Linux menerima parameter baris perintah (ya, kernel Linux memiliki parameter baris perintah; Anda dapat melihat baris perintah yang saat ini di-boot dengan membaca dari / proc / cmdline) yang bernama init, yang menentukan program mana yang akan dijalankan setelah inisialisasi kernel selesai. Anda dapat mengkonfigurasi boot loader (kemungkinan besar GRUB) untuk memungkinkan Anda untuk mem-boot entri kernel yang mengatakan bahwa initseharusnya /usr/bin/bwbasic(atau penerjemah BASIC mana pun yang Anda instal).

Agar ini berfungsi, penerjemah BASIC, serta semua file yang diperlukan, harus ditempatkan di /sistem file root ( ). Ini karena salah satu tugas init adalah me-mount semua sistem file, dan karena Anda menyediakan program non-init sebagai init, sistem file non-root tidak akan di-mount. (Saya percaya tugas init yang lain adalah untuk me-remount sistem file root dalam mode baca-tulis, jadi dengan pendekatan sepele Anda tidak akan dapat menyimpan apa pun. Anda mungkin, namun, tergantung pada detail implementasi yang tepat, dapat memiliki sistem mengeksekusi sesuatu sepertimount -o remount,rw / untuk mengount ulang sistem file root baca-tulis.) Penerjemah BASIC yang Anda pilih juga tidak boleh bergantung pada hal lain yang menjadi tanggung jawab init, dan Anda tidak akan memiliki akses ke fasilitas apa pun yang ditangani oleh init atau oleh proses apa pun yang dihasilkan oleh init (misalnya , dukungan jaringan atau multiuser).

Baris perintah kernel dari sesuatu seperti ro quiet init=/usr/bin/bwbasicmungkin akan membuat Anda cukup dekat dengan tampilannya di masa lalu.

sebuah CVn
sumber
Penggunaan Anda terhadap sudo echotidak melakukan apa yang Anda maksudkan dan Anda kemungkinan akan menemukan -bash: /etc/shells: Permission deniedpula karena >>pengalihan disiapkan oleh bash sebelum sisa perintah dievaluasi. Mungkin lebih baik digunakan type -P bwbasic | sudo tee -a /etc/shellssebagai gantinya. Lihat " izin - Bagaimana cara menyisipkan teks ke file yang dimiliki oleh root menggunakan sudo? - Unix & Linux Stack Exchange
shalomb
@shalomb Poin bagus, terima kasih sudah menyebutkannya. Saya memperbaikinya, tetapi dengan cara yang agak berbeda.
CVn
1
@ MichaelKjörling Alternatif yang tidak terlalu drastis untuk menggunakan penerjemah BASIC seperti initmengkonfigurasi sistem init untuk digunakan bwbasicalih-alih agettydan tidak memulai manajer tampilan X11. (Untuk yang lain yang tidak tahu apa yang saya bicarakan, kernel menyediakan berbagai "konsol virtual" yang dapat diakses melalui Ctrl + Alt + F1 melalui Ctrl + Alt + F12 dan sistem init, secara default, mulai agettydari 1 sampai 6 dan Display Manager X11 (yang menyediakan dialog login) pada 7. Sebelum Upstart dan systemd, ini dikontrol via /etc/inittab.) gettydan turunannya menangani permintaan login konsol.
ssokolow
@ssokolow Ide bagus untuk kelengkapan, tetapi pada saat itu Anda hanya selangkah lebih maju dari akun pengguna khusus dengan shell bwbasic, jadi saya tidak berpikir itu benar-benar menambahkan banyak dalam hal variasi keseluruhan.
CVn
4

Hanya untuk membuang alternatif: ada beberapa emulator untuk Linux yang dapat menjalankan komputer lama Anda. Sebagai contoh, dengan xkegs, jika Anda mem-boot-nya, Anda harus memiliki prompt dasar applesoft yang menunggu Anda. Berkomunikasi dengan hal-hal linux lainnya adalah latihan yang diserahkan kepada pembaca (petunjuk: secara teknis, saya percaya Anda dapat mengarahkan output di apple yang diemulasi ke printer yang diemulasi, yang kemudian xkeg akan paparkan sebagai soket jaringan yang dapat Anda gunakan misalnya nc untuk dimasukkan ke dalam beberapa aplikasi pipa lainnya dll. Tidak yakin apakah ada cara untuk pergi ke arah lain, tetapi mengharapkan sesuatu yang serupa dapat dilakukan). Saya berharap emulator komodor 64 juga akan memiliki cara untuk menjalankan dasar komodor, dll.

Foon
sumber
Ya, ada banyak emulator yang mudah dipasang di Debian, tetapi kegstampaknya tidak menjadi salah satu dari mereka (tidak ada apt-cache searchhasil). Dan untuk sebagian / sebagian besar emulator, Anda mungkin perlu mendapatkan ROM asli dari suatu tempat.
Alex Stragies
Anda mungkin ingin juga mengedit jawaban Anda untuk merujuk pada emulator, yang dapat dijalankan di terminal (OP telah mengedit Q di masa lalu)
Alex Stragies
Yang saya maksud dengan "seperti komputer lama" adalah hanya ada di sana
DiamondCoderMan
1
@DiamondCoderMan Anda dapat mengatur akun pengguna yang menggunakan sesuatu seperti bwbasic, brandy atau sdlbasic sebagai shell, bukan bash. Pada Linux, itu mungkin yang paling dekat Anda bisa hampir sampai ke sistem yang beroperasi seperti mikrokomputer tua yang boot ke BASIC. Anda juga bisa melewatkan sesuatu seperti init=/usr/bin/sdlbasicke kernel Linux, yang jika berfungsi akan membuat Anda lebih dekat, tetapi mungkin atau bahkan tidak berfungsi.
CVn
1

Ada banyak alternatif. Saran saya mirip dengan jawaban ssokolow. Jika Anda menginginkan BASIC "modern" tetapi dengan sintaksis yang mirip dengan penerjemah BASIC lama, maka Anda harus mencoba BaCon . Ini adalah transpiler BASIC yang menghasilkan kode asli. Proyek ini memiliki manual yang cukup bagus, banyak perpustakaan dan contoh, dan bahkan sebuah IDE yang ditulis dalam BaCon.

masukkan deskripsi gambar di sini

Rufo El Magufo
sumber
Tapi ini bukan untuk terminal sekalipun
DiamondCoderMan
Transpiler bekerja di terminal. Ini kecil dan menggunakan kompiler C untuk membangun executable. IDE hanyalah sebuah contoh seberapa kuat proyek tersebut.
Rufo El Magufo
-2

Anda dapat menjalankan C64 di browser Anda, dan menggunakan BASIC seperti itu.

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

Sadarilah tata letak keyboard yang berbeda, yaitu Shift-2untuk kutipan.

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

Applesoft BASIC jika Anda suka- http://calormen.com/jsbasic/

Ada emulator mesin lain online,
tetapi banyak dari mereka langsung menuju program apa pun yang Anda muat,
tanpa meniru input keyboard awal yang diperlukan untuk sampai ke sana.

Doyousketch2
sumber
1
Bagaimana ini "di terminal" jika Anda menjalankannya di emulator browser web berbasis javascript?
Wyatt8740
3
Bagian "dalam terminal" ada dalam judul pertanyaan
roaima
1
@ Doyousketch2 Lihatlah judulnya sedikit lebih hati-hati. i.imgur.com/jDBZVEO.png
Wyatt8740
1
Itu bahkan dalam judul revisi pertama, yang bertuliskan Bagaimana menjalankan kode BASIC di terminal BASH?
CVn
2
Jika itu adalah perangkat lunak yang ditujukan untuk sistem C64 atau 8 bit lainnya, meniru seluruh mesin memang ide terbaik - sangat sedikit program dasar non-sepele dari era itu bahkan berpura-pura menjadi perangkat keras yang independen dalam sekecil apa pun!
rackandboneman