CÓDIGOS DE OPERACION DEL LENGUAJE INTERPRETATIVO



SX n    00-07   Intercambio de pila.

Intercambia el byte superior de la pila computacional con esos "n" bytes
en la pila. El byte superior de la pila se considera el byte 0, por lo
que SX 0 no realiza ninguna acción. La secuencia de instrucciones

   SX 1
   SX 3
   SX 1
   SX 2

puede usarse para intercambiar los dos primeros números (dos bytes cada
uno) en la pila. Esta instrucción solo tiene acceso a los ocho primeros
bytes de la pila. Si la pila está vacía, puede producirse o no una
parada por error, dependiendo del intérprete de ML implementado.


NO      08      Sin operación.

Esto puede usarse para rellenar espacios (por ejemplo, para ignorar un
salto).


LB n    09nn    Inserta un byte literal en la pila.

Esto añade un byte a la pila computacional, que es el segundo byte de la
instrucción. Se producirá una parada por error si la pila se desborda.


LN n    0Annnn  Insertar número literal.

Esto añade los dos bytes siguientes a la pila computacional, como un
número de 16 bits. El desbordamiento de pila resulta en una parada por
error.


DS      0B      Número superior duplicado (dos bytes) en la pila.

Se producirá una parada por error si hay menos de dos bytes en la pila
de expresiones o si la pila se desborda.


SP      0C      Retirada de pila.

Los dos primeros bytes se eliminan de la pila computacional y se
descartan. El desbordamiento por debajo de la línea resulta en una
parada por error.


SB      10      Guardar puntero BASIC.

Si el puntero BASIC apunta al búfer de línea de entrada, se copia al
puntero guardado; de lo contrario, se intercambian los dos punteros.


RB      11      Restaurar puntero de BASIC.

Si el puntero guardado apunta al búfer de línea de entrada, se reemplaza
por el valor del puntero BASIC; de lo contrario, se intercambian los dos
punteros.

Normalmente, el puntero guardado apunta al siguiente elemento del búfer
de línea de entrada, mientras que el puntero BASIC apunta al programa en
ejecución. Cuando se interpreta una instrucción INPUT en BASIC, el
código de operación SB intercambia los dos punteros para que las
capacidades de manejo de expresiones del intérprete se apliquen a los
datos de entrada. Posteriormente, el RB restaura (intercambia de nuevo)
los punteros. En ejecución directa (modo comando), el puntero BASIC ya
está en el búfer de línea de entrada y el contenido del puntero guardado
carece de significado; en este caso, la instrucción SB no altera el
puntero BASIC, y el código de operación RB debería dejar ambos punteros
apuntando al siguiente elemento de la cadena de entrada.


FV      12      Obtener Variable.

El byte superior de la pila computacional se utiliza para indexar la
página 00. Se reemplaza por los dos bytes obtenidos. Se producen
detenciones por error en caso de desbordamiento o subdesbordamiento de
la pila.


SV      13      Almacenar variable.

Los dos primeros bytes de la pila computacional se almacenan en memoria
en la dirección de la página 00 especificada por el tercer byte de la
pila. Los tres bytes se eliminan de la pila.

El subdesbordamiento provoca una detención por error.


GS      14      Almacenar GOSUB.

El número de línea de la línea BASIC actual se inserta en la región
BASIC de la pila de control. Es esencial que la pila IL esté vacía para
que esto funcione correctamente, pero no se realiza ninguna comprobación
para esa condición. Se produce una detención por error en caso de
desbordamiento de la pila.


RS      15      Restaurar línea guardada.

Se extraen los dos primeros bytes de la región BASIC de la pila de
control, convirtiéndolos en el número de línea actual. Se establece el
puntero BASIC al principio de esa línea. Tenga en cuenta que esta es la
línea que contiene el GOSUB que provocó que se guardara el número de
línea. Al igual que con el código de operación GS, es esencial que la
región IL de la pila de control esté vacía. Si el número de línea
extraído de la pila no corresponde a una línea del programa BASIC, se
produce una parada por error.

Una parada por error también se produce por un desbordamiento de la
pila.


GO      16      GOTO.

Convierte en actual la línea BASIC cuyo número de línea es igual al
valor de los dos primeros bytes de la pila de expresiones.

Es decir, los dos primeros bytes se extraen de la pila computacional y
se busca en el programa BASIC hasta encontrar un número de línea
coincidente. El puntero BASIC se posiciona entonces al principio de esa
línea y se activa el indicador de modo RUN. El desbordamiento de la pila
y la inexistencia de una línea BASIC provocan paradas por error.


NE      17      Negación (complemento a dos).

