MATH-MATIC Interpreter

Foro dedicado a la programación en todo tipo de sistemas clásicos.
dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

MATH-MATIC Interpreter

Mensajepor dancresp » 08 Jun 2014, 09:31

MATH-MATIC es el nombre comercial del compilador AT-3, orientado al ámbito de los cálculos matemáticos y que funcionaba en las computadoras UNIVAC I y UNIVAC II de Remington Rand. Fue concebido como una mejora del lenguaje FORTRAN, que IBM había desarrollado anteriormente.


GRACE MURRAY HOPPER Y CHARLES KATZ
Grace Murray Hopper, nacida en New York en 1906, era una matemática y militar que trabajó para Remington-Rand. En el año 1951 diseñó el primer compilador de la historia.

Charles Katz, nacido en Philadelphia en 1927, era un matemático que trabajó para Remington-Rand entre los años 1953 y 1959, y formó parte de la UNIVAC Division, encargada del desarrollo de los primeros compiladores. Posteriormente trabajó en General Electric Co., Burroughs Corporation y en Xerox Corporation.

Foto_1.jpg
Foto_1.jpg (62.67 KiB) Visto 4861 veces


LOS COMPILADORES
En 1949 la programación se basaba en el uso de instrucciones identificadas mediante mnemotécnicos que posteriormente se traducían a código binario para su ejecución en el computador. Este proceso era muy complejo y estaba reservado a pocas personas con amplios conocimientos técnicos.

Grace Hopper y su equipo decidieron desarrollar el primer compilador para facilitar este proceso teniendo claro que sería un trabajo costoso pero facilitaría los desarrollos posteriores.

El compilador A-0 (Arithmetic Language versión 0), escrito por Grace Hopper entre los años 1951 y 1952 para el UNIVAC-I fue el primer compilador de la historia desarrollado para un computador electrónico. El A-0 funcionaba más como un cargador o un enlazador que como el concepto de compilador que se tiene hoy en día. El programa estaba especificado como una secuencia de subrutinas y argumentos. Las subrutinas estaban identificadas por un código numérico y los argumentos se escribían a continuación. Posteriormente el compilador enlazaba estas instrucciones con la rutina correspondientes que se cargaba desde una unidad de cinta y convertía esa codificación en código máquina para ser ejecutado directamente por el UNIVAC.

Al compilador A-0 le siguieron el A-1 y A-2 (lanzado como ARITH-MATIC), el AT-3 (lanzado como MATH-MATIC) y el B-0 (lanzado como FLOW-MATIC).

El sistema A-2 (inicialmente nombrado como A-3) fue liberado para los clientes de Remington-Rand a finales de 1953. Estos recibieron el código fuente del compilador y fueron invitados a enviar sus mejoras de nuevo a UNIVAC. Así, el A-2 fue el primer ejemplo de software libre y código abierto de la historia.

Charles Katz conoció a Grace Murray Hopper en Remington Rand e inmediatamente se dedicaron al desarrollo del lenguaje de programación del compilador A-2, que recibió el nombre comercial de ARITH-MATIC. Finalizado este proyecto, Katz inició el desarrollo de un nuevo compilador, el AT-3, que mezclaba sentencias en inglés con fórmulas algebraicas. Este compilador fue lanzado comercialmente en 1957 bajo el nombre de MATH-MATIC, con la intención de competir con el reciente FORTRAN (FORmula TRANslator), lanzado por IBM ese mismo año.

Texto folleto.jpg
Texto folleto.jpg (47.12 KiB) Visto 4861 veces


Hopper creía que la escasez de aplicaciones comerciales era el mayor obstáculo para la implantación de las computadoras en el ámbito empresarial. Para ello era necesario perfeccionar los lenguajes de programación y hacerlos más comprensibles. Se centro en el uso de instrucciones en inglés y una sintaxis muy parecida al lenguaje natural. Necesito varios años para demostrar que la idea era factible y se aplico en los compiladores AT-3 y B-0.

Al compilador de MATH-MATIC le siguió el compilador B-0, comercialmente conocido como FLOW-MATIC, que fue el primer compilador para el uso en aplicaciones de gestión comercial en que su programación se basaba en instrucciones en inglés. FLOW-MATIC tuvo una gran influencia en el desarrollo del lenguaje de programación COBOL.

