Intérprete de Dartmouth BASIC

dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Intérprete de Dartmouth BASIC

Mensajepor dancresp » 04 Feb 2012 00:46

Dartmouth BASIC

El BASIC, cuyas siglas significan Beginner's All-purpose Symbolic Instruction Code, es un lenguaje de programación de alto nivel. El BASIC original, el Dartmouth BASIC, fue diseñado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College en New Hampshire, Estados Unidos, como la intención de facilitar la programación de computadoras a estudiantes y profesores. Se empezó a usar en el Dartmouth Time Sharing System (DTSS) (Sistema de tiempo compartido de Dartmouth), que era un sistema que permitían compartir el uso por varios procesos simultáneamente.

Imagen

El DTSS implementó un temprano entorno de desarrollo integrado (IDE): una interface de línea de comandos interactiva. No había necesidad de logout. Si los usuarios no respondían, eran loged out después de un corto retardo.

Cualquier línea mecanografiada por el usuario, y que comenzaba por un número de línea, era añadida al programa, reemplazando cualquier línea previamente almacenada en el mismo número; todo lo demás fue asumido que era un comando del DTSS y era ejecutado inmediatamente. Las líneas que solo consistían en un número de línea no eran almacenadas sino que removían cualquier línea previamente almacenada con el mismo número. Este método de editar era necesario debido al uso de los teleimpresoras de teletipo, como las unidades de terminales del Dartmouth timesharing system.

El teletipo ASR33 es un terminal impresora electromecánica que dispone de un dispositivo de almacenamiento en papel usado por el sistema PDP-8. Se fabricó entre los años 1965 y 1976, y tenían un coste de unos 1300$ de la época. Utiliza rollos de papel de 72 caracteres y 10 líneas por pulgada. Su juego de caracteres está en un tambor, lo que lo limita a mayúsculas, números y los principales símbolos. El lector/grabador en cinta de papel usa 8 bits de datos
binarios. La velocidad de transferencia con el servidor era mediante RS-232 a 110 baudios, unos 10 caracteres por segundo. Era lento y ruidoso, y posteriormente fue reemplazado por terminales con impresoras de agujas como la DECwriter II y terminales de video de la familia DEC VT, como los VT52 y VT100.

Imagen



EL PROYECTO
Siempre me ha gustado saber que se debía sentir al programar en sistemas realmente antiguos y con sus correspondientes limitaciones, que eran muchas.

Encontré un PDF en internet que era un escanéo de un manual de BASIC de octubre del 1964. Me hizo gracia lo limitada que era esta primera versión de BASIC, compuesto únicamente de 15 comandos y donde no está disponible ni el popular "INPUT", y todos sus valores debían ser entrados préviamente mediante comandos "DATA". También me llamó la atención la especie de "sistema operativo" que lleva incorporado para gestionar los programas (problemas según el manual) que introducimos.

En mi visita al museo mNACTEC de Terrassa (Barcelona) hay una excelente colección de sistemas informáticos previos a los años 80, y viendo las terminales de los operarios traté de imaginar como sería programar con ellos versiones del BASIC antiguo, entre otras cosas.

Así que decidí intentar simular sus condiciones programando una versión de este BASIC para PC, pero con las características que indica el manual:

1) Todos los resultados se presentan como si se estuvieran imprimiendo en un teletipo.
2) Los ceros aparecen como la letra O, y la letra O aparece como un cero. Curioso, y lo he respetado.
3) No se permite la edición de líneas.
4) No es necesario usar espacios para separar los elementos de una línea del programa.
5) Cantidad de memoria limitada a unos pocos Kilobytes.
6) Posibilidad de usar la impresora. Esto nos permite programar en BASIC con el monitor apagado, ya que la impresora matricial se comporta como nuestro propio teletipo.

Se puede usar el manual original perfectamente ya que éste intérprete lo ha respetado "casi" en su totalidad, excepto algún tema de redondeos de números reales y poca cosa más sin importancia.



COMANDOS DEL SISTEMA

HELLO
Inicia la secuencia de conexión al servidor PDP-8.

Pasos de la secuencia de HELLO y valores que debemos introducir:

USER NUMBER-- Introducimos un número identificativo de 6 cifras.
SYSTEM-- debemos introducir "BASIC".
NEW OR OLD-- Depende si vamos a introducir un programa nuevo o a cargar uno existente.
NEW PROBLEM NAME-- Nombre de hasta 6 letras del programa a introducir o cargar.
READY. (El sistema está listo para la entrada de líneas BASIC o comandos del sistema)


RUN
Ejecuta el programa que hay en memoria.

LIST
Lista todo el programa que hay en memoria.
Podemos abortar el listado pulsando la tecla "S".

LIST--
Lista el programa a partir de la línea indicada.

SAVE
Graba en el disco el programa que hay en memoria.

UNSAVE
Borra del disco el programa con el nombre actual.

CATALOG
Muestra los nombres de todos los programas que tenemos guardados en el disco.

NEW
Borra el programa de memoria y a continuación nos pide el nombre del nuevo programa.

OLD
Recupera el programa borrado con NEW.

SCRATCH
Borra el programa de memoria pero mantiene el nombre del programa.

RENAME
Permite cambiar el nombre del programa sin borrar el anterior.



COMANDOS DEL BASIC

LET
Asigna un valor a una variable.
Los nombres de las variables pueden estar compuestos por una letra o una letra y un dígito.

Formato: variable = expresion
Ejemplo: LET A = 10


READ
Lee los valores de una línea DATA y los almacena en las variables indicadas.

Formato: READ variable, variable, ...
Ejemplo: READ x, Y, A1, Q(I,J), ...


DATA
Almacena listas de valores numéricos para ser leidos por el comando READ.

Formato: DATA numero, numero, numero, ...
Ejemplo: DATA 1, 2, -3, ...


PRINT
Imprime textos o valores.
Usando la coma como separador de expresiones tabularemos la salida en columnas de 15 caracteres.

Formato: PRINT "texto", ó "texto"valor, ó valor.
Ejemplo: PRINT "TEXTO", "X="X, A*B+3


GOTO
La ejecución salta a la línea de código indicada.

Formato: GOTO número_línea
Ejemplo: GOTO 100


IF-THEN
Salta a la línea indicada si se cumple la condición.

Formato: IF expresión condición expresión THEN número_línea
Ejemplo: IF A>=10 THEN 100


FOR
Inicio de un bucle que se repite hasta llegar al valor indicado.
La variable no puede ser una matriz.

Formato: FOR variable = expresión TO expresión [STEP expresión]
Ejemplo: FOR F=1 TO 100 STEP .25


NEXT
Repite el bucle si el valor no ha llegado al límite indicado.

Formato: NEXT variable
Ejemplo: NEXT F


END
Finaliza la ejecución del programa. Debe figurar siempre como la última línea del listado.


STOP
Finaliza la ejecución del programa.


DEF
Define una función matemática que devuelve el resultado en la variable indicada.

Formato: DEF FN letra (variable) = expresión
Ejemplo: DEF FNG(Z) = 1 + SQR(1 + Z * Z)


GOSUB
la ejecución del programa salta a la línea indicada, para ejecutar una subrutina.

Formato: GOSUB número_línea
Ejemplo: GOSUB 100


RETURNDevuelve la ejecución del programa a la línea siguiente a la del GOSUB que le ha llamado.

Ejemplo: RETURN


DIM
Permite definir matrices de una o dos dimensiones.
Los nombres de las matrices solo puedes estar compuestas por una única letra.

Formato: DIM letra(tamaño), letra(tamaño, tamaño)
Ejemplo: DIM A(17), B(3,20)


REM
Sirve para introducir comentarios en los listados

Formato: REM texto
Ejemplo: REM FINAL DE LOS COMANDOS



FUNCIONES DEL BASIC

SIN(X): Seno de X.
COS(X): Coseno de X.
TAN(X): Tangente de X.
ATN(X): Arco de la tangente de X.
EXP(X): Exponencial de X.
ABS(X): Valor absoluto (sin signo) de X.
LOG(X): Logaritmo de X.
SQR(X): Raiz cuadrada de X.
INT(X): Valor entero de X.
RND(X): Número aleatorio entre 0 y 1.



ERRORES DEL BASIC

ILLEGAL CONSTANT
El valor de una variable es más largo de 9 cifras.

ILLEGAL FORMULA
La expresión que se calcula es erronea.