El número en los dos primeros bytes de la pila de expresiones se
reemplaza con su valor negativo.


AD      18      Adición.

Sumar los dos números representados por los cuatro primeros bytes de la
pila de expresiones y reemplazarlos con la suma de dos bytes. El
desbordamiento de la pila provoca una parada por error.


SU      19      Substracción.

Restar el número de dos bytes en la parte superior de la pila de
expresiones de los dos bytes siguientes y reemplazar los cuatro bytes
con la diferencia de dos bytes. Esto es exactamente equivalente a la
secuencia de dos instrucciones

        NE
        AD

y hace El mismo error de parada por subdesbordamiento.


MP      1A      Multiplicación.

Multiplicar los dos números representados por los cuatro primeros bytes
de la pila computacional y reemplazarlos con los 16 bits menos
significativos del producto. Es posible un subdesbordamiento de la pila.


DV      1B      Dividir.

Dividir el número representado por los dos primeros bytes de la pila
computacional entre el representado por los dos siguientes.

Reemplazar los cuatro bytes con el cociente y descartar el resto.

Esta es una división de enteros con signo (complemento a dos), que
resulta en un cociente entero con signo. Un subdesbordamiento de la pila
o un intento de división por cero resultan en una parada por error.


CP      1C      Comparar

El número en los dos primeros bytes de la pila de expresiones se compara
con (se resta de) el número en el cuarto y quinto bytes de la pila, y el
resultado se determina como mayor, igual o menor. Los tres bits
inferiores del tercer byte enmascaran un salto condicional en el
programa IL para probar estas condiciones; si el resultado corresponde a
un bit, el siguiente byte del código IL se omite y no se ejecuta. Los
tres bits corresponden a las siguientes condiciones:

   bit 0 Resultado es menor
   bit 1 Resultado es igual
   bit 2 Resultado es mayor

Independientemente de si se realiza el salto, los cinco bytes se
eliminan de la pila. Esta es una comparación con signo (complemento a
dos), de modo que cualquier número positivo es mayor que cualquier
número negativo. Múltiples condiciones, como mayor o igual que o
desigual (es decir, mayor o menor que), se pueden probar formando el
byte de máscara de condición con la suma de los bits respectivos. En
particular, un byte de máscara de 7 forzará un salto incondicional y un
byte de máscara de 0 no forzará ningún salto. Los otros cinco bits del
byte de control se ignoran. El desbordamiento de pila resulta en una
parada por error. NX 1D Siguiente instrucción BASIC.


NX      1D      Siguiente Declaración de BASIC.

Avanza a la siguiente línea del programa BASIC si está en modo EJECUTAR,
o reinicia el programa IL si está en modo de comando. El resto de la
línea actual se ignora. En modo Ejecutar, si hay otra línea, se
convierte en la actual con el puntero al principio. En este momento, si
la condición de interrupción es verdadera, la ejecución se cancela y el
programa IL se reinicia después de imprimir un mensaje de error. De lo
contrario, la ejecución de IL continúa desde la dirección IL guardada
(véase la instrucción XQ). Si no hay más instrucciones BASIC en el
programa, se produce una parada por error.


LS      1F      Lista el Programa

Se supone que la pila de expresiones tiene dos números de 2 bytes. El
número superior es el número de línea de la última línea que se listará
y el siguiente es el número de línea de la primera línea que se listará.
Si los números de línea especificados no existen en el programa, se
asume la siguiente línea disponible (es decir, la que tiene el número de
línea inmediatamente superior). Si la última línea listada es anterior a
la primera, no se lista ninguna línea. Si la condición de interrupción
se cumple durante una operación de lista, se cancela el resto del
listado. El cero no es un número de línea válido y se produce una parada
por error si alguna de las especificaciones de número de línea es cero.
Las especificaciones de número de línea se eliminan de la pila.


PN      20      Imprime Número.

El número representado por los dos primeros bytes de la pila de
expresiones se imprime en decimal, suprimiendo los ceros iniciales. Si
es negativo, va precedido de un signo menos (guión) y se imprime la
magnitud. Es posible que se produzca un desbordamiento de pila.


PQ      21      Imprime Cadena de BASIC.

