¿Cómo puedo ejecutar el código BASIC en una terminal?

Me gustaría ejecutar código BASIC, como solía hacerlo en computadoras más antiguas, en Linux. (Estoy buscando un Interruptor BÁSICO que pueda ejecutar funciones del sistema operativo de forma nativa)

¿Que opciones tengo? (Preferiblemente para basado en Debian y basado en Arch)

Si desea ejecutar de forma nativa en Linux BASIC, tiene varios packages en Debian para elegir:

  • brandy – compatible con BBC Micro BASIC – funciona en una interfaz gráfica X11, aparentemente admite sonido y charts;

Brandy es un intérprete para BBC BASIC V, el dialecto de BASIC que Acorn Computers suministró con sus gamas de computadoras de escritorio que usan el procesador ARM como, por ejemplo, Archimedes y Risc PC, y que todavía se usa en estos y compatibles.

BASIC V is a much extended version of BBC BASIC. 

Este fue el BASIC utilizado en la BBC Micro 6502-based que Acorn hizo durante la década de 1980.

  • bwbasic – byWater BASIC – modo de text, afirma ser ANSI compatible, tiene extensiones de shells aware, y afirma ser capaz de emular / tener buena compatibilidad con varios types de dialectos BASIC "antiguos", incluidos IBM BASICA, Microsoft BASIC y gwBASIC.

bwBASIC se puede configurar para emular características, commands y funciones disponibles en diferentes types de intérpretes BÁSICOS;

bwBASIC implementa una function que no está disponible en los intérpretes anteriores de BASIC: un command de shell se puede ingresar de forma interactiva en el prompt bwBASIC, y el intérprete lo ejecutará bajo un shell de command.
Por ejemplo, el command "dir * .bas" se puede ingresar en bwBASIC (bajo DOS, o "ls -l * .bas" bajo UNIX) y se ejecutará desde la línea de command del sistema operativo.

Los commands de Shell también se pueden dar en líneas numeradas en un progtwig bwBASIC, de modo que bwBASIC se pueda usar como un lenguaje de progtwigción de shell. La implementación de bwBASIC de los commands y funciones RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON y ENVIRON $ () ofrecen más capacidades de procesamiento de shell.

Para instalarlos:

 sudo apt-get install brandy bwbasic 

En cuanto a mi experiencia personal, prefiero bwbasic ya que permite tener el poder de BASIC en una línea de command de text o script de shell.

Como alternativa, también tiene varios packages de emulación de computadoras de la vieja, que obviamente además de la syntax BÁSICA implementan todo el entorno de alguna computadora vieja que quizás quiera revivir.

Curiosamente, bwbasic en teoría podría permitir la automation de operaciones en Unix, por ejemplo, build scripts utilizando el lenguaje BASIC. Nunca lo intenté sin embargo.

Mis sistemas Debian, y probablemente la mayoría de las otras distribuciones de Linux, tienen varias opciones disponibles directamente a través del administrador de packages. Entre ellos:

  • bwbasic :

El intérprete de Bywater BASIC (bwBASIC) implementa un gran superset del estándar ANSI para mínimo básico (X3.60-1978) y un subset significativo del estándar ANSI para Full BASIC (X3.113-1987) en C. También ofrece shell las instalaciones de progtwigción como una extensión de BASIC. bwBASIC busca ser lo más portátil posible.

  • sdlbasic :

sdlBasic es un intérprete BASIC pequeño, eficiente y multiplataforma para crear juegos utilizando la potencia de la biblioteca SDL. Fue inspirado por el viejo y glorioso AMOS.

Página de inicio (Guía de reference)

Wikipedia

Como todo el mundo parece estar asumiendo que quiere decir "PC pre-IBM" por "computadoras antiguas", voy a tomar la otra ruta y ofrecer una respuesta que interprete que "computadoras viejas" significan "compatibles con IBM antes de Windows 9x".