En 1957, Katz fue elegido por John Carr III, presidente de la ACM, para formar parte del comité que estudiaría las especificaciones técnicas para crear un lenguaje de programación universal. Este comité acepto la invitación del subcomité GAMM para la creación de una actividad internacional. Katz fue uno de los 4 miembros que representaban a los Estados Unidos, junto a John Backus, Alan J. Perlis, y Joe Wegstein. Los otros cuatro miembros que representaban a la parte europea eran F. L. Bauer, H. Bottenbruch, H. Rutishauser, and K. Samelson.

Trabajando para Generral Electric Co., Katz siguió desarrollando compiladores, incluyendo soporte para COBOL, WIZ (dialecto de ALGOL) y GECOM (cruce entre COBOL y ALGOL). Posteriormente dirigió los trabajos del sistema de reservas de la TWA Airline y software de sistemas para la US Post Office.

Principales características de MATH-MATIC:
1) Fue uno de los primeros lenguaje de programación que usaba instrucciones basadas en palabras en inglés.

2) Permitía mezclar instrucciones en lenguaje natural en inglés con complejas fórmulas matemáticas que permitía el uso de variables y matrices con nombres descriptivos.

3) Se concibió como una mejora de la primera versión del lenguaje FORTRAN de IBM.

sample1.jpg
sample1.jpg (33.04 KiB) Visto 4861 veces


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.

Mi primer incursión en este mundillo consistió en programar un intérprete de la primera versión de BASIC, el Dartmouth BASIC, que apareció en el año 1964. No me limité a programar solo el lenguaje de programación, sino que a partir de la información que aparecía en el manual, reproduje todo el entorno de trabajo para tener la sensación de hacerlo a través de un teletipo ASR33, con su correspondiente conexión al ordenador central. Para ellos se podía activar que los caracteres aparecieran en pantalla a velocidad reducida, o usar una impresora como teletipo y prescindir del monitor.

Para este proyecto se ha usado la misma filosofía y entorno de trabajo, pero como desconozco como se comunicaba el operador con el UNIVAC ha optado por dejar volar la imaginación, ya que el objetivo principal es poder ejecutar los programas que aparecen en su manual original, y desarrollar nuevos programas. Para ello los programas pueden ser introducidos desde el mismo entorno del intérprete o desde un editor externo.

Encontré en Internet un PDF del manual de MATH-MATIC, fechado el año 1958. Me fascinó su lenguaje de programación, reducido pero considerablemente potente para el mundo de las matemáticas, compuesto por 17 instrucciones y 17 funciones matemáticas.

Recomiendo descargar y usar el manual original, ya que este intérprete lo ha respetado "casi" en su totalidad, excepto algunas funcionalidades relacionadas con los comandos que leen y graban de las unidades de cinta.

Podéis descargar el PDF del manual de aquí:
http://bitsavers.informatik.uni-stuttga ... s_1958.pdf


COMANDOS DE LA CONSOLA
Me he inventado una serie de comandos que nos permite introducir, listar, cargar, grabar y borrar programas de MATH-MATIC y gestionar las unidades de cinta.

LOAD nombre
Carga en memoria el programa indicado. El nombre debe corresponder a un fichero con extensión “.MMP”.

SAVE [nombre]
Graba en el disco el programa que hay en memoria.
Si se crea un nuevo programa, la primera vez se debe especificar un nombre de hasta 8 caracteres, sin extensión.

LIST [desde] [hasta] / [FD [nombre]] / [VARS]
Este comando permite realizar dos tipos de listados:
- Listar el programa en memoria, pudiendo indicar la línea inicial y final.
- Listar las variables definidas indicando su nombre, tamaño y el valor que contienen. Útil para depurar un programa.

Podemos abortar un listado pulsando la tecla "ESC".

EDIT [línea] / [definición]
Este comando permite editar una línea del programa indicando su número.

Al editar una línea se muestra una copia, a modo de guía, y debajo se entra en modo de edición, guardando un copia de la línea original en un buffer. El sistema de edición está inspirado en el del M-BASIC de Microsoft.

Controles de EDIT:
- SPACE: Muestra un carácter de la línea, excepto cuando se está en modo inserción.
- SUPR: Borra el siguiente carácter de la línea del buffer.
- BACK: Borra el carácter anterior de la línea del buffer.
- INS: Activa/desactiva el modo inserción. Con el modo de inserción activado se pueden añadir caracteres en la línea.
- ENTER: Acepta la línea en el estado actual.
- ESC: Anula la edición de la línea.

