The Wayback Machine - https://web.archive.org/web/20120702192626/http://www.retrowiki.es/e107_plugins/content/content.php?content.186

Buscar contenido


Intérprete de Dartmouth BASIC por Dancresp

en 04 Mar 2012
por dancresp Lista del autor Imprimir Contenido {PDF=Crear archivo pdf de Contenido^plugin:content.186}
en Fichas > Lenguajes Programación

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.




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.






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