ILLEGAL RELATION
La condición indicada en un IF-THEN no es una de las 6 posibles.

ILLEGAL LINE NUMBER
Se ha tratado de guardar una línea de código de más de 5 dígitos.

ILLEGAL INSTRUCTION
No se ha usado uno de los 15 comandos de BASIC disponibles.

ILLEGAL VARIABLE
Nombre de variable incorrecto.

INCORRECT FORMAT
Error de sintaxis en la línea indicada.

END IS NOT LAST
El comando END no es la última línea del programa.

NO END INSTRUCTION
El programa no acaba con el comando END.

NO DATA
Un comando READ intenta leer más valores de los DATA disponibles.

UNDEFINED FUNCTION
Se intenta ejecutar una función no definida.

UNDEFINED NUMBER
Un comando GOTO o IF-THEN hace referencia a un número de línea inexistente.

PROGRAM TOO LONG
El programa es demasiado largo.

TOO MUCH DATA
Hay demasiados valores en líneas DATA.

TOO MANY LOOPS
Hay más de 26 bucles encadenados.

NOT MATCH WITH FOR
Un comando NEXT no tiene el FOR correspondiente.

FOR WITHOUT NEXT
Un bucle no tiene NEXT.

CUT PROGRAM OR DIMS
Se intentan crear más matrices del espacio disponible.

SUBSCRIPT ERROR
Si hace referencia a una matriz con un valor mayor del definido.

ILLEGAL RETURN
Un comando RETURN no ha sido llamado por un GOSUB.



TECLAS ESPECIALES

[F1] - Muestra una pantalla de ayuda (no sale por la impresora).
[F5] - Activa/Desactiva el modo teletipo por pantalla. Activado por defecto.
[F9] - Activa/Desactiva el uso de la impresora. Desactivado por defecto
[S] - Break. Para la ejecución del programa (RUN) o el listado del programa (LIST).

Teclea STOP y pulsa RETURN para salir del interprete y volver al sistema operativo.



LIMITES DE ESTA VERSIÓN

En general, se respetan todas las limitaciones del BASIC original.

- El programa no puede disponer de más de 200 líneas de código. En la versión original se recomienda que no supere las 2 páginas (unas 120 líneas).
- El número total de valores en las matrices es de 1500 números.
- Los DATA no pueden contener más de 300 valores.



EJECUTANDO EL PROGRAMA

El programa DBASIC.EXE es una aplicación MS-DOS que funciona en cualquier sistema MS-DOS, Windows o virtualizado mediante programas tipo DOSBOX o VMWARE.

Para ejecutarlo simplemente copiarlo en una carpeta, pendrive o disquet, y añadir, si se desea, los fuentes .BAS de ejemplo u otros.

Para una correcta visualización del modo teletipo (por defecto), NO ejecutar en una ventana de cmd/command de Windows. Usar el modo pantalla completa de MS-DOS o Windows (si lo permite), o el DOSBOX.

Para trabajar con la impresora, es recomensable configurarla para que no espera a un final CR para imprimir la línea completa. Con esto conseguiremos que se comporte como una auténtica máquina de escribir. El uso desde Windows y sus colas de impresión (Spool) puede afectar a la impresión.

Descargar Dartmouth BASIC: dbasic.rar


IMAGENES DEL PROGRAMA

Imagen
Imagen
Imagen
Imagen
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1745 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor ron » 04 Feb 2012 13:25

Algunas partes están extraídas de la Wikipedia.

Vaya vaya, el 1 de Mayo cumplirá 48 años, es más viejo que algunos de los que andamos por aquí.

El Dartmouth BASIC (BASIC de Dartmouth) es la versión original del lenguaje de programación BASIC.

http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf

Es llamado así porque fue diseñado e implementado en el Dartmouth College. El lenguaje fue diseñado por John Kemeny y Thomas Kurtz como parte del Dartmouth Time Sharing System (DTSS) (Sistema de tiempo compartido de Dartmouth) y fue uno de los primeros lenguajes de programación previstos para ser usado de forma interactiva.

Durante años, se desarrollaron varias versiones de Dartmouth, todas implementadas como compiladores, a diferencia de las versiones del lenguaje implementadas en otros sistemas, que eran interpretes.En la programación de ordenadores, el BASIC, siglas de Beginner’s All-purpose Symbolic Instruction Code, es una familia de lenguajes de programación de alto nivel.

