Як я можу запустити BASIC-код у терміналі?


20

Я хотів би запустити BASIC-код, як ви робили на старих комп'ютерах, в Linux. (Я шукаю BASIC Interrupter, який може запускати функції ОС на самому собі)

Які у мене варіанти? (Переважно для Debian та Arch)


2
Існує багато (не дуже сумісних) версій basic.
Томас Дікі

2
@ThomasDickey Я поставив Debian у питанні, як у нього / був тег Debian.
Rui F Ribeiro

Відповіді:


24

Якщо ви хочете запустити запуск у Linux BASIC, у Debian ви можете вибрати кілька пакунків:

  • коньяк - сумісний BBC Micro BASIC - працює в графічному інтерфейсі X11, мабуть, підтримує звук та графіку;

Бренді - інтерпретатор BBC BASIC V, діалекту BASIC, який Acorn Computers постачає своїми наборами настільних комп'ютерів, які використовують процесор ARM, такий як Archimedes і Risc PC, і досі використовується в цих і сумісних продуктах.

   BASIC V is a much extended version of BBC BASIC. 

Це було БАЗОМ, що використовується на 6502-м BBC Micro, який виготовляв Жолудь у 1980-х роках.

  • bwbasic - byWater BASIC - текстовий режим, претендує на сумісність з ANSI, має відомі розширення для оболонок і стверджує, що здатний емулювати / мати хорошу сумісність з декількома типами "старих" діалектів BASIC - включаючи IBM BASICA, Microsoft BASIC та gwBASIC.

bwBASIC можна налаштувати для емуляції функцій, команд та функцій, доступних для різних типів інтерпретаторів BASIC;

bwBASIC реалізує одну функцію, недоступну в попередніх інтерпретаторах BASIC: команда оболонки може бути введена інтерактивно в рядку bwBASIC, а інтерпретатор виконає її під командною оболонкою.
Наприклад, команду "dir * .bas" можна ввести в bwBASIC (під DOS або "ls -l * .bas" під UNIX), і вона буде виконуватися як з командного рядка операційної системи.

Команди оболонки також можуть бути задані в нумерованих рядках програми bwBASIC, так що bwBASIC може використовуватися як мова програмування оболонки. Реалізація команд та функцій RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON та ENVIRON $ () bwBASIC пропонує додаткові можливості обробки оболонок.

Щоб встановити їх:

sudo apt-get install brandy bwbasic

Що стосується мого особистого досвіду, я віддаю перевагу bwbasicтому, що це дозволяє мати силу BASIC у текстовому командному рядку або скрипті оболонки.

Як альтернатива, у вас також є кілька емуляційних пакетів старих комп'ютерів, які, очевидно, крім синтаксису BASIC реалізують усе середовище старого комп'ютера, яке ви можете повторно пережити.

Цікаво, що bwbasicтеоретично може дозволити автоматизувати операції в Unix, наприклад, створення сценаріїв з використанням мови BASIC. Ніколи не пробував цього.


9

У моїх системах Debian і, можливо, у більшості інших дистрибутивів Linux є кілька варіантів, доступних безпосередньо через менеджер пакетів. Серед них:

  • bwbasic:

Інтерпретатор Bywater BASIC (bwBASIC) реалізує великий набір стандарту ANSI для мінімальних BASIC (X3.60-1978) та значну підмножину стандарту ANSI для Full BASIC (X3.113-1987) у C. Він також пропонує оболонку засоби програмування як розширення BASIC. bwBASIC прагне бути максимально портативними.

  • sdlbasic:

sdlBasic - це невеликий, ефективний та багатоплатформенний інтерпретатор BASIC для створення ігор з використанням потужності бібліотеки SDL. Це надихнуло старий і славний AMOS.

Домашня сторінка (Довідник)

Вікіпедія


8

Оскільки, здається, всі припускають, що ви маєте на увазі "ПК до IBM" під "старими комп'ютерами", я збираюся піти іншим маршрутом і запропонувати відповідь, що трактує "старіші комп'ютери" на "IBM-сумісність перед Windows 9x".