Si se refiere a computadoras que ejecutan versiones de MS-DOS que incluyen QBASIC.EXE , tiene tres opciones, dependiendo de cuán estrictamente defina ejecutarlas "en Linux":

  1. Si aún tiene una copy de QBASIC.EXE dando vueltas, podría usar DOSBox o DOSEMU para ejecutarlo en un entorno de DOS virtualizado. (Ambos están disponibles en los repositorys de Debian y son fáciles de configurar. Simplemente configure una carpeta para que se QBASIC.EXE como C: coloque QBASIC.EXE en ella y QBASIC.EXE listo).

    Eso le dará una compatibilidad perfecta con el código fuente anterior, pero ninguna integración con el sistema operativo anfitrión más allá de " C: es en realidad una carpeta, en lugar de una image de disco".

    Debo aclarar, sin embargo, que hay una compensación entre los dos. DOSEMU se ejecutará en el terminal que desee, pero no admitirá los trucos de bajo nivel de algunos elementos de QBasic utilizados (por ejemplo, para modos de charts especializados). La única forma de admitir eso es un emulador completo como DOSBox … pero DOSBox abrirá su propia window en lugar de usar su terminal.

  2. FreeBASIC tiene un dialecto / modo qb que busca la compatibilidad perfecta con un gran subset de QuickBASIC. (Las cosas no compatibles son en su mayoría de bajo nivel relacionadas con el hecho de que QuickBASIC era un sistema en modo real de 16 bits, mientras que FreeBASIC es un sistema de modo protegido de 32 bits).

    FreeBASIC ofrece binarys de Linux, pero solo lo encontrará en el repository de packages si realmente quiere decir "distribuciones de la familia Debian" en lugar de "Debian" y está ejecutando Ubuntu o un derivado de Ubuntu como Mint.

  3. Las comstackciones de Linux de QB64 ni siquiera están en los repositorys de Ubuntu, pero apunta específicamente a ser el descendiente QuickBASIC de modo protegido más compatible e incluso proporciona un IDE que intenta clonar el IDE de QBasic / QuickBasic.

Usted escribió en un comentario a la respuesta de Foon que

Lo que quiero decir con "como computadoras viejas" es que está ahí

Otros han proporcionado varias sugerencias diferentes para intérpretes BASIC que puede instalar en un sistema Linux, por lo que no iré allí. Las PC modernas generalmente no vienen con intérpretes BASIC integrados, por lo que está atascado al arrancar algo que puede ejecutar un intérprete BASIC instalado.

Más bien, tomaré lo anterior en el sentido de que quieres algo que inicie automáticamente un intérprete BÁSICO, similar pero no del todo a cómo los primeros microcomputadores (como el Apple II, el Commodore C-64, Zinclair ZX-81 y los de su class ) arrancado en un intérprete BASIC nativo.

Básicamente, hay tres forms de hacer esto que puedo pensar:

Crea un iniciador de escritorio que abre una terminal

Este es el less invasivo, porque funciona completamente dentro del sistema y el entorno al que está acostumbrado.

Básicamente, a través de cualquier medio que proporcione su entorno de escritorio, cree un iniciador de progtwig y configúrelo para ejecutar el intérprete BASIC de su elección en un terminal. Para un efecto adicional, puede establecer fonts, colors, etc. específicos para simular un entorno de días pasados. Exactamente cómo lo haría depende del entorno de escritorio que está utilizando, que no ha especificado, pero haciendo clic derecho en donde está haciendo clic actualmente para iniciar aplicaciones y buscando una opción para crear un nuevo iniciador será un buen comienzo .

Cree una count de usuario separada con un intérprete BASIC como shell

Esto es un poco más complicado que un simple iniciador de escritorio, pero provee un mejor aislamiento para que no se arriesgue a arruinar sus propios files. Primero, instale un intérprete BÁSICO; bwbasic para el ejemplo, pero todo vale, en realidad, siempre y cuando se ejecute de forma nativa en un terminal. A continuación, agregue un usuario y configure su shell para que sea el intérprete bwbasic. Esto se puede hacer a través de la GUI, pero eso depende del entorno de escritorio que esté utilizando; el enfoque portátil es hacerlo en una terminal usando useradd . Esto será algo similar 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 