EXEC
Ejecuta el programa que hay en memoria.

RESET
Borra el programa de memoria.

EXIT
Salir de MATH-MATIC y volver al sistema operativo.

Pulsando [F1] se muestra una pantalla de ayuda con un resumen de los comandos de consola y las instrucciones del lenguaje MATH-MATIC, entre otras cosas.

SERVO [número] [LIST / VIEW / CLEAR / FILES]
Para simular las unidades de cinta he optado por usar ficheros de texto plano (con cierto formato), en los que se puede leer o escribir registros.

Por defecto podemos usar hasta 9 unidades de cinta (1 a 9), pero el UNIVAC usa 3 unidades para ejecutar el MATH-MATIC, y el intérprete lo ha respetado. Así, las unidades 1, 6 y 8 no se pueden usar en los programas.

El intérprete asigna por defecto la unidad 2 como unidad de cinta de lectura y la unidad 3 como unidad de cinta de escritura, pero con este comando se puede modificar. La información de las cintas se graba junto con el programa MATH-MATIC para posteriores ejecuciones. Los ficheros de datos deben tener la extensión “.MMD”.

El comando SERVO nos permite realizar distintas acciones:
SERVO número fichero tipo
Monta el “fichero” en la unidad de cinta “número” para su lectura o escritura. “Tipo” debe tener uno de los siguientes valores: “READ” o “WRITE”. Las unidades “SYSTEM” son usadas por MATH-MATIC.

SERVO LIST
Muestra el estado de las distintas unidades de cinta, indicando que el fichero montado y su tipo.

SERVO CLEAR
Desmonta todos los ficheros montados en las unidades de cinta, excepto los de sistema.

SERVO número CLEAR
Desmonta el fichero montado en la unidad de cinta “número”, excepto si es una unidad de cinta de sistema.

SERVO FILES
Muestra los programas MATH-MATIC que hay en la carpeta de MATH-MATIC. Estos programas tienen la extensión “.MMP”.

SERVO número VIEW
Lista por pantalla los registros de la unidad de cinta “número”. Útil para depurar un programa o ver los resultados.


Pulsando [F1] se muestra una pantalla de ayuda con un resumen de los comandos de consola y las instrucciones del lenguaje MATH-MATIC, entre otras cosas.


INSTRUCCIONES DE MATH-MATIC
Este lenguaje dispone de un conjunto 17 instrucciones divididas en tres grupos: entrada/salida de información, control de la ejecución y lectura/escritura en cintas.

A continuación se muestra una breve descripción de sus instrucciones, pero recomiendo leer el manual original para conocer todas sus posibilidades. Salvo que se indique lo contrario, el funcionamiento es idéntico al original.


PRINT-OUT
Imprime los valores de la lista de variables indicada. La lista puede contener hasta 50 variables o matrices. Las matrices pueden ir referenciadas por números, variables o operaciones matemáticas con los signos básicos ( + - * / ) , pero la expresión no pueden estar formada por más de 12 caracteres.

Formato:
PRINT-OUT variable_1 [variable_n].

Ejemplo:
PRINT-OUT A B C D(E,F) G(5) H(2,4) .


TYPE-IN
Permite introducir valores numéricos desde el teclado y asignarlos a variables. La lista puede contener hasta 50 variables, pero no se admite el uso de matrices.

Formato:
TYPE-IN variable_1 [variable_n] .

Ejemplo:
TYPE-IN A B C D .


JUMP
La ejecución del programa salta a la línea de código indicada.

Formato:
JUMP TO SENTENCE línea .

Ejemplo:
JUMP TO SENTENCE 5 .


EXECUTE
El programa ejecuta el rango de líneas indicado y continúa con la siguiente línea de programa. Se usa para la ejecución de subrutinas.

Formato:
EXECUTE SENTENCE[S] línea_ini [ THRU linea_fin ] .

Ejemplo:
EXECUTE SENTENCES 5 THRU 15 .
EXECUTE SENTENCE 8 .

Excepción: Esta versión no admite anidar instrucciones EXECUTE. El rango a ejecutar corresponderá al último EXECUTE procesado.