Якщо ви мали на увазі комп’ютери, на яких запущені версії MS-DOS QBASIC.EXE, у вас є три варіанти, залежно від того, наскільки суворо ви визначаєте їх запуск "в Linux":

  1. Якщо у вас все ще є копія QBASIC.EXEударів, ви можете використовувати DOSBox або DOSEMU для запуску у віртуалізованому середовищі DOS. (Обидва доступні у сховищах Debian і прості в налаштуванні. Просто встановіть папку, яку слід встановити як C:, занесіть QBASIC.EXEу неї, і ви добре зайти.)

    Це дасть вам ідеальну сумісність зі старим вихідним кодом, але інтеграція з хост-операційною системою за межами " C:насправді є папкою, а не зображенням диска".

    Але я повинен уточнити, що між ними є компроміс. DOSEMU запускається на будь-якому терміналі, який ви хочете, але не підтримує химерних хитрощів низького рівня, які використовуються QBasic (наприклад, для спеціалізованих графічних режимів). Тільки спосіб підтримати це повний емулятор DOSBox , як ... але DOSBox з'явиться своє власне вікно , а не з допомогою терміналу.

  2. FreeBASIC має qbдіалект / режим, спрямований на ідеальну сумісність з великим підмножиною QuickBASIC. (Непідтримувані матеріали - це переважно матеріали низького рівня, пов'язані з тим, що QuickBASIC був 16-бітною системою реального режиму, а FreeBASIC - 32-бітовою захищеною режимою.)

    FreeBASIC пропонує бінарні файли Linux, але ви знайдете їх у вашому сховищі пакунків лише у тому випадку, якщо ви насправді мали на увазі "дистрибутив сімейства Debian", а не "Debian" і використовуєте Ubuntu або похідну Ubuntu типу Mint.

  3. Linux-версії QB64 відсутні навіть у сховищах Ubuntu, але вона спеціально спрямована на те, щоб бути найбільш сумісним нащадком QuickBASIC в захищеному режимі і навіть надає IDE, що намагається клонувати QBasic / QuickBasic IDE.


8

Ви написали в коментарі на відповідь Foon, що

Що я маю на увазі під "як старі комп'ютери", це те, що його просто немає

Інші запропонували кілька різних пропозицій для інтерпретаторів BASIC, які ви могли б встановити в системі Linux, тому я не заходжу туди. Сучасні ПК, як правило, не мають вбудованих інтерпретаторів BASIC, тому ви застрягли в завантаженні чогось, що може запустити встановлений перекладач BASIC.

Вірніше, я візьму на увазі, що ви хочете щось, що запускає інтерпретатор BASIC автоматично, схоже на, але не зовсім схоже на те, як ранні мікрокомп'ютери (наприклад, Apple II, Commodore C-64, Zinclair ZX-81 та їхні подібні ) завантажується в рідний перекладач BASIC.

В основному є три способи зробити це, про що я можу придумати:

Створіть робочий стіл, який відкриє термінал

Це найменш інвазивно, оскільки він повністю працює в системі та середовищі, до якого ви звикли.

В основному, за допомогою будь-яких засобів, які надає ваше робоче середовище, ви створюєте запуск програми та налаштовуєте його для запуску інтерпретатора 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:

$ sudo -i -u basic

Ви можете створити запуск (як вище), який виконує цю команду в терміналі, якщо ви хочете.

Укажіть свій звичайний пароль, коли вас запросить sudo. Ви можете відредагувати конфігурацію sudoers, щоб уникнути запиту пароля, якщо бажаєте, але пам’ятайте, що редагування sudoers дещо складне і, тим більше, ризиковане; ви можете заблокувати себе з кореневого облікового запису, що ускладнює відновлення конфігурації.

Використовуйте інтерпретатор BASIC як init

Це найбільш інвазивний підхід, але також ви наближаєтесь до того, як працювали ранні мікрокомп'ютери, завантажуючись безпосередньо в інтерпретатор BASIC. Я не рекомендую цього, і вважаю, що навряд чи вдасться обійтися без значної роботи, але включаю це для повноти.

Ядро Linux приймає параметр командного рядка (так, ядро ​​Linux має параметри командного рядка; ви можете побачити завантажений в даний момент командний рядок, прочитавши з / proc / cmdline) з назвою init, який вказує, яку програму виконати після завершення ініціалізації ядра. Ви можете налаштувати завантажувач (найімовірніше, GRUB), щоб дозволити завантажувати запис ядра, який говорить, що це initмає бути /usr/bin/bwbasic(або залежно від іншого інстальованого BASIC).

Щоб це працювало, інтерпретатор BASIC, як і всі необхідні йому файли, повинні бути розташовані у кореневій ( /) файловій системі. Це пояснюється тим, що одним із завдань 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 & Linux Stack Exchange
shalomb

@shalomb Добрий момент, дякую, що згадуєте про це. Я це виправив, але дещо по-іншому.
CVn

1
@ MichaelKjörling Менш драстична альтернатива використанню інтерпретатора BASIC, як це initбуло б налаштувати систему init для використання bwbasicзамість agettyі не запускати менеджер дисплеїв X11. (Для інших, хто не знає, про що я говорю, ядро ​​надає різні "віртуальні консолі", доступні через Ctrl + Alt + F1 через Ctrl + Alt + F12, і система init за замовчуванням запускається agettyз 1 по 6 і X11 Менеджер дисплеїв (який забезпечує діалогове вікно входу) на 7. Перед запуском та систематизацією це контролювали через /etc/inittab.), gettyі його нащадки обробляють підказки для входу в консоль.
ssokolow

@ssokolow Хороша ідея для повноти, але в цей момент ви лише на крок попереду спеціалізованого облікового запису користувача з bwbasic оболонкою, тому я не думаю, що це насправді багато що стосується загальної різноманітності.
CVn

4

Просто викиньте альтернативу: для Linux є кілька емуляторів, які можуть запускати ваші старі комп’ютери. Наприклад, з xkegs, якщо ви завантажуєте його, ви повинні очікувати базовий підказник applesoft. Спілкування з іншими матеріалами Linux - це вправа, що залишається читачеві (підказка: технічно, я вважаю, що ви можете перенаправити вихід у емільованому яблуку на емуляційний принтер, який xkegs потім відкриє як мережевий сокет, який ви можете використовувати, наприклад, nc для подачі в деякі інші трубопровідні програми тощо. Не впевнений, чи є інший шлях, але очікуйте, що щось подібне можна зробити). Я б очікував, що емулятори commodore 64 мають аналогічний спосіб запустити базовий Commodore тощо.


Так, у Debian є багато емуляторів, які легко встановити, але kegs, схоже, це не один із них (немає apt-cache searchрезультату). А для деяких / більшості емуляторів вам, мабуть, доведеться звідкись отримати оригінальний ПЗУ.
Alex Stragies

Ви можете також відредагувати свою відповідь, щоб посилатися на емулятор, який можна запустити в терміналі (ОП відредагував Q колись раніше)
Alex Stragies


Що я маю на увазі під "як старі комп'ютери", це те, що його просто там
DiamondCoderMan

1
@DiamondCoderMan Ви можете створити обліковий запис користувача, який використовує щось на зразок bwbasic, бренді або sdlbasic як оболонку, а не bash. В Linux це, мабуть, найближче, що ви могли практично дістатись до системи, яка працює як старі мікрокомп'ютери, що завантажилися в інтерпретатор BASIC. Ви могли б також передати що - щось на зразок init=/usr/bin/sdlbasicна Linux ядра, що , якщо він працює допоможе вам набагато ближче, але він може або не може навіть працювати.
CVn

1

Є багато альтернатив. Моя пропозиція схожа на відповідь ssokolow. Якщо ви хочете "сучасний" BASIC, але з синтаксисом, подібним до старих інтерпретаторів BASIC, тоді вам варто спробувати BaCon . Це базовий транспілятор, який генерує нативний код. У проекті є досить хороший посібник, багато бібліотек та прикладів, і навіть IDE, написаний у BaCon.

введіть тут опис зображення


Але це не для терміналу
DiamondCoderMan

Транспілер працює в терміналі. Він невеликий і використовує компілятор С для створення виконавчого файлу. 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?
Wyatt8740

3
Частина "в терміналі" знаходиться в назві питання
roaima

1
@ Doyousketch2 Подивіться на назву трохи уважніше. i.imgur.com/jDBZVEO.png
Wyatt8740

1
Це було навіть у першій назві редакції, в якій написано Як запустити BASIC-код у терміналі BASH?
CVn

2
Якщо це програмне забезпечення, призначене для C64 або іншої 8-бітної системи, емуляція цілої машини - це справді найкраща ідея - дуже мало нетривіальних базових програм тієї епохи навіть прикидаються апаратними засобами навіть у найменшій мірі!
rackandboneman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.