BASIC originalmente fue desarrollado como una herramienta de enseñanza. El lenguaje y sus variantes llegaron a estar ampliamente disponibles en los micros a finales de los años 1970 y en los años 1980. El BASIC sigue siendo popular hasta el día de hoy en un puñado de dialectos altamente modificados, y en nuevos lenguajes, influenciados por BASIC.

El primer compilador se produjo antes de que el sistema de tiempo compartido estuviera listo. Conocido como CardBASIC, fue pensado para el sistema basado en el lector de tarjetas estándar basado en el sistema de procesamiento por lotes.

Como todas las sucesivas versiones , fue implementado por un equipo de programadores no graduados que trabajaban bajo la dirección de Kemeny y Kurtz. La primera versión interactiva fue puesta a disposición de los usuarios en junio de 1964; la segunda en octubre de 1964; la tercera en 1966; la cuarta en 1969; la quinta en 1970; la sexta en 1971; y la séptima en 1979.



dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor dancresp » 17 Feb 2012 00:43

Bueno, pues no he ido sobrado de tiempo precisamente, pero por fin lo doy por acabado.

Incluyo un par de imagenes de como sale por impresora, y mañana colgaré el ejecutable, 9 fuentes de ejemplo.

Uds. lo disfruten
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1745 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor ron » 17 Feb 2012 21:16

Gracias Wally !!!!

dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor dancresp » 17 Feb 2012 22:49

Subido el ejecutable, fichero TXT explicativo y 9 fuentes de ejemplo al final del hilo principal.

Como final de proyecto decir que la mayor parte del interprete lo acabé en una semana, pero el tema de la calculadora de expresiones y las matrices, me han llevado varios días más. después vino el tema de las pruebas, bugs localizados, correcciones, más pruebas y así varios días más. Esto en un periodo con mucho trabajo y poco tiempo libre.

El resultado es la preservación de la primera versión de BASIC conocida, y su entorno de desarrollo, con la opción de ser usado en equipos que tengan el monitor estropeado, ya que se puede usar con una impresora matricial (preferiblemente) conectada.

Para más adelante dejo el desarrollo de un interprete de FLOW-MATIC, el padre del COBOL, y que se ejecutaba en un ordenador UNIVAC. Considero interesante y necesario preservar estos lenguajes y sistemas.
Buscando la IP de la W.O.P.R. he encontrado mi índice

dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor dancresp » 23 Feb 2012 12:32

He subido una nueva versión del EXE.

El otro día, probándolo en el AMSTRAD PC 1512 SD vi que un carácter ASCII que pensaba que no estaba disponible en MS-DOS (por diferencias con Windows) realmente si lo está y lo he usado para indicar el borrado de un carácter.

Ya no hay excusas para no usarlo, y disfrutarlo... :?
Buscando la IP de la W.O.P.R. he encontrado mi índice

afx
Mensajes: 652
Registrado: 25 Nov 2010 23:26
Agradecido : 34 veces
Agradecimiento recibido: 60 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor afx » 23 Feb 2012 19:02

Dancresp, tu DBasic ¿será en algún momento "opensource"? Sería interesante ver la forma en cómo implementas este intérprete Basic.


dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor dancresp » 23 Feb 2012 22:13

afx escribió:Dancresp, tu DBasic ¿será en algún momento "opensource"? Sería interesante ver la forma en cómo implementas este intérprete Basic.

Hombre, sabido es que junto al ejecutable suelo entregar el fuente.

Pero en este caso, y partiendo de la base que soy plenamente consciente que es algo que levantará el interés de aproximadamente 1 de cada 50.000.000 de personas del planeta, siendo muy generoso... me hace gracia que el que lo use lo haga de la forma original, en plan teletipo, y por eso he decidido cerrarlo para evitar modificaciones que lo desvirtuen.

La verdad es que es curioso programar con el monitor apagado. Vamos, que no lo había hecho nunca. Eso si, gastas papel. Ojo, que también lo puedes hacer todo por pantalla.

