Ich möchte BASIC-Code unter Linux ausführen, wie Sie es früher auf älteren Computern getan haben. (Ich suche einen BASIC Interrupter, der OS-Funktionen nativ ausführen kann)
Welche Möglichkeiten habe ich? (Vorzugsweise für Debian-basierte und Arch-basierte)
linux
command-line
programming
DiamondCoderMan
quelle
quelle
Antworten:
Wenn Sie nativ in Linux BASIC laufen wollen, haben Sie mehrere Pakete in Debian zur Auswahl:
So installieren Sie sie:
Was meine persönliche Erfahrung betrifft, bevorzuge ich es,
bwbasic
da es die Leistung von BASIC in einer Textbefehlszeile oder einem Shell-Skript ermöglicht.Alternativ haben Sie auch mehrere Emulationspakete von Computern der alten Generation, die offensichtlich neben der BASIC-Syntax die gesamte Umgebung eines alten Computers implementieren, den Sie möglicherweise noch einmal erleben möchten.
Interessanterweise
bwbasic
könnte theoretisch die Automatisierung von Operationen in Unix ermöglicht werden, z. B. das Erstellen von Skripten mit der BASIC-Sprache. Ich habe es aber nie ausprobiert.quelle
Meine Debian-Systeme und wahrscheinlich die meisten anderen Linux-Distributionen haben mehrere Möglichkeiten, die direkt über den Paketmanager verfügbar sind. Darunter:
bwbasic
:sdlbasic
:Homepage (Referenzhandbuch)
Wikipedia
quelle
Da anscheinend alle davon ausgehen, dass Sie mit "älteren Computern" "Vor-IBM-PC" meinen, gehe ich den anderen Weg und biete eine Antwort an, die "ältere Computer" als "IBM-kompatibel vor Windows 9x" interpretiert.
Wenn Sie Computer meinten, auf denen Versionen von MS-DOS ausgeführt werden,
QBASIC.EXE
stehen Ihnen drei Optionen zur Verfügung, je nachdem, wie genau Sie die Ausführung unter Linux definieren:Wenn Sie noch eine Version von
QBASIC.EXE
kicking around haben, können Sie DOSBox oder DOSEMU verwenden , um sie in einer virtualisierten DOS-Umgebung auszuführen. (Beide sind in Debians Repositorys verfügbar und einfach einzurichten. Legen Sie einfach einen Ordner fest, der gemountet werden sollC:
, und legenQBASIC.EXE
Sie ihn ab. Sie können loslegen.)Das gibt Ihnen eine perfekte Kompatibilität mit altem Quellcode, aber keine Integration mit dem Host-Betriebssystem über "
C:
ist eigentlich ein Ordner und kein Festplatten-Image" hinaus.Ich sollte jedoch klarstellen, dass es einen Kompromiss zwischen den beiden gibt. DOSEMU kann auf jedem beliebigen Terminal ausgeführt werden, unterstützt jedoch nicht die ausgefallenen Low-Level-Tricks einiger QBasic-Produkte (z. B. für spezielle Grafikmodi). Die einzige Möglichkeit, dies zu unterstützen, ist ein vollständiger Emulator wie DOSBox. DOSBox öffnet jedoch ein eigenes Fenster, anstatt Ihr Terminal zu verwenden.
FreeBASIC verfügt über einen
qb
Dialekt / Modus, der auf perfekte Kompatibilität mit einer großen Teilmenge von QuickBASIC abzielt . (Bei den nicht unterstützten Inhalten handelt es sich hauptsächlich um Low-Level-Inhalten, die mit der Tatsache zusammenhängen, dass QuickBASIC ein 16-Bit-Real-Mode-System war, während FreeBASIC ein 32-Bit-Protected-Mode-System ist.)FreeBASIC bietet Linux-Binärdateien, die Sie jedoch nur dann in Ihrem Paket-Repository finden, wenn Sie tatsächlich "Debian-family distros" anstelle von "Debian" meinten und Ubuntu oder ein Ubuntu-Derivat wie Mint ausführen.
Die Linux-Builds von QB64 sind noch nicht einmal in den Ubuntu-Repositories enthalten, aber es ist speziell darauf ausgerichtet, der kompatibelste QuickBASIC-Nachfolger im geschützten Modus zu sein, und es wird sogar eine IDE bereitgestellt, die versucht, die QBasic / QuickBasic-IDE zu klonen.
quelle
Sie haben in einem Kommentar zu Foons Antwort geschrieben, dass
Andere haben verschiedene Vorschläge für BASIC-Interpreter gemacht, die Sie auf einem Linux-System installieren können. Moderne PCs verfügen im Allgemeinen nicht über integrierte BASIC-Interpreter, sodass Sie nicht mehr mit etwas booten können, auf dem ein installierter BASIC-Interpreter ausgeführt werden kann.
Ich werde das Obige eher so verstehen, dass Sie etwas wollen, das einen BASIC-Interpreter automatisch startet, ähnlich wie die frühen Mikrocomputer (z. B. Apple II, Commodore C-64, Zinclair ZX-81 und andere) ) in einen nativen BASIC-Interpreter gebootet.
Grundsätzlich gibt es drei Möglichkeiten, dies zu tun:
Erstellen Sie einen Desktop-Starter, der ein Terminal öffnet
Dies ist die am wenigsten invasive Methode, da sie vollständig in dem System und der Umgebung funktioniert, an die Sie gewöhnt sind.
Grundsätzlich erstellen Sie mit den Mitteln, die Ihre Desktop-Umgebung bietet, einen Programmstarter und richten ihn so ein, dass der BASIC-Interpreter Ihrer Wahl in einem Terminal gestartet wird. Für zusätzlichen Effekt können Sie bestimmte Schriftarten, Farben usw. einstellen, um eine Umgebung vergangener Tage zu simulieren. Wie Sie dies genau tun, hängt von der verwendeten Desktop-Umgebung ab, die Sie nicht angegeben haben. Wenn Sie jedoch mit der rechten Maustaste auf die Stelle klicken, auf die Sie gerade klicken, um Anwendungen zu starten, und nach einer Auswahl zum Erstellen eines neuen Startprogramms suchen, ist dies ein guter Anfang .
Erstellen Sie ein separates Benutzerkonto mit einem BASIC-Interpreter als Shell
Dies ist etwas aufwändiger als ein einfacher Desktop-Launcher, bietet jedoch eine bessere Isolation, sodass Sie nicht riskieren, Ihre eigenen Dateien durcheinander zu bringen. Installieren Sie zunächst einen BASIC-Interpreter. Ich werde
bwbasic
für das Beispiel verwenden, aber alles geht, wirklich, solange es nativ in einem Terminal läuft. Fügen Sie dann einen Benutzer hinzu und legen Sie dessen Shell als bwbasic-Interpreter fest. Dies kann über die grafische Benutzeroberfläche erfolgen. Dies hängt jedoch von der verwendeten Desktop-Umgebung ab. Der tragbare Ansatz besteht darin, dies in einem Terminal unter Verwendung vonuseradd
. Dies wird etwas ähnliches seinDann sollten Sie in der Lage sein, über sudo eine saubere BASIC-Umgebung aufzurufen:
Sie können einen Starter (wie oben) erstellen, der diesen Befehl in einem Terminal ausführt, wenn Sie möchten.
Geben Sie Ihr normales Passwort ein, wenn Sie von sudo dazu aufgefordert werden. Sie können die sudoers-Konfiguration bearbeiten, um die Kennworteingabeaufforderung bei Bedarf zu vermeiden. Beachten Sie jedoch, dass das Bearbeiten von sudoers etwas kompliziert und vor allem riskant ist. Sie könnten sich aus dem Root-Konto ausschließen, was die Reparatur der Konfiguration ziemlich schwierig macht.
Verwenden Sie einen BASIC-Interpreter als Init
Dies ist der invasivste Ansatz, bringt Sie aber auch der Funktionsweise früherer Mikrocomputer am nächsten, indem Sie direkt in einen BASIC-Interpreter booten. Ich empfehle dies nicht und halte es für unwahrscheinlich, dass es ohne nennenswerte Arbeit funktioniert, schließe es jedoch der Vollständigkeit halber ein.
Der Linux-Kernel akzeptiert einen Befehlszeilenparameter (ja, der Linux-Kernel verfügt über Befehlszeilenparameter; Sie können die aktuell gebootete Befehlszeile durch Lesen von / proc / cmdline anzeigen)
init
, der angibt, welches Programm ausgeführt werden soll, sobald die Kernel-Initialisierung abgeschlossen ist. Sie können den Bootloader (höchstwahrscheinlich GRUB) so konfigurieren, dass Sie einen Kerneleintrag booten können, der angibt, dass dies derinit
Fall sein soll/usr/bin/bwbasic
(oder welcher andere installierte BASIC-Interpreter auch immer).Damit dies funktioniert, müssen sich der BASIC-Interpreter sowie alle erforderlichen Dateien im root (
/
) -Dateisystem befinden. Dies liegt daran, dass eine der Aufgaben von init darin besteht, alle Dateisysteme bereitzustellen, und dass die Nicht-Root-Dateisysteme nicht bereitgestellt wurden, weil Sie ein Nicht-Init-Programm als Init bereitstellen. (Ich glaube, eine weitere Aufgabe von init besteht darin, das Root-Dateisystem im Lese- / Schreibmodus erneut bereitzustellen, sodass Sie aufgrund des trivialen Ansatzes nichts speichern können. Abhängig von den genauen Implementierungsdetails ist dies jedoch möglich lass das system sowas ausführenmount -o remount,rw /
Zum erneuten Einhängen des Root-Dateisystems mit Lese- und Schreibzugriff.) Der von Ihnen gewählte BASIC-Interpreter darf auch nicht von etwas anderem abhängig sein, für das init verantwortlich ist, und Sie haben keinen Zugriff auf Funktionen, die von init oder von init (z. B.) hervorgerufenen Prozessen ausgeführt werden , Netzwerk- oder Mehrbenutzerunterstützung).Eine Kernel-Kommandozeile von so etwas
ro quiet init=/usr/bin/bwbasic
wird Sie wahrscheinlich in die Nähe bringen, wie es früher ausgesehen hat.quelle
sudo echo
tut nicht das, was Sie meinen, und es ist wahrscheinlich, dass Sie-bash: /etc/shells: Permission denied
trotzdem auf eine stoßen, da die>>
Umleitung von bash eingerichtet wird, bevor der Rest des Befehls ausgewertet wird. Es ist wahrscheinlich am besten,type -P bwbasic | sudo tee -a /etc/shells
stattdessen zu verwenden . Siehe " Berechtigungen - So fügen Sie Text mit sudo in eine Root-Datei ein? - Unix & Linux Stack Exchangeinit
wäre, das Init-System so zu konfigurieren, dass esbwbasic
anstelleagetty
eines X11-Display-Managers verwendet und nicht gestartet wird. (Für andere, die nicht wissen, wovon ich spreche, stellt der Kernel verschiedene "virtuelle Konsolen" zur Verfügung, die über Strg + Alt + F1 bis Strg + Alt + F12 zugänglich sind, und das Init-System startet standardmäßigagetty
mit 1 bis 6 und ein X11-Display-Manager (der ein Anmeldedialogfeld bereitstellt) unter 7. Vor Upstart und systemd wurde dies über gesteuert/etc/inittab
.)getty
und seine Nachkommen verarbeiten Anmeldeaufforderungen für die Konsole.Nur um eine Alternative zu werfen: es mehrere Emulatoren für Linux sind , die können laufen Ihre alten Computer. Wenn Sie beispielsweise mit xkegs booten, sollte eine AppleSoft-Eingabeaufforderung auf Sie warten. Die Kommunikation mit anderem Linux - Zeug ist eine Übung des Leser überlassen (Hinweis: technisch, ich glaube , Sie Ausgabe in Ihrem emulierten Apfel auf den emulierten Drucker umleiten können, die xkegs wird dann als Netzwerk - Socket zu , die Sie zum Beispiel benutzen können nc zu Einspeisung in Einige andere Piping-Anwendungen usw. Sie sind sich nicht sicher, ob es einen anderen Weg gibt. Ich würde erwarten, dass die Commodore 64-Emulatoren auf ähnliche Weise Commodore Basic usw. ausführen können.
quelle
kegs
anscheinend keiner von ihnen (keinapt-cache search
Ergebnis). Und für einige / die meisten Emulatoren benötigen Sie wahrscheinlich irgendwo ein Original-ROM.init=/usr/bin/sdlbasic
den Linux-Kernel übergeben, was Sie , wenn es funktioniert , viel näher bringt, aber es kann funktionieren oder auch nicht.Es gibt viele Alternativen. Mein Vorschlag ähnelt der Antwort von ssokolow. Wenn Sie ein "modernes" BASIC wollen, aber eine ähnliche Syntax wie die alten BASIC-Interpreter haben, sollten Sie es mit BaCon versuchen. Es ist ein BASIC-Transpiler, der nativen Code generiert. Das Projekt hat ein ziemlich gutes Handbuch, viele Bibliotheken und Beispiele und sogar eine in BaCon geschriebene IDE.
quelle
Sie können einen C64 in Ihrem Browser ausführen und auf diese Weise BASIC verwenden.
http://codeazur.com.br/stuff/fc64_final/
Beachten Sie, dass das Tastaturlayout anders ist, Shift-2z. B. für Anführungszeichen.
http://jilltxt.net/wp-content/uploads/C64-keyboard-layout.png
Wenn Sie Applesoft BASIC bevorzugen, http://calormen.com/jsbasic/
Es sind Emulatoren anderer Computer online,
aber viele von ihnen gehen direkt zu dem Programm, das Sie laden,
ohne die anfängliche Tastatureingabe zu emulieren, die erforderlich ist, um dorthin zu gelangen.
quelle