Come posso eseguire il codice BASIC in un terminale?


20

Vorrei eseguire il codice BASIC, come facevi su computer più vecchi, in Linux. (Sto cercando un interruttore BASIC in grado di eseguire le funzioni del sistema operativo in modo nativo)

Quali opzioni ho? (Preferibilmente per Debian e Arch)


2
Esistono molte versioni (non proprio compatibili) di base.
Thomas Dickey,

2
@ThomasDickey Ho messo Debian nella domanda, dato che ha / aveva un tag Debian.
Rui F Ribeiro,

Risposte:


24

Se vuoi eseguire nativamente in Linux BASIC hai diversi pacchetti in Debian tra cui scegliere:

  • brandy - compatibile BBC Micro BASIC - funziona con un'interfaccia grafica X11, supporta in modo adeguato audio e grafica;

Brandy è un interprete di BBC BASIC V, il dialetto di BASIC che Acorn Computers ha fornito con le loro gamme di computer desktop che utilizzano il processore ARM come Archimedes e Risc PC, ed è ancora in uso su questi e compatibili.

   BASIC V is a much extended version of BBC BASIC. 

Questo era il BASIC utilizzato sulla BBC Micro basata su 6502 prodotta da Acorn negli anni '80.

  • bwbasic - byWater BASIC - modalità testo, afferma di essere compatibile ANSI, ha estensioni compatibili con le shell e afferma di essere in grado di emulare / avere una buona compatibilità con diversi tipi di "vecchi" dialetti BASIC - inclusi IBM BASICA, Microsoft BASIC e gwBASIC.

bwBASIC può essere configurato per emulare caratteristiche, comandi e funzioni disponibili su diversi tipi di interpreti BASIC;

bwBASIC implementa una funzione non disponibile nei precedenti interpreti BASIC: un comando shell può essere inserito in modo interattivo al prompt bwBASIC e l'interprete lo eseguirà sotto una shell comandi.
Ad esempio, il comando "dir * .bas" può essere inserito in bwBASIC (sotto DOS o "ls -l * .bas" sotto UNIX) e verrà eseguito dalla riga di comando del sistema operativo.

I comandi di shell possono anche essere dati su righe numerate in un programma bwBASIC, in modo che bwBASIC possa essere usato come linguaggio di programmazione della shell. L'implementazione di bwBASIC dei comandi e delle funzioni RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON e ENVIRON $ () offre ulteriori capacità di elaborazione della shell.

Per installarli:

sudo apt-get install brandy bwbasic

Per quanto riguarda la mia esperienza personale, preferisco bwbasicin quanto consente di avere il potere di BASIC in una riga di comando di testo o in uno script di shell.

In alternativa, hai anche diversi pacchetti di emulazione di computer del vecchio, che ovviamente oltre alla sintassi BASIC implementano tutto l'ambiente di un vecchio computer che potresti voler rivivere.

È interessante notare che, bwbasicin teoria, potrebbe consentire l'automazione delle operazioni in Unix, ad esempio la costruzione di script utilizzando il linguaggio BASIC. Non l'ho mai provato però.


9

I miei sistemi Debian, e probabilmente la maggior parte delle altre distribuzioni Linux, hanno diverse opzioni disponibili direttamente tramite il gestore pacchetti. Tra loro:

  • bwbasic:

L'interprete BASIC Bywater (bwBASIC) implementa un ampio superset dello standard ANSI per il BASIC minimo (X3.60-1978) e un sottogruppo significativo dello standard ANSI per il BASIC completo (X3.113-1987) in C. Offre anche shell strutture di programmazione come estensione di BASIC. bwBASIC cerca di essere il più portatile possibile.

  • sdlbasic:

sdlBasic è un interprete BASIC piccolo, efficiente e multipiattaforma per la creazione di giochi sfruttando la potenza della libreria SDL. È stato ispirato dal vecchio e glorioso AMOS.

Homepage (Guida di riferimento)

Wikipedia


8