IF
Salta a la línea indicada si se cumple la condición. Se pueden encadenar varias sentencias IF en una misma línea. Se pueden usar hasta dos signos distintos, separados por un espacio.

Formato:
IF expresión condición expresión JUMP TO SENTENCE línea .

Ejemplo:
IF A > = 10 JUMP TO SENTENCE 10 .
IF A = 1 JUMP TO SENTENCE 5 IF A > 3 JUMP TO SENTENCE 8 IF A >10 JUMP TO SENTENCE 15 .


VARY (Bucle)
Inicio de un bucle que se incrementa según un valor dado hasta llegar al valor máximo. A cada valor del bucle se ejecuta el rango de líneas indicado. Los valores pueden ir referenciados por un número, variable o matriz. Las matrices pueden ir referenciadas por números, variables o operaciones matemáticas con los signos básicos ( + - * / ), pero la expresión no pueden estar formada por más de 12 caracteres.

Se pueden encadenar hasta 3 variables en una misma sentencia, siempre que tengan el mismo número de repeticiones.

Formato:
VARY variable1 valor_ini_1 (incremento_1) valor_fin_1 SENTENCE[S] línea_ini [ THRU línea_fin ] .

Ejemplo:
VARY F 1 (1) 10 SENTENCES 10 THRU 15 .
VARY A 1 (1) 10 B 2 (2) 20 C 1 (.1) 2 SENTENCE 18 .


VARY (Lista de valores)
Inicio de un bucle en el que las variables van tomando los valores numéricos indicados en una lista. A cada valor del bucle se ejecuta el rango de líneas indicado.

Se pueden encadenar hasta 3 variables en una misma sentencia. El número de valores debe ser múltiplo del número de variables.

Formato:
VARY variable1 [variable_n] valor_ini_1 [valor_n] SENTENCE[S] línea_ini [ THRU línea_fin ] .

Ejemplo:
VARY F 1 2 3 4 5 SENTENCES 10 THRU 15 .
VARY A B C 1 2 3 4 5 6 7 8 9 SENTENCE 18 .


IGNORE
Esta instrucción no hace nada. Se utiliza en bucles VARY para volver al interior del rango de líneas que se ejecutan desde una sentencia externa.


READ
Carga la lista de variables indicada con los registros de la unidad de cinta correspondiente. La lista puede contener hasta 50 variables, pero no matrices.

Formato:
READ variable1 [variable_n] [SERVO servo] [STORAGE storage] [IF SENTINEL [REWIND/RESET AND] JUMP TO SENTENCE línea] .

Ejemplo:
READ A .
READ A B SERVO 2 STORAGE A .
READ A B C IF SENTINEL RESET AND JUMP TO SENTENCE 8 .


READ-ITEM
Carga la matriz indicada con los registros de la unidad de cinta correspondiente. Los índices de la matriz deben ser numéricos.

Formato:
READ-ITEM matriz [SERVO servo] [STORAGE storage] [IF SENTINEL [REWIND/RESET AND] JUMP TO SENTENCE línea] .

Ejemplo:
READ-ITEM A(10,10) .
READ-ITEM A(10,10) SERVO 2 STORAGE A .
READ-ITEM A(10,10) IF SENTINEL RESET AND JUMP TO SENTENCE 8 .


READ-ARRAY
Carga la matriz indicada con los registros de la unidad de cinta correspondiente. Los índices de la matriz deben ser numéricos y la matriz no puede haber sido declarada previamente. Solo se pueden usar un máximo de 7 instrucciones READ-ARRAY por programa.

Formato:
READ-ARRAY matriz [SERVO servo] [STORAGE storage] .

Ejemplo:
READ-ARRAY A(10,10).
READ-ARRAY A(10,10) SERVO 2 STORAGE A.


WRITE
Graba la lista de variables indicada en la unidad de cinta correspondiente. La lista puede contener hasta 50 variables, pero no matrices.

Formato:
WRITE [EDIT/CONVERT] [FOR UNIPRINTER] variable1 [variable_n] [SERVO servo] [STORAGE storage] .

Ejemplo:
WRITE F .
WRITE CONVERT A B SERVO 9.
WRITE EDIT FOR UNIPRINTER A B C SERVO 9.

Excepción: Esta versión guarda el formato indicado por EDIT o CONVERT pero no afecta al funcionamiento del programa.


WRITE-ITEM
Graba la matriz indicada en la unidad de cinta correspondiente. Los índices de la matriz deben ser numéricos.

