Как я могу запустить BASIC-код в терминале?

20

Я хотел бы запустить основной код, как вы это делали на старых компьютерах, в Linux. (Я ищу BASIC Interrupter, который может запускать функции ОС изначально)

Какие варианты у меня есть? (Желательно для Debian и Arch)

DiamondCoderMan
источник
2
Существует много (не совсем совместимых) версий basic.
Томас Дики
2
@ThomasDickey Я поставил Debian на вопрос, так как он имеет / имел тег Debian.
Руи Ф Рибейро

Ответы:

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, который Acorn сделал в 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 можно использовать в качестве языка программирования оболочки. Внедрение 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) реализует большой расширенный набор стандарта ANSI для минимального бейсика (X3.60-1978) и значительный поднабор стандарта ANSI для полного бейсика (X3.113-1987) в C. Он также предлагает оболочку средства программирования как расширение Бейсика. 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, которая пытается клонировать IDE QBasic / QuickBasic.

ssokolow
источник
8

Вы написали в комментарии к ответу Фуна, что

Что я имею в виду под "как старые компьютеры", так это то, что

Другие предоставили несколько разных предложений для интерпретаторов BASIC, которые вы могли бы установить в системе Linux, поэтому я не буду идти туда. Современные ПК, как правило, не поставляются со встроенными интерпретаторами BASIC, поэтому вы застряли при загрузке чего-либо, что может запустить установленный интерпретатор BASIC.

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

Есть в основном три способа сделать это, о которых я могу думать:

Создайте панель запуска на рабочем столе, которая открывает терминал

Это наименее инвазивный метод, поскольку он полностью работает в системе и среде, к которой вы привыкли.

По сути, с помощью любых средств, которые предоставляет среда рабочего стола, вы создаете средство запуска программ и настраиваете его для запуска интерпретатора BASIC по вашему выбору в терминале. Для дополнительного эффекта вы можете установить конкретные шрифты, цвета и т. Д., Чтобы имитировать обстановку минувших дней. Как именно вы это сделаете, зависит от того, какую среду рабочего стола вы используете, которую вы не указали, но если вы щелкнете правой кнопкой мыши там, где вы в данный момент щелкаете для запуска приложений, и ищете выбор для создания новой панели запуска, это будет хорошим началом. ,

Создайте отдельную учетную запись пользователя с интерпретатором BASIC в качестве оболочки

Это немного сложнее, чем простая программа запуска на рабочем столе, но обеспечивает лучшую изоляцию провайдеров, поэтому вы не рискуете испортить свои собственные файлы. Сначала установите BASIC-интерпретатор; Я буду использовать bwbasicдля примера, но все идет, на самом деле, до тех пор, пока он работает в терминале. Затем добавьте пользователя и установите его оболочку в качестве интерпретатора bwbasic. Это можно сделать через графический интерфейс, но это зависит от того, какую среду рабочего стола вы используете; портативный подход заключается в том, чтобы сделать это с помощью терминала 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 несколько сложное и даже более рискованное; Вы можете заблокировать себя из-под учетной записи root, что затруднит восстановление конфигурации.

Используйте BASIC-интерпретатор как init

Это наиболее инвазивный подход, но он также приблизит вас к тому, как работали первые микрокомпьютеры, загрузившись непосредственно в интерпретатор BASIC. Я не рекомендую это и считаю маловероятным, чтобы это работало без значительной работы, но я включил это для полноты.

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

Чтобы это работало, интерпретатор BASIC, а также все необходимые ему файлы должны быть расположены в /файловой системе root ( ). Это связано с тем, что одной из задач init является монтирование всех файловых систем, а поскольку вы предоставляете не-init программу в качестве init, файловые системы без полномочий root не будут смонтированы. (Я считаю, что другой задачей init является перемонтирование корневой файловой системы в режиме чтения-записи, поэтому при обычном подходе вы ничего не сможете сохранить. Однако, в зависимости от точных деталей реализации, вы сможете заставить систему выполнить что-то вродеmount -o remount,rw / чтобы перемонтировать корневую файловую систему для чтения-записи.) Выбранный вами интерпретатор BASIC также не должен зависеть от чего-либо еще, за что отвечает init, и у вас не будет доступа ни к каким средствам, обрабатываемым init, или к любым процессам, порожденным init (например, , сеть или многопользовательская поддержка).

Командная строка ядра, похожая на что-то подобное ro quiet init=/usr/bin/bwbasic, вероятно, поможет вам понять, как она выглядела в старые времена.