Luego, debería poder ingresar a un entorno BASIC limpio a través de sudo:

 $ sudo -i -u basic 

Puede crear un iniciador (como el anterior) que ejecuta este command en un terminal, si lo desea.

Proporcione su contraseña normal cuando sudo lo pida. Puede editar la configuration de sudoers para evitar la request de contraseña si así lo desea, pero tenga en count que la edición de sudoers es algo complicada y más arriesgada; puede bloquearlo fuera de la count raíz, lo que dificulta la reparación de la configuration.

Use un intérprete BÁSICO como init

Este es el enfoque más invasivo, pero también lo acerca más a lo temprano que funcionó la microcomputadora, al arrancar directamente en un intérprete BÁSICO. No lo recomiendo, y consideraría que es poco probable que funcione sin un trabajo importante, pero lo incluyo para completarlo.

El kernel de Linux acepta un parámetro de línea de command (sí, el kernel de Linux tiene parameters de command-line; puede ver la línea de command actualmente arrancada leyendo / proc / cmdline) llamada init , que especifica qué progtwig ejecutar una vez que se completa la initialization del kernel. Puede configurar el gestor de arranque (probablemente GRUB) para que pueda iniciar una input del kernel que /usr/bin/bwbasic que init debe ser /usr/bin/bwbasic (o cualquier otro intérprete BASIC que haya instalado).

Para que esto funcione, el intérprete de BASIC, así como todos los files que requiere, deben estar ubicados en el sistema de files raíz ( / ). Esto se debe a que una de las tareas de init es montar todos los filesystems, y dado que está proporcionando un progtwig que no es init como init, los filesystems no raíz no se habrán montado. (Creo que otra de las tareas de init es volver a montar el sistema de files raíz en modo de lectura-escritura, por lo que mediante el enfoque trivial no podrá save nada. Sin embargo, dependiendo de los detalles exactos de implementación, podrá haga que el sistema ejecute algo como mount -o remount,rw / para volver a montar el sistema de files raíz de lectura-escritura.) El intérprete BASIC elegido tampoco debe depender de nada más de lo que init sea responsable, y no tendrá acceso a ninguna installation manejado por init o por cualquier process generado por init (por ejemplo, networkinges o soporte multiusuario).

Una command-line del núcleo de algo así como ro quiet init=/usr/bin/bwbasic probablemente te ro quiet init=/usr/bin/bwbasic bastante a cómo se veía en los viejos times.

Solo para arrojar una alternativa: hay varios emuladores para Linux que pueden ejecutar sus computadoras viejas. Como ejemplo, con xkegs, si lo inicia, debe tener un prompt básico de AppleSoft esperando por usted. Comunicarse con otras cosas de Linux es un ejercicio dejado al lector (pista: técnicamente, creo que puede networkingirigir la salida en su manzana emulada a la impresora emulada, que xkegs expondrá luego como un socket de networking que puede usar, por ejemplo, nc para alimentar algunas otras aplicaciones por cable, etc. No estoy seguro si hay una manera de ir para el otro lado, pero espero que se pueda hacer algo similar). Yo esperaría que los emuladores del comodoro 64 tuvieran una manera similar de ejecutar los básicos del comodoro, etc.

Hay muchas alternativas. Mi sugerencia es similar a la respuesta de ssokolow. Si quiere un BASIC "moderno" pero con una syntax similar a los antiguos intérpretes BASIC, entonces debería darle una oportunidad a BaCon . Es un transpiler BASIC que genera código nativo. El proyecto tiene un manual bastante bueno, muchas bibliotecas y ejemplos, e incluso un IDE escrito en BaCon.

enter image description here

Puede ejecutar un C64 en su browser y usar BASIC de esa manera.

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

Tenga en count que el layout del keyboard es diferente, es decir, Shift-2 para las comillas.

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

Applesoft BASIC si lo prefiere- http://calormen.com/jsbasic/

Hay emuladores de otras máquinas en línea,
pero muchos de ellos van directamente a cualquier progtwig que cargues,
sin emular la input de keyboard inicial requerida para llegar allí.