Poiché tutti sembrano supporre che tu intenda "PC pre-IBM" per "computer più vecchi", vado sull'altra strada e offrirò una risposta che interpreta "computer più vecchi" nel senso di "compatibili IBM prima di Windows 9x".

Se, intendevi i computer che eseguono versioni di MS-DOS che includevano QBASIC.EXE, hai tre opzioni, a seconda di quanto strettamente definisci eseguirle "su Linux":

  1. Se hai ancora una copia di QBASIC.EXEkicking around, potresti usare DOSBox o DOSEMU per eseguirlo in un ambiente DOS virtualizzato. (Entrambi sono disponibili nei repository di Debian e sono semplici da configurare. Basta impostare una cartella da montare come C:, rilasciarla QBASIC.EXEe il gioco è fatto.)

    Ciò ti darà una perfetta compatibilità con il vecchio codice sorgente, ma nessuna integrazione con il sistema operativo host oltre " C:è in realtà una cartella, piuttosto che un'immagine del disco".

    Dovrei chiarire, tuttavia, che esiste un compromesso tra i due. DOSEMU funzionerà in qualunque terminale tu voglia, ma non supporterà i trucchi di basso livello di alcune cose di QBasic usate (es. Per modalità grafiche specializzate). L' unico modo per supportare questo è un emulatore completo come DOSBox ... ma DOSBox aprirà la sua finestra invece di usare il tuo terminale.

  2. FreeBASIC ha un qbdialetto / modalità che mira alla perfetta compatibilità con un ampio sottoinsieme di QuickBASIC. (Le cose non supportate sono principalmente cose di basso livello legate al fatto che QuickBASIC era un sistema in modalità reale a 16 bit mentre FreeBASIC è un sistema in modalità protetta a 32 bit.)

    FreeBASIC offre binari Linux, ma lo troverai nel repository dei pacchetti solo se in realtà intendevi "distribuzioni della famiglia Debian" anziché "Debian" e se esegui Ubuntu o un derivato di Ubuntu come Mint.

  3. Le build Linux di QB64 non sono nemmeno nei repository Ubuntu, ma mirano specificamente a essere il discendente QuickBASIC in modalità protetta più compatibile e forniscono persino un IDE che tenta di clonare l'IDE QBasic / QuickBasic.


8

Hai scritto in un commento alla risposta di Foon che

Quello che intendo per "come i vecchi computer" è che è proprio lì

Altri hanno fornito diversi suggerimenti per gli interpreti BASIC che potresti installare su un sistema Linux, quindi non ci andrò. I PC moderni in genere non sono dotati di interpreti BASIC integrati, quindi sei bloccato ad avviare qualcosa che può eseguire un interprete BASIC installato.

Piuttosto, prenderò quanto sopra per significare che vuoi qualcosa che avvii automaticamente un interprete BASIC, simile ma non del tutto simile ai primi microcomputer (come Apple II, Commodore C-64, Zinclair ZX-81 e loro simili ) avviato in un interprete BASIC nativo.

Ci sono fondamentalmente tre modi per farlo che mi viene in mente:

Crea un programma di avvio desktop che apre un terminale

Questo è il meno invasivo, perché funziona completamente all'interno del sistema e dell'ambiente a cui sei abituato.

Fondamentalmente, attraverso qualsiasi mezzo fornito dall'ambiente desktop, si crea un programma di avvio e lo si imposta per avviare l'interprete BASIC di propria scelta in un terminale. Per un effetto extra, è possibile impostare caratteri, colori, ecc. Specifici per simulare un ambiente di altri tempi. Esattamente come lo faresti dipende dall'ambiente desktop che stai utilizzando, che non hai specificato, ma fare clic con il pulsante destro del mouse sul punto in cui si sta facendo clic per avviare le applicazioni e cercare una scelta per creare un nuovo lanciatore sarà un buon inizio .

Creare un account utente separato con un interprete BASIC come shell

Questo è un po 'più complicato di un semplice desktop launcher, ma i provider offrono un migliore isolamento in modo da non rischiare di rovinare i tuoi file. Innanzitutto, installa un interprete BASIC; Userò bwbasicper l'esempio, ma tutto va davvero, purché funzioni nativamente in un terminale. Quindi aggiungi un utente e imposta la sua shell come interprete bwbasic. Questo può essere fatto tramite la GUI, ma dipende dall'ambiente desktop in uso; l'approccio portatile è quello di farlo in un terminale usando useradd. Questo sarà qualcosa di simile a

$ 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

Quindi, dovresti essere in grado di entrare in un ambiente BASIC pulito tramite sudo:

$ sudo -i -u basic

È possibile creare un launcher (come sopra) che esegue questo comando in un terminale, se lo si desidera.

Fornisci la tua password normale quando richiesto da sudo. È possibile modificare la configurazione dei sudoers per evitare la richiesta della password, se si desidera, ma tenere presente che la modifica dei sudoers è alquanto complicata e ancor più rischiosa; potresti bloccarti fuori dall'account di root, rendendo abbastanza difficile riparare la configurazione.

Utilizzare un interprete BASIC come init

Questo è l'approccio più invasivo, ma ti avvicina anche a come funzionavano i primi microcomputer, avviando direttamente in un interprete BASIC. Non lo consiglio, e considero improbabile che funzioni senza un lavoro significativo, ma lo sto includendo per completezza.

Il kernel Linux accetta un parametro della riga di comando (sì, il kernel Linux ha i parametri della riga di comando; puoi vedere la riga di comando attualmente avviata leggendo da / proc / cmdline) init, che specifica quale programma eseguire una volta completata l'inizializzazione del kernel. Puoi configurare il boot loader (molto probabilmente GRUB) per permetterti di avviare una voce del kernel che dice che initdovrebbe essere /usr/bin/bwbasic(o qualunque altro interprete BASIC che hai installato).

Perché ciò funzioni, l'interprete BASIC, così come tutti i file necessari, deve trovarsi nel /file system root ( ). Questo perché una delle attività di init è montare tutti i file system e poiché si sta fornendo un programma non init come init, i file system non root non saranno stati montati. (Credo che un altro dei compiti di init sia quello di rimontare il file system di root in modalità lettura-scrittura, quindi con l'approccio banale non sarai in grado di salvare nulla. Tuttavia, a seconda degli esatti dettagli di implementazione, potresti essere in grado di chiedi al sistema di eseguire qualcosa del generemount -o remount,rw / per rimontare il file system root read-write.) L'interprete BASIC scelto non deve dipendere da nient'altro di cui init è responsabile e non si avrà accesso a nessuna struttura gestita da init o da alcun processo generato da init (ad esempio , rete o supporto multiutente).

Una riga di comando del kernel di qualcosa del genere ro quiet init=/usr/bin/bwbasicti porterà probabilmente molto vicino a come appariva ai vecchi tempi.



L'uso di sudo echonon fa ciò che intendi e probabilmente ti imbatterai -bash: /etc/shells: Permission deniedcomunque in quanto il >>reindirizzamento viene impostato da bash prima che il resto del comando venga valutato. Probabilmente è meglio usare type -P bwbasic | sudo tee -a /etc/shellsinvece. Vedi " permessi - Come inserire testo in un file di proprietà root usando sudo? - Scambio di stack Unix e Linux
shalomb

@shalomb Un buon punto, grazie per averlo menzionato. L'ho risolto, ma in un modo un po 'diverso.
un CVn il

1
@ MichaelKjörling Un'alternativa meno drastica all'utilizzo di un interprete BASIC come initsarebbe configurare il sistema init da usare al bwbasicposto di agettye non avviare un display manager X11. (Per gli altri che non sanno di cosa sto parlando, il kernel fornisce varie "console virtuali" accessibili via Ctrl + Alt + F1 tramite Ctrl + Alt + F12 e il sistema init, di default, inizia agettyda 1 a 6 e un X11 Display Manager (che fornisce una finestra di dialogo di accesso) su 7. Prima di Upstart e systemd, questo era controllato tramite /etc/inittab.) gettye i suoi discendenti gestiscono i prompt di accesso alla console.
ssokolow,