De todas formas, si a alguien le hace gracia verle las tripas, privado al canto y lo envío encantado (son 32 KB). Hay algunas partes que no dejan de ser curiosas, especialmente la del calculador.

Pero insisto, soy consciente que son proyectos para una diminuta minoría, pero que está bien que alguien se encargue de recuperarlos.

Ya verás mi entrenador de KENBAK-1 en MS-DOS, que es el embrión del emulador en Visual BASIC para Windows, y el programa que incorporará un PIC para tenerlo en formato hardware.
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
Luis
Mensajes: 1314
Registrado: 03 Nov 2010 19:00
Agradecido : 473 veces
Agradecimiento recibido: 205 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor Luis » 24 Feb 2012 01:28

¿Alguien despierto por ahí a estas horas?

Es que tengo un problemilla, he probado el programa, pero no me funciona, se pone la pantalla en gris y de ahí no pasa.

He probado en Win XP y en Mac, usando DOSBox, y luego bajo el pseudo-MSDOS de Windows XP, y nada...

¿Alguna sugerencia? Quería aprovechar mi turno de noche para cacharrear con esto...

Por cierto, se me caen las babas cada vez que mencionas ese futuro Kenbak en PIC :p
+++no carrier

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1745 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor ron » 24 Feb 2012 07:33

supongo que el ejecutable lo colocas en un directorio que está montado y visible por dosbox

por ejemplo si tuvieras en win32 en d:\basic

mount c d:\basic

c:

y a correr....

Y a esas horas, depende del día pero aunque últimamente es al contrario suele haber gente, que cosas...

dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor dancresp » 24 Feb 2012 09:39

harnas escribió:Es que tengo un problemilla, he probado el programa, pero no me funciona, se pone la pantalla en gris y de ahí no pasa.

He probado en Win XP y en Mac, usando DOSBox, y luego bajo el pseudo-MSDOS de Windows XP, y nada...

Si te sale una pantalla vacia gris... perfecto !!!

Ahora, ¿has probado de saludar?
Vamos, que escribes "HELLO" e inicias la secuencia de conexión y entrada al BASIC.

Sino, puedes poner "HELP" en este punto o pulsar "F1" una vez ya has entrado para acceder a una pantalla de ayuda.

Es de estos programas que requieren una mínima lectura del manual (el original o el mi TXT), o mirando alguno de los pantallazos que he puesto.

Por otro lado, lo he probado en MS-DOS (XT y AT), y en Windows con COMMAND, CMD, DOS-Box o pulsando directamente sobre el EXE y funciona perfectamente (en DOS-Box un poco más lento). Recomiendo modo pantalla completo, y con una matricial es la leche (pulsando "F9"). Y si no mola el modo teletipo pulsar "F5".

Recopio:

HELLO
Inicia la secuencia de conexión al servidor PDP-8.

Pasos de la secuencia de HELLO y valores que debemos introducir:

USER NUMBER-- Introducimos un número identificativo de 6 cifras.
SYSTEM-- debemos introducir "BASIC".
NEW OR OLD-- Depende si vamos a introducir un programa nuevo o a cargar uno existente.
NEW PROBLEM NAME-- Nombre de hasta 6 letras del programa a introducir o cargar.
READY. (El sistema está listo para la entrada de líneas BASIC o comandos del sistema)
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
Luis
Mensajes: 1314
Registrado: 03 Nov 2010 19:00
Agradecido : 473 veces
Agradecimiento recibido: 205 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor Luis » 24 Feb 2012 19:14

Gracias Dancresp, era eso. Cada vez que salía la pantalla gris me quedaba esperando a que algo pasara, esperaba un prompt o cursor o algo, no se me había ocurrido teclear nada :)

El "feeling" del programa está genial, ¡gracias!
+++no carrier

dancresp
Mensajes: 5629
Registrado: 13 Nov 2010 02:08
Agradecido : 311 veces
Agradecimiento recibido: 446 veces

Re: Intérprete de Dartmouth BASIC

Mensajepor dancresp » 24 Feb 2012 20:10

harnas escribió:El "feeling" del programa está genial, ¡gracias!

En este proyecto el "feeling" era básico, que BASIC normales ya hay muchos.

Y si puedes, usa una matricial... y apaga el monitor !!!
Buscando la IP de la W.O.P.R. he encontrado mi índice


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados