Jak mogę uruchomić kod BASIC w terminalu?


20

Chciałbym uruchomić kod BASIC, tak jak robiłeś to na starszych komputerach, w Linuksie. (Szukam BASIC Interruptera, który może natywnie uruchamiać funkcje systemu operacyjnego)

Jakie mam opcje? (Najlepiej dla Debiana i Archa)


2
Istnieje wiele (niezbyt kompatybilnych) wersji podstawowych.
Thomas Dickey,

2
@ThomasDickey Zadałem Debianowi pytanie, ponieważ ma / miał znacznik Debian.
Rui F Ribeiro

Odpowiedzi:


24

Jeśli chcesz uruchomić natywnie w Linux BASIC, masz kilka pakietów w Debianie do wyboru:

  • kompatybilny z brandy BBC Micro BASIC - działa w interfejsie graficznym X11, najwyraźniej obsługuje dźwięk i grafikę;

Brandy jest tłumaczem dla BBC BASIC V, dialektu języka BASIC, który Acorn Computers dostarczył wraz z gamą komputerów stacjonarnych, które korzystają z procesorów ARM, takich jak Archimedes i Risc PC, i jest nadal używany na tych i kompatybilnych.

   BASIC V is a much extended version of BBC BASIC. 

To był BASIC zastosowany w BBC Micro opartym na 6502, który Acorn wyprodukował w latach 80.

  • bwbasic - byWater BASIC - tryb tekstowy, twierdzi, że jest kompatybilny z ANSI, ma rozszerzenia rozpoznające powłoki i twierdzi, że może emulować / mieć dobrą zgodność z kilkoma typami „starych” dialektów BASIC - w tym IBM BASICA, Microsoft BASIC i gwBASIC.

bwBASIC może być skonfigurowany do emulacji funkcji, poleceń i funkcji dostępnych w różnych typach tłumaczy BASIC;

bwBASIC implementuje jedną funkcję niedostępną w poprzednich interpretatorach BASIC: polecenie powłoki można wprowadzić interaktywnie w wierszu polecenia bwBASIC, a interpreter wykona je pod powłoką polecenia.
Na przykład polecenie „dir * .bas” można wprowadzić w bwBASIC (w systemie DOS lub „ls -l * .bas” w systemie UNIX) i będzie ono wykonywane z poziomu wiersza poleceń systemu operacyjnego.

Polecenia powłoki mogą być również podawane w liniach numerowanych w programie bwBASIC, dzięki czemu bwBASIC może być używany jako język programowania powłoki. Implementacja bwBASIC komend i funkcji RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON i ENVIRON $ () oferuje dalsze możliwości przetwarzania powłoki.

Aby je zainstalować:

sudo apt-get install brandy bwbasic

Jeśli chodzi o moje osobiste doświadczenia, wolę, bwbasicponieważ pozwala on mieć moc BASIC w tekstowym wierszu poleceń lub skrypcie powłoki.

Alternatywnie, masz także kilka pakietów emulacji starych komputerów, które oczywiście oprócz składni BASIC implementują całe środowisko starego komputera, które możesz chcieć ponownie przeżyć.

Co ciekawe, bwbasicteoretycznie może pozwolić na automatyzację operacji w Uniksie, np. Budowanie skryptów przy użyciu języka BASIC. Nigdy tego nie próbowałem.


9

Moje systemy Debian i prawdopodobnie większość innych dystrybucji Linuksa mają kilka opcji dostępnych bezpośrednio w menedżerze pakietów. Pomiędzy nimi:

  • bwbasic:

Bywater BASIC Interpreter (bwBASIC) implementuje duży nadzbiór standardu ANSI dla Minimal BASIC (X3.60-1978) i znaczną część standardu ANSI dla Full BASIC (X3.113-1987) w C. Oferuje również powłokę możliwości programowania jako rozszerzenie BASIC. bwBASIC stara się być jak najbardziej przenośny.

  • sdlbasic:

sdlBasic to mały, wydajny i wieloplatformowy interpreter języka BASIC do tworzenia gier z wykorzystaniem biblioteki SDL. Inspiracją był stary i chwalebny AMOS.

Strona główna (przewodnik)

Wikipedia


8

Ponieważ wydaje się, że wszyscy zakładają, że masz na myśli „komputer sprzed IBM” przez „starsze komputery”, pójdę inną drogą i zaoferuję odpowiedź, która interpretuje „starsze komputery” w znaczeniu „kompatybilnych z IBM przed Windows 9x”.

Jeśli miałeś na myśli komputery z zainstalowanymi wersjami MS-DOS QBASIC.EXE, masz trzy opcje, w zależności od tego, jak ściśle zdefiniujesz uruchamianie ich „w systemie Linux”:

  1. Jeśli nadal masz kopię QBASIC.EXE, możesz użyć DOSBox lub DOSEMU, aby uruchomić ją w zwirtualizowanym środowisku DOS. (Oba są dostępne w repozytoriach Debiana i są łatwe do skonfigurowania. Wystarczy ustawić folder, który ma zostać zamontowany jako C:, wrzuć QBASIC.EXEdo niego i gotowe.)

    Zapewni to doskonałą zgodność ze starym kodem źródłowym, ale żadna integracja z systemem operacyjnym hosta poza „nie C:jest w rzeczywistości folderem, a obrazem dysku”.

    Powinienem jednak wyjaśnić, że istnieje między nimi kompromis. DOSEMU będzie działał na dowolnym terminalu, który chcesz, ale nie będzie obsługiwał fantazyjnych sztuczek niskiego poziomu, z których korzystasz (np. W specjalistycznych trybach graficznych). Jedyny sposób na wsparcie, że jest pełny emulator jak DOSBox DOSBox ... ale pojawi się we własnym oknie, zamiast przy użyciu terminala.

  2. FreeBASIC ma qbdialekt / tryb, który ma na celu idealną kompatybilność z dużym podzbiorem QuickBASIC. (Nieobsługiwane są głównie rzeczy niskiego poziomu związane z faktem, że QuickBASIC był 16-bitowym systemem w trybie rzeczywistym, podczas gdy FreeBASIC to 32-bitowy system w trybie chronionym.)

    FreeBASIC oferuje pliki binarne dla Linuksa, ale znajdziesz je w swoim repozytorium pakietów, jeśli naprawdę miałeś na myśli „dystrybucje rodziny Debian” zamiast „Debian” i korzystasz z Ubuntu lub pochodnej Ubuntu, takiej jak Mint.

  3. Kompilacje QB64 dla Linuksa nawet nie znajdują się w repozytoriach Ubuntu, ale ma na celu być najbardziej zgodnym potomkiem QuickBASIC w trybie chronionym, a nawet zapewnia IDE, które próbuje sklonować IDE QBasic / QuickBasic.


8

Napisałeś w komentarzu do odpowiedzi Foon'a na to

Rozumiem przez „jak stare komputery”, że to właśnie tam jest

Inni przedstawili kilka różnych sugestii dla tłumaczy BASIC, które można zainstalować w systemie Linux, więc nie pójdę tam. Współczesne komputery PC na ogół nie są wyposażone we wbudowane interpretery języka BASIC, więc utknąłeś podczas uruchamiania czegoś, co może uruchomić zainstalowany interpreter języka BASIC.

Raczej wezmę powyższe, co oznacza, że ​​chcesz czegoś, co automatycznie uruchamia interpreter języka BASIC, podobnie jak, ale nie do końca, jak wczesne mikrokomputery (takie jak Apple II, Commodore C-64, Zinclair ZX-81 i ich podobne ) załadowano do natywnego interpretera języka BASIC.

Są w zasadzie trzy sposoby, aby to zrobić:

Utwórz program uruchamiający pulpit, który otwiera terminal

Jest to najmniej inwazyjne, ponieważ działa w pełni w systemie i środowisku, do którego jesteś przyzwyczajony.

Zasadniczo, niezależnie od tego, co zapewnia środowisko pulpitu, tworzysz program uruchamiający program i konfigurujesz go tak, aby uruchamiał wybrany przez ciebie interpreter BASIC w terminalu. Aby uzyskać dodatkowy efekt, możesz ustawić określone czcionki, kolory itp., Aby symulować środowisko minionych dni. Dokładnie to, jak to zrobisz, zależy od używanego środowiska pulpitu, którego nie określiłeś, ale kliknięcie prawym przyciskiem myszy w miejscu, w którym aktualnie klikasz, aby uruchomić aplikacje i szukasz opcji utworzenia nowego programu uruchamiającego, będzie dobrym początkiem .

Utwórz osobne konto użytkownika za pomocą interpretera BASIC jako powłoki

Jest to trochę bardziej zaangażowane niż prosty program uruchamiający pulpit, ale dostawcy lepiej izolują się, aby nie ryzykować zepsucia własnych plików. Najpierw zainstaluj interpreter BASIC; Wykorzystam bwbasicna przykład, ale wszystko idzie tak długo, jak działa natywnie w terminalu. Następnie dodaj użytkownika i ustaw jego powłokę na interpreter bwbasic. Można to zrobić za pomocą GUI, ale zależy to od używanego środowiska pulpitu; podejście przenośne polega na korzystaniu z terminala za pomocą useradd. To będzie coś podobnego do