@ssokolow Buona idea per completezza, ma a quel punto sei solo un passo avanti rispetto a un account utente dedicato con una shell bwbasic, quindi non penso che aggiunga molto in termini di varietà complessiva.
un CVn il

4

Solo per lanciare un'alternativa: ci sono più emulatori per Linux che possono far funzionare i tuoi vecchi computer. Ad esempio, con xkegs, se lo avvii, dovresti avere un prompt di base di appleoft che ti aspetta. Comunicare con altre cose di Linux è un esercizio lasciato al lettore (suggerimento: tecnicamente, credo che tu possa reindirizzare l'output nella tua mela emulata alla stampante emulata, che xkegs esporrà quindi come socket di rete che puoi usare ad esempio nc per alimentare alcune altre applicazioni collegate ecc. Non sono sicuro che ci sia un modo per fare diversamente, ma aspettatevi che si possa fare qualcosa di simile). Mi sarei aspettato che gli emulatori del commodore 64 avrebbero similmente un modo per eseguire il commodore di base, ecc.


Sì, ci sono molti emulatori facilmente installabili in Debian, ma kegsnon sembra essere uno di questi (nessun apt-cache searchrisultato). E per alcuni / la maggior parte degli emulatori, probabilmente avrai bisogno di ottenere una ROM originale da qualche parte.
Alex Stragies,

Potresti anche modificare la tua risposta per fare riferimento a un emulatore, che può essere eseguito in un terminale (OP ha modificato Q qualche volta in passato)
Alex Stragies


Quello che intendo per "come i vecchi computer" è che è proprio lì
DiamondCoderMan,

1
@DiamondCoderMan Potresti creare un account utente che usa qualcosa come bwbasic, brandy o sdlbasic come shell, anziché bash. Su Linux, questo è probabilmente il più vicino che potresti praticamente ottenere a un sistema che funziona come vecchi microcomputer che si sono avviati in un interprete BASIC. Si potrebbe passare anche qualcosa di simile init=/usr/bin/sdlbasical kernel Linux, che se funziona ti porterà molto più vicino, ma può o non può lavorare.
un CVn

1

Ci sono molte alternative. Il mio suggerimento è simile alla risposta di ssokolow. Se vuoi un BASIC "moderno" ma con una sintassi simile ai vecchi interpreti BASIC, allora dovresti provare BaCon . È un transpiler BASIC che genera codice nativo. Il progetto ha un manuale abbastanza buono, molte librerie ed esempi e persino un IDE scritto in BaCon.

inserisci qui la descrizione dell'immagine


Ma questo non è per il terminale
DiamondCoderMan

Il transpiler funziona nel terminale. È piccolo e utilizza un compilatore C per compilare l'eseguibile. L'IDE è stato solo un esempio di quanto sia potente il progetto.
Rufo El Magufo,

-2

È possibile eseguire un C64 nel browser e utilizzare BASIC in questo modo.

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

Tenere presente che il layout della tastiera è diverso, ovvero Shift-2per le virgolette.

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

Applesoft BASIC se preferisci- http://calormen.com/jsbasic/

Ci sono emulatori di altre macchine online,
ma molti di loro vanno direttamente a qualunque programma carichi,
senza emulare l'input iniziale da tastiera richiesto per arrivarci.


1
Come è "in un terminale" se lo stai eseguendo in un emulatore di browser web basato su JavaScript?
Wyatt8740,

3
La parte "in un terminale" è nel titolo della domanda
roaima,

1
@ Doyousketch2 Guarda il titolo un po 'più attentamente. i.imgur.com/jDBZVEO.png
Wyatt8740,

1
Era persino nel primo titolo di revisione, che diceva Come eseguire il codice BASIC in un terminale BASH?
un CVn

2
Se si tratta di un software pensato per un C64 o un altro sistema a 8 bit, emulare un'intera macchina è davvero la migliore idea - pochissimi programmi di base non banali di quell'epoca pretendono addirittura di essere indipendenti dall'hardware in ogni caso!
rackandboneman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.