Formato:
WRITE-ITEM [EDIT/CONVERT] [FOR UNIPRINTER] matriz [SERVO servo] [STORAGE storage] .

Ejemplo:
WRITE-ITEM CONVERT A(5,5,5) .
WRITE-ITEM FOR UNIPRINTER A(5,5) SERVO 9 STORAGE A .

Excepción:
Esta versión guarda el formato indicado por EDIT o CONVERT pero no afecta al funcionamiento del programa.


WRITE-ARRAY
Graba la matriz indicada en la unidad de cinta correspondiente. Los índices de la matriz deben ser numéricos.

Formato:
WRITE-ARRAY [EDIT [AND CONTAIN]/CONVERT] [FOR UNIPRINTER] matriz [SERVO servo] [STORAGE storage] .

Ejemplo:
WRITE-ARRAY CONVERT A(5,5,5) .
WRITE-ARAY FOR UNIPRINTER A(5,5) SERVO 9 STORAGE A .

Excepción:
Esta versión guarda el formato indicado por EDIT, CONVERT y CONTAIN pero no afecta al funcionamiento del programa. Existen diferencias entre WRITE-ARRAY y WRITE-ITEM pero a efectos prácticos no se han reflejado en el intérprete.


CLOSE-INPUT
Cierra una unidad de cinta de entrada. Para identificar el servo a cerrar, se debe referenciar a una línea que contenga una instrucción de lectura de cinta.

Formato:
CLOSE-INPUT [AND REWIND] SENTENCE línea .

Ejemplo:
CLOSE-INPUT SENTENCE 8 .
CLOSE-INPUT AND REWIND SENTENCE 8 .

Excepción:
La explicación del manual no es del todo clara, con lo que el intérprete se limita a cerrar un fichero de entrada.


CLOSE-OUTPUT
Cierra una unidad de cinta de salida. Para identificar el servo a cerrar, se debe referenciar a una línea que contenga una instrucción de escritura en cinta.

Formato:
CLOSE-INPUT [AND REWIND] SENTENCE línea .

Ejemplo:
CLOSE-INPUT SENTENCE 8 .
CLOSE-INPUT AND REWIND SENTENCE 8 .

Excepción:
La explicación del manual no es del todo clara, con lo que el intérprete se limita a grabar un registro centinela y cerrar un fichero de salida.


CONTAIN
Esta instrucción sirve para asegurar un suficiente espacio de almacenamiento para la matriz indicada.

Formato:
CONTAIN matriz [STORAGE storage] .

Ejemplo:
CONTAIN X(20) .
CONTAIN X(10,10) STORAGE A .

Excepción:
Esta instrucción es aceptada por el intérprete pero no tiene ningún efecto, ya que el sistema de gestión de memoria es distinto al original. Solo se verifica que realmente no hayan más de 250 elementos en la matriz indicada.


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


FUNCIONES MATEMÁTICAS DE MATH-MATIC
Este lenguaje de programación dispone de una amplia librería de funciones matemáticas.

SIN X : Seno de X.
COS X : Coseno de X.
TAN X : Tangente de X.
SEC X : Secante de X.
CSC X : Cosecante de X.
COT X : Cotangente de X.
ARCTAN X : Arco de la tangente de X.
SINH X : Seno hiperbólico.
COSH X : Coseno hiperbólico.
TANH X : Tangente hiperbólica.
X POW Y : X elevado a Y.
X INTPOW Y : X entero elevado a Y entero.
X ROOT Y : Raíz X de Y.
SQR X : Raíz cuadrada de X.
EXP X : Número aleatorio entre 0 y 1.
LOG X : Logaritmo en base-10 de X.
LN X : Logaritmo neperiano de X.


ERRORES DEL MATH-MATIC
El manual del MATH-MATIC dedica 30 páginas a los errores que pueden producirse durante la compilación y ejecución de un programa. En este intérprete se ha intentado agrupar y simplificar la lista para que sea más fácil identificar las causas de un error.

Durante la ejecución del programa el “xxxx” se sustituye por el comando que ha producido el error y el “nnnn” por el número de línea del programa.

PRT-OUT 05 SENT. NO. nnnn SPACE PERIOD NO PAREN. TYP-IN CORR
La línea del programa debe acabar con un espacio y un punto.