$ 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

Następnie powinieneś być w stanie wejść do czystego środowiska BASIC poprzez sudo:

$ sudo -i -u basic

Możesz utworzyć program uruchamiający (jak wyżej), który wykonuje to polecenie w terminalu, jeśli chcesz.

Podaj swoje normalne hasło, gdy pojawi się monit sudo. Możesz edytować konfigurację sudoers, aby w razie potrzeby uniknąć monitu o hasło, ale pamiętaj, że edycja sudoers jest nieco skomplikowana, a tym bardziej ryzykowna; możesz zablokować się z konta root, co utrudnia naprawienie konfiguracji.

Użyj interpretera języka BASIC jako init

Jest to najbardziej inwazyjne podejście, ale zbliża cię do tego, jak działały wczesne mikrokomputery, uruchamiając bezpośrednio do interpretera BASIC. Nie polecam tego i uważam, że jest mało prawdopodobne, aby działał bez znacznej pracy, ale włączam to dla kompletności.

Jądro Linux akceptuje parametr wiersza poleceń (tak, jądro Linux ma parametry wiersza poleceń; możesz zobaczyć aktualnie uruchomiony wiersz poleceń, czytając z / proc / cmdline) o nazwie init, która określa, który program ma zostać wykonany po zakończeniu inicjalizacji jądra. Możesz skonfigurować moduł ładujący (najprawdopodobniej GRUB), aby zezwolić na uruchomienie pozycji jądra, która mówi, że tak initpowinno być /usr/bin/bwbasic(lub cokolwiek innego zainstalowanego interpretera BASIC).

Aby to zadziałało, interpreter języka BASIC, podobnie jak wszystkie wymagane pliki, musi znajdować się w /systemie plików root ( ). Wynika to z faktu, że jednym z zadań init jest montowanie wszystkich systemów plików, a ponieważ udostępniasz program inny niż init jako init, systemy plików użytkownika innego niż root nie zostaną podłączone. (Wierzę, że innym zadaniem init jest ponowne zamontowanie systemu plików root w trybie do odczytu i zapisu, więc dzięki trywialnemu podejściu nie będziesz w stanie nic zapisać. Możesz jednak, w zależności od dokładnych szczegółów implementacji, być w stanie system powinien wykonać coś takiegomount -o remount,rw / do ponownego zamontowania głównego systemu plików do odczytu i zapisu). Wybrany przez ciebie interpreter języka BASIC nie może zależeć od niczego, za co odpowiedzialny jest init, i nie będziesz mieć dostępu do żadnych funkcji obsługiwanych przez init ani żadnych procesów spawnowanych przez init (na przykład , obsługa sieci lub obsługa wielu użytkowników).

Wiersz poleceń jądra czegoś podobnego ro quiet init=/usr/bin/bwbasicprawdopodobnie zbliży cię do tego, jak wyglądał w dawnych czasach.



Twoje użycie sudo echonie robi tego, co masz na myśli i prawdopodobnie i -bash: /etc/shells: Permission deniedtak się spotkasz, ponieważ >>przekierowanie jest konfigurowane przez bash przed oceną reszty polecenia. Prawdopodobnie najlepiej jest type -P bwbasic | sudo tee -a /etc/shellszamiast tego użyć . Patrz " uprawnienia - Jak wstawić tekst do pliku głównego własnością używając sudo - Unix & Linux Stos Exchange
shalomb

@shalomb Dobra uwaga, dziękuję, że o tym wspomniałeś. Naprawiłem to, ale w nieco inny sposób.
CVn

1
@ MichaelKjörling Mniej drastyczna alternatywa dla korzystania z interpretera BASIC, polegająca initna skonfigurowaniu systemu init do używania bwbasiczamiast agettyi nie uruchamiania menedżera wyświetlania X11. (Dla innych, którzy nie wiedzą o czym mówię, jądro udostępnia różne „wirtualne konsole” dostępne za pomocą Ctrl + Alt + F1 poprzez Ctrl + Alt + F12, a system init domyślnie uruchamia się agettyod 1 do 6 i X11 Display Manager (który zapewnia okno logowania) na 7. Przed Upstart i systemd był kontrolowany przez /etc/inittab.), gettya jego potomkowie obsługują monity logowania do konsoli.
ssokolow