CVn
источник
Использование sudo echoвами не соответствует вашим ожиданиям, и вы, скорее всего, столкнетесь с -bash: /etc/shells: Permission deniedкаким- либо образом, поскольку >>перенаправление настраивается bash до того, как остальная часть команды будет оценена. Вероятно, лучше использовать type -P bwbasic | sudo tee -a /etc/shellsвместо этого. См. «
Права
@shalomb Хорошо, спасибо, что упомянули об этом. Я исправил это, но несколько другим способом.
CVn
1
@ MichaelKjörling Менее радикальная альтернатива использованию интерпретатора BASIC, initкоторая заключается в том, чтобы настроить систему инициализации для использования bwbasicвместо agettyи не запускать диспетчер отображения X11. (Для тех, кто не знает, о чем я говорю, ядро ​​предоставляет различные «виртуальные консоли», доступные через Ctrl + Alt + F1 через Ctrl + Alt + F12, и система init по умолчанию запускается agettyс 1 по 6 и Диспетчер отображения X11 (который обеспечивает диалог входа в систему) на 7. До Upstart и systemd это контролировалось с помощью /etc/inittab.) gettyи его потомки обрабатывали запросы на вход в консоль.
ssokolow
@ssokolow Хорошая идея для полноты, но на данный момент вы только на шаг впереди выделенной учетной записи пользователя с оболочкой bwbasic, поэтому я не думаю, что она действительно добавляет много с точки зрения общего разнообразия.
CVn
4

Просто чтобы исключить альтернативу: для Linux есть несколько эмуляторов, которые могут запускать ваши старые компьютеры. Например, для xkegs, если вы загрузите его, у вас должно появиться базовое приглашение appleoft. Общаясь с другими Linux вещью упражнение читателя (подсказка: технически, я полагаю , вы можете перенаправить вывод в вашей имитации яблока сэмулированного принтера, который xkegs будет разоблачать как сетевой сокет , который можно использовать , например , пс для подачи в некоторые другие приложения и т. д. Не уверен, что есть какой-то другой путь, но ожидать, что что-то подобное можно сделать). Я ожидал бы, что у эмуляторов Commodore 64 аналогичным образом будет работать базовая версия Commodore и т. Д.

Foon
источник
Да, в Debian легко установить много эмуляторов, но kegs, похоже , это не один из них ( apt-cache searchбезрезультатно). А для некоторых / большинства эмуляторов вам, вероятно, потребуется откуда-то получить оригинальный ROM.
Алекс Страгис
Вы также можете отредактировать свой ответ, ссылаясь на эмулятор, который можно запустить в терминале (OP уже редактировал Q в прошлом)
Alex Stragies
DiamondCoderMan
1
@DiamondCoderMan Вы можете создать учетную запись пользователя, которая использует в качестве оболочки что-то вроде bwbasic, brandy или sdlbasic вместо bash. В Linux, это, вероятно , ближе всего можно практически получить к системе , которая работает как старые микрокомпьютеров , которые загрузились в BASIC интерпретатор. Вы могли бы также передать что - то вроде init=/usr/bin/sdlbasicна Linux ядро, что если он работает поможет вам гораздо ближе, но она может или не может даже работать.
CVn
1

Есть много альтернатив. Мое предложение похоже на ответ Ссоколова. Если вам нужен «современный» BASIC, но с синтаксисом, аналогичным старым интерпретаторам BASIC, вам следует попробовать BaCon . Это базовый транспортер, который генерирует нативный код. У проекта есть довольно хорошее руководство, много библиотек и примеров, и даже IDE, написанная на BaCon.

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

Руфо Эль Магуфо
источник
Но это не для терминала, хотя
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/

В сети есть эмуляторы других машин,
но многие из них идут прямо к любой загружаемой программе,
не эмулируя начальный ввод с клавиатуры, необходимый для ее получения.

Doyousketch2
источник
1
Как это "в терминале", если вы запускаете его в эмуляторе веб-браузера на основе JavaScript?
Wyatt8740
3
Часть «в терминале» в названии вопроса
roaima
1
@ Doyousketch2 Посмотрите на заголовок немного более внимательно. i.imgur.com/jDBZVEO.png
Wyatt8740
1
Это было даже в заголовке первой ревизии, который гласил: « Как запустить BASIC-код в терминале BASH»?
CVn
2
Если это программное обеспечение, предназначенное для C64 или другой 8-битной системы, то эмуляция целой машины - действительно лучшая идея - очень мало нетривиальных базовых программ того времени даже претендуют на аппаратную независимость в малейшей степени!
rackandboneman