PRT-OUT 07 SENT. NO. nnnn SENT. NAME xxxx INCORRECT. TYP-IN CORR
Hay un error de sintaxis en la línea del programa.

PRT-OUT 09 TYPE-IN INCORRECT. TYP-IN CORR AGAIN
La variable que recibe el valor de un TYPE-IN es incorrecta.

PRT-OUT 13 SENT. NO. nnnn ABS SIGN NOT PAIRED. REWRITE
El valor absoluto “|” de una variable no se ha cerrado correctamente.

PRT-OUT 14 SENT. NO. nnnn PSEUDO WORD TOO LONG. REWRITE
El nombre de una variable o matriz ocupa más de 12 caracteres.

xxxx SENT. NO. nnnn FORMAT INCORRECT. TYPE-IN CORR
Error de sintaxis en la línea del programa.

xxxx SENT. NO. nnnn TOO MANY VARIABLES. REWRITE
Hay más de 50 variables en una instrucción.

xxxx SENT. NO. nnnn SENT REF MISSING. TYP-IN CORR
Una instrucción de salto hace referencia a una línea inexistente.

xxxx SENT. NO. nnnn VARIABLE NOT ALPHA. TYP-IN CORR
Se usa un tipo de variable incorrecto.

xxxx SENT. NO. nnnn ARRAY SIZE TOO LARGE. REWRITE
La matriz tiene más de 250 elementos.

xxxx SENT. NO. nnnn MORE THAN 3 SUBSCRIPTS. REWRITE
La matriz tiene más de 3 índices.

xxxx SENT. NO. nnnn ITEM SIZE INCORRECT. REWRITE
En la instrucción VARY el número de valores de la lista es incorrecto.

xxxx SENT. NO. nnnn VARBLE HAS ALPHA VALUE. TYP-IN CORR
Se espera un valor numérico y se usa una variable.

xxxx SENT. NO. nnnn ARRAY SIZE ALPHABETIC. TYP-IN CORR
La matriz espera números como referencia a sus índices.

xxxx SENT. NO. nnnn SERVO NO. INCORRECT. TYP-IN CORR
Se ha introducido un número de unidad de cinta incorrecto.

SENT NO. nnnn VARIABLE MISSING. TYP-IN CORR
Se hace referencia a una variable o índice de una matriz que no existe.

WORD AFTER SERVO MISSING SENT NO. nnnn. TYP-IN CORR
No se ha indicado el número de SERVO.

WORD AFTER STORAGE MISSING SENT NO. nnnn. TYP-IN CORR
NO se ha introducido el área de un STORAGE.

PAREN MSNG SENT. NO. nnnn. REWRITE
Los paréntesis de una fórmula no están emparejados correctamente

STOP MISSING. TYP-IN CORR
La última línea del programa debe ser una instrucción STOP.

RUN ERR 01 SENT. NO. nnnn OVERFLOW
Una operación matemática ha dado un error de desbordamiento.

RUN ERR 02 SENT. NO. nnnn DIVISION BY ZERO
Se ha intentado realizar una división entre 0.

RUN ERR 09 SENT. NO. nnnn CALCULATION ERROR
Hay un error de sintaxis en una fórmula matemática.

SYSTEM RESTRICTION. READ/WRITE FILE ERROR
Se intenta leer de un servo de escritura o escribir en un servo de lectura.

SYSTEM RESTRICTION 06 SENT. NO. nnnn. REWRITE
Errores de sistema no catalogado.

SYSTEM RESTRICTION. SERVO ERROR
Error leyendo o grabando en una unidad de cinta.


TECLAS ESPECIALES
Hay una serie de teclas de función que proporcionan ayuda o ciertas características especiales. Están operativas en cualquier momento excepto durante la ejecución de un programa en el intérprete.

[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
[ESC] – BREAK. Detiene la ejecución del programa (EXEC) o el listado del programa (LIST).


LIMITES DEL INTERPRETE
En general se respetan la mayoría de las limitaciones del MATH-MATIC original, pero algunas características son propias del intérprete.

- El programa no puede disponer de más de 200 líneas de código.
- Los números de línea se componen de un número entre 1 y 999 y, opcionalmente, de una letra. Todo entre paréntesis.
- Se pueden almacenar un máximo de 600 variables. Esto comprende variables y matrices.
- Las matrices no pueden tener más de 250 elementos ni más de tres niveles.
- Los nombres de las variables no pueden tener más de 12 caracteres y deben empezar con una letra.
- Las variables pueden tener un tamaño máximo de 11 dígitos.
- Los cálculos se redondean a 6 decimales, y se eliminan las cifras no significativas.
- Se pueden enlazar un máximo de 26 instrucciones VARY.
- Los ficheros de datos se montan para simular a las unidades de cinta, pudiendo usar hasta 6 distintas.
- Los programas se pueden redactar desde el propio intérprete o desde un editor externo.
- Todos los resultados se presentan como si se estuvieran imprimiendo en un teletipo (opcional).


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

La podéis descargar de este enlace:
Math-Matic_Interpreter.rar
(55.04 KiB) Descargado 314 veces


Para ejecutarlo, simplemente copiar los ficheros en una carpeta, pendrive o disquete, y añadir, si se desea, los fuentes .MMP y ficheros de datos .MMD 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 recomendable configurarla para que no espere a un CR final 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.

El programa accede al fichero “MMATIC.INI” para configurar ciertas características:

Estos son los tres parámetros configurables:
display: Hay tres modos de video disponible: Negro/Blanco (0), Blanco/Negro (1) y Verde/Negro (2).
teletype: Si el valor es 1 los caracteres se muestran por pantalla simulando un teletipo.
printer: Si el valor es 1 todo lo que aparece en pantalla se imprime por la impresora (serie/paralelo).


PROGRAMAS DE EJEMPLO
El intérprete viene con seis programas de ejemplo:

SAMPLE1 / SAMPLE2 / SAMPLE3 / SAMPLE4
Estos 4 programas vienen como ejemplos en el manual de instrucciones de MATH-MATIC.
Se acompañan de los ficheros de datos necesarios para poder ser probados, y los resultados se guardan en el fichero “TAPE-OUT.MMD”


SORT1
Programado por mi, este programa pide que se introduzcan hasta 10 números y posteriormente los muestra ordenados de menor a mayor. Para finalizar la introducción de números, introducir un 0.


SORT2
Programado por mi, este programa carga hasta 250 elementos de un fichero con nombre “SORT2.MMD”.
A continuación realiza una ordenación de menor a mayor por el método de burbuja y guarda el resultado en el fichero “TAPE-OUT.MMD”.

Teniendo en cuenta que puede realizar hasta 250*250=62500 comparaciones y otros cálculos, el proceso puede tardar varios minutos en finalizar, en función de la velocidad del PC.


Para ejecutar cualquiera de los dos ejemplos o posteriores programas, es tan simple como...
MMATIC (entrar en el intérprete)
LOAD SAMPLE1 (Cargar el programa)
EXEC (Ejecutar el programa)

Ó desde la línea de comandos del sistema operativo con...

MMATIC SAMPLE1 (Entrar en el intérprete cargando el programa)
EXEC (Ejecutar el programa)


IMAGENES DEL INTERPRETE

mmatic_4.gif
mmatic_4.gif (5.27 KiB) Visto 4861 veces

mmatic_3.gif
mmatic_3.gif (54.64 KiB) Visto 4861 veces

mmatic_1.gif
mmatic_1.gif (4.68 KiB) Visto 4861 veces

mmatic_2.gif
mmatic_2.gif (9.43 KiB) Visto 4861 veces
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 840
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 18 veces
Gracias recibidas: 63 veces

Re: MATH-MATIC Interpreter

Mensajepor Namek » 08 Jun 2014, 10:46

Menudo curro te has pegado, magnifico trabajo... =D>

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: MATH-MATIC Interpreter

Mensajepor mcleod_ideafix » 08 Jun 2014, 15:59

De momento sólo puedo decir: "qué pasada!!". Luego me leo el post más detenidamente :)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: MATH-MATIC Interpreter

Mensajepor dancresp » 08 Jun 2014, 17:05

mcleod_ideafix escribió:De momento sólo puedo decir: "qué pasada!!". Luego me leo el post más detenidamente :)

Puestos a leer detenidamente, recomiendo comenzar por este otro: FLOW-MATIC Interpreter.

Es el primer lenguaje compilado de la historia, y el post también tiene una forma de ladrillo considerable... :D

... aunque en su día pasó con más pena que gloria... :?
Buscando la IP de la W.O.P.R.


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 8 invitados