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)
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)
Risposte:
Se vuoi eseguire nativamente in Linux BASIC hai diversi pacchetti in Debian tra cui scegliere:
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 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 bwbasic
in 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, bwbasic
in 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ò.
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.
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":
Se hai ancora una copia di QBASIC.EXE
kicking 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.EXE
e 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.
FreeBASIC ha un qb
dialetto / 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.
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.
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:
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 .
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ò bwbasic
per 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.
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 init
dovrebbe 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/bwbasic
ti porterà probabilmente molto vicino a come appariva ai vecchi tempi.
sudo echo
non fa ciò che intendi e probabilmente ti imbatterai -bash: /etc/shells: Permission denied
comunque 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/shells
invece. Vedi " permessi - Come inserire testo in un file di proprietà root usando sudo? - Scambio di stack Unix e Linux
init
sarebbe configurare il sistema init da usare al bwbasic
posto di agetty
e 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 agetty
da 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
.) getty
e i suoi discendenti gestiscono i prompt di accesso alla console.
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.
kegs
non sembra essere uno di questi (nessun apt-cache search
risultato). E per alcuni / la maggior parte degli emulatori, probabilmente avrai bisogno di ottenere una ROM originale da qualche parte.
init=/usr/bin/sdlbasic
al kernel Linux, che se funziona ti porterà molto più vicino, ma può o non può lavorare.
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.
È 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.