@ssokolow Dobry pomysł na kompletność, ale w tym momencie jesteś tylko o krok przed dedykowanym kontem użytkownika z powłoką bwbasic, więc nie sądzę, że naprawdę dodaje wiele pod względem ogólnej różnorodności.
CVn

4

Aby rzucić alternatywę: istnieje wiele emulatorów dla Linuksa, które mogą działać twoje stare komputery. Na przykład, w przypadku Xkegs, jeśli uruchomisz go, powinieneś poczekać na podstawowy monit AppleSoft. Komunikowanie się z innymi rzeczami związanymi z linuksem to ćwiczenie pozostawione czytelnikowi (wskazówka: technicznie uważam, że możesz przekierować wyjście emulowanego jabłka do emulowanej drukarki, które xkegs następnie ujawni jako gniazdo sieciowe, którego możesz użyć np. Nc do zasilania niektóre inne potokowe aplikacje itp. Nie jestem pewien, czy istnieje inna droga, ale można się spodziewać czegoś podobnego). Spodziewałbym się, że emulatory Commodore 64 podobnie będą miały sposób obsługiwać podstawowe Commodore itp.


Tak, istnieje wiele emulatorów, które można łatwo zainstalować w Debianie, ale kegswydaje się , że nie jest jednym z nich (bez apt-cache searchrezultatu). A dla niektórych / większości emulatorów prawdopodobnie będziesz musiał skądś zdobyć oryginalną pamięć ROM.
Alex Stragies

Możesz także edytować swoją odpowiedź w odniesieniu do emulatora, który można uruchomić w terminalu (OP kiedyś edytował Q)
Alex Stragies


Rozumiem przez „jak stare komputery”, że właśnie tam jest
DiamondCoderMan 17.04.17

1
@DiamondCoderMan Możesz założyć konto użytkownika, które używa czegoś takiego jak bwbasic, brandy lub sdlbasic jako powłoki, zamiast bash. W systemie Linux, to prawdopodobnie najbliżej można praktycznie dostać się do systemu, który funkcjonuje jak starych mikrokomputerów że załadowaniu BASIC tłumacza. Państwo mogli także przekazać coś podobnego init=/usr/bin/sdlbasicdo jądra Linux, który czy to działa będzie Ci o wiele bliżej, ale to może być lub może nawet nie praca.
CVn

1

Istnieje wiele alternatyw. Moja sugestia jest podobna do odpowiedzi ssokołowa. Jeśli chcesz „nowoczesnego” języka BASIC, ale ze składnią podobną do starych interpreterów języka BASIC, powinieneś wypróbować BaCon . Jest to transpilator BASIC, który generuje kod macierzysty. Projekt ma całkiem niezłą instrukcję, wiele bibliotek i przykładów, a nawet IDE napisane w BaCon.

wprowadź opis zdjęcia tutaj


Ale to nie dotyczy terminala
DiamondCoderMan

Transpiler działa w terminalu. Jest mały i używa kompilatora C do zbudowania pliku wykonywalnego. IDE było tylko przykładem tego, jak potężny jest ten projekt.
Rufo El Magufo

-2

Możesz uruchomić C64 w przeglądarce i w ten sposób używać języka BASIC.

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

Pamiętaj, że układ klawiatury jest inny, np. W Shift-2przypadku cytatów.

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

Applesoft BASIC, jeśli wolisz - http://calormen.com/jsbasic/

Istnieją emulatory innych maszyn online,
ale wiele z nich przechodzi bezpośrednio do dowolnego załadowanego programu,
bez emulacji początkowej klawiatury wymaganej do uzyskania dostępu.


1
Jak to działa w „terminalu”, jeśli uruchamiasz go w emulatorze przeglądarki internetowej opartym na javascript?
Wyatt8740 16.04.17

3
Część „w terminalu” znajduje się w tytule pytania
roaima 16.04.17

1
@ Doyousketch2 Spójrz na tytuł nieco uważniej. i.imgur.com/jDBZVEO.png
Wyatt8740

1
To było nawet w pierwszym tytule wersji, który brzmiał: Jak uruchomić kod BASIC w terminalu BASH?
CVn

2
Jeśli jest to oprogramowanie przeznaczone dla C64 lub innego 8-bitowego systemu, emulacja całej maszyny jest rzeczywiście najlepszym pomysłem - bardzo niewiele nietrywialnych podstawowych programów z tamtej epoki nawet udaje, że jest niezależna sprzętowo w najmniejszym stopniu!
rackandboneman 18.04.17
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.