Los caracteres ASCII que comienzan con la posición actual del puntero
BASIC se imprimen en la consola. La cadena a imprimir termina con
comillas ("), y el puntero BASIC se deja en el carácter siguiente a la
comilla terminal. Se produce una parada por error si se inserta un
retorno de carro en la cadena.


PT      22      Imprimir Tabulador.

Imprime uno o más espacios en la consola, terminando en el siguiente
múltiplo de ocho posiciones de caracteres (desde el margen izquierdo).


NL      23      Nueva Línea.

Emite una secuencia de retorno de carro y salto de línea a la consola.


PC "xxxx"  24xxxxxxXx
PC "xxxx"  24xxxxxxXx   Imprimir Cadena Literal.

La cadena ASCII sigue al código de operación y su último byte tiene el
bit más significativo establecido en uno. La cadena de caracteres se
envía a la consola sin modificaciones; es decir, se emiten los ocho bits
de cada byte, de modo que solo el último byte se emite con el bit de
paridad establecido en uno. Esto, por supuesto, puede ser modificado por
la rutina de salida.


GL      27      Obtener Línea de Entrada.

Se aceptan caracteres ASCII desde la consola como Entrada para llenar el
búfer de línea. Si la longitud de la línea excede el espacio disponible,
se ignoran los caracteres sobrantes y se imprimen los caracteres de
timbre. La línea termina con un retorno de carro. Los códigos NUL y DEL
(hexadecimales 00 y FF) se ignoran; el salto de línea y DC3,
respectivamente, activan y desactivan el "modo cinta". Cualquier
carácter que coincida con el parámetro Retroceso elimina el carácter
anterior en el búfer de línea, si lo hay; si el búfer de línea está
vacío, el efecto es el de una cancelación. Cualquier carácter que
coincida con el parámetro Cancelar almacena un retorno de carro en la
primera posición del búfer de línea y finaliza la entrada. Al completar
una línea de entrada, el puntero BASIC se configura para apuntar al
primer carácter en el búfer de línea de entrada y se emite una secuencia
de retorno de carro y avance de línea.


IL      2A      Insertar línea BASIC.

Comenzando con la posición actual del puntero BASIC y continuando hasta
el retorno de carro, la línea se inserta en el espacio de programa
BASIC; para un número de línea, se utilizan los dos primeros bytes de la
pila de expresiones. Si este número coincide con una línea ya existente
en el programa, se elimina y la nueva la reemplaza. Si la nueva línea
consta solo de un retorno de carro, no se inserta, aunque cualquier
línea anterior con el mismo número se habrá eliminado. Las líneas se
mantienen en el espacio de programa ordenadas por número de línea. Si la
nueva línea que se va a insertar tiene un tamaño diferente al de la
línea anterior que se va a reemplazar, el resto del programa se desplaza
para dejar espacio o cerrar el hueco, según sea necesario. Si no hay
memoria suficiente para la nueva línea, el espacio del programa no se
modifica y se produce una parada por error (con la dirección IL
decrementada). Una parada por error normal se produce si se produce un
desbordamiento de la pila de expresiones o si el número es cero, que no
es un número de línea válido. Tras completar la inserción, el programa
IL se reinicia en modo comando.


MT      2B      Marca el espacio del programa de BASIC como Vacío.

También borra la región BASIC de la pila de control y reinicia el
programa IL en modo comando. Esta instrucción restablece los límites de
memoria y los punteros de pila, lo que indica que el espacio del
programa está vacío, y el número de línea de la primera línea se
establece en cero, lo que indica el final del programa. El resto del
programa no se altera, aunque ahora es vulnerable a la intrusión de la
pila de control. El programa puede recuperarse si se borra
accidentalmente almacenando un número de línea distinto de cero en los
dos primeros bytes del espacio de programa BASIC y solicitando
posteriormente una LISTA. Si esto se realiza en un medio legible por
máquina, puede recargarse. Cualquier ejecución de la instrucción IL
después de una instrucción MT destruirá el contenido de la memoria no
comprendida por los límites del programa en las ubicaciones 0020-0025.


XQ      2C      Ejecutar.

Activa el modo EJECUTAR. Esta instrucción también guarda el valor actual
del contador del programa IL para su uso por la instrucción NX y
establece el puntero BASIC al principio del espacio de programa BASIC.
Si no hay ningún programa BASIC, se produce una parada por error. Esta
instrucción debe ejecutarse al menos una vez antes de la primera
ejecución de una instrucción NX.


WS      2D      Detener.

Detiene la ejecución y reinicia el programa IL en el modo de comando.
Esta instrucción también vacía toda la pila de control (incluida la
región BASIC). Esta instrucción salta a la entrada de Inicio Caliente
del intérprete ML.


US      2E      Llamada a Subrutina de Lenguaje Máquina.

Los seis primeros bytes de la pila de expresiones contienen tres números
con las siguientes interpretaciones: el primer número se carga en el
registro A (o A y B); el siguiente número se carga en los 16 bits del
registro Índice; el tercer número se interpreta como la dirección de una
subrutina de lenguaje máquina que se llamará utilizando la secuencia
normal de llamada de subrutina (simulada para este propósito por el
intérprete ML). Estos seis bytes en la pila de expresiones se reemplazan
con el resultado de 16 bits devuelto por la subrutina. Un desbordamiento
de pila provoca una parada por error.


RT      2F      Retorno de Subrutina IL.

La pila de control IL se vacía para obtener la dirección de la siguiente
instrucción IL. Si toda la pila de control (IL y BASIC) está vacía,
produce una parada por error.


JS a    3000-37FF       Llamada a Subrutina IL.

Los once bits menos significativos de esta instrucción de 2 bytes se
añaden a la dirección base del programa IL para determinar la dirección
de la siguiente instrucción. El contenido anterior del contador del
programa IL se introduce en la región IL de la pila de control. Un
desbordamiento de pila provoca una parada por error.


J a     3800-3FFF       Salto.

Los once bits menos significativos de esta instrucción de 2 bytes se
añaden a la dirección base del programa IL para determinar la dirección
de la siguiente instrucción IL. El contenido anterior del contador del
programa IL se pierde.


BR a    40-7F   Rama Relativa.

Los seis bits menos significativos de este código de operación de
instrucción se añaden algebraicamente al valor actual del contador del
programa IL para obtener la dirección de la siguiente instrucción IL. El
bit 5 del código de operación es el signo, con + representado por 1 y -
por 0. El rango de esta rama es de 31 bytes desde la dirección del byte
siguiente al código de operación, en cualquier dirección. Un
desplazamiento de cero (es decir, el código de operación 60) resulta en
una parada de error. La operación de bifurcación es incondicional.


BC a "xxx"   80xxxxXx-9FxxxxXx  Rama de coincidencia de cadena.

La cadena de caracteres ASCII en el IL que sigue a este código de
operación se compara con la cadena que comienza con la posición actual
del puntero BASIC, ignorando los espacios en blanco en el programa
BASIC. La comparación continúa hasta que se encuentra una discrepancia o
se alcanza un byte IL con el bit más significativo establecido en uno.

Este es el último byte de la cadena en el IL y se compara como un
carácter de 7 bits; si es igual, el puntero BASIC se posiciona después
del último carácter coincidente en el programa BASIC y el programa IL
continúa con la siguiente instrucción en secuencia. De lo contrario, el
puntero BASIC no se modifica y los cinco bits inferiores del código de
operación de rama se añaden al contador del programa IL para formar la
dirección de la siguiente instrucción IL. Si las cadenas no coinciden y
el desplazamiento de rama es cero, se produce una parada por error.


BV      A0-BF   Bifurca si No es Variable.

Si el siguiente carácter no en blanco al que apunta el puntero BASIC es
una letra mayúscula, su código ASCII se duplica y se inserta en la pila
de expresiones. El programa IL avanza a la siguiente instrucción en
secuencia, dejando el puntero BASIC posicionado después de la letra; si
no es una letra, se realiza la bifurcación y el puntero BASIC se deja
apuntando a ese carácter. Se produce una parada por error si el
siguiente carácter no es una letra y el desplazamiento de la bifurcación
es cero, o en caso de desbordamiento de la pila.


BN a    C0-DF   Bifurca si no es un número

Si el siguiente carácter no en blanco al que apunta el puntero BASIC no
es un dígito decimal, los cinco bits inferiores del código de operación
se añaden al contador del programa IL; si es cero, se produce una parada
por error. Si el siguiente carácter es un dígito, este y todos los
dígitos decimales siguientes (ignorando los espacios en blanco) se
convierten en un número binario de 16 bits que se inserta en la pila de
expresiones. En cualquier caso, el puntero BASIC se posiciona en el
siguiente carácter que no sea un espacio en blanco ni un dígito. Un
desbordamiento de pila resultará en una parada de error.


BE a    E0-FF   Bifurca si no es un caracter Endline.

Si el siguiente carácter no en blanco al que apunta el puntero BASIC es
un retorno de carro, el programa IL avanza a la siguiente instrucción en
secuencia; de lo contrario, los cinco bits inferiores del código de
operación (si no es cero) se suman al contador del programa IL para
formar la dirección de la siguiente instrucción IL. En cualquier caso,
el puntero BASIC se deja apuntando al primer carácter no en blanco
encontrado; esta instrucción no omitirá el retorno de carro, que debe
permanecer para la prueba de la instrucción NX. Al igual que con las
otras ramas condicionales, la rama solo puede avanzar el contador del
programa IL de 1 a 31 bytes; un desplazamiento de cero resulta en una
parada de error.