Eggología

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 6 de agosto de 2021; las comprobaciones requieren 19 ediciones .

La eggología  es el estudio de las características no documentadas de las calculadoras .

Origen

El nombre apareció por primera vez en la URSS y tiene un carácter cómico. Presuntamente proviene del mensaje de error "EGGOG" ( Error en inglés   - error), que fue emitido por calculadoras programables de segunda generación de producción soviética ( Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 , MS 1104) en pantallas de siete segmentos . El término apareció por primera vez en la revista " Tekhnika — Molodozhi " después de una serie de artículos de M. Pukhov dedicados a la programación en microcalculadoras de la serie " Electronics B3-34 " [1] , y una serie de nueve historias sobre un fantástico viaje desde la Luna a la Tierra bajo el título general “Kon -Tiki“: el camino a la Tierra” [2] . En este ciclo, además de los programas de juego, se describieron varias características no documentadas de microcalculadoras y mensajes de video, muchas de las cuales se obtuvieron manipulando las teclas luego de que apareciera el mensaje de error "YERGOG" ( ).

Los lectores de la revista respondieron con gran entusiasmo a la historia sobre las posibilidades indocumentadas descubiertas de las microcalculadoras, comenzaron a buscar otras nuevas y, al final del ciclo "Kon-Tiki ...", apareció una pequeña sección "Eggogology News". Con la ayuda de técnicas no documentadas publicadas en él, se escribieron muchos programas de juegos nuevos, la mayoría de los cuales simplemente no se pudieron crear con herramientas estándar debido a los recursos limitados de las calculadoras de la familia B3-34 .

Direcciones de eggogology

Inicialmente, el tema de interés era la posibilidad de formar combinaciones alfanuméricas en la pantalla, que contenían no solo los números 0-9, sino también los caracteres hexadecimales mostrados por la calculadora como - , L , C , G , E y un espacio. Se podrían obtener manipulando el mensaje no retentivo YGGOG, que emite la microcalculadora al intentar realizar una operación incorrecta (dividir por cero, etc.). Dichos "números" pueden almacenarse en registros de memoria y usarse como mensajes en programas de juegos. La revista Technique for Youth describió una técnica para obtener una gran variedad de “videomensajes”, desde la letra “G” para el programa Lunolet-1 [1] hasta toda una caricatura sobre el vuelo de una nave espacial basada en la historia “The Camino a la Tierra” [3] .

En el futuro, una de las áreas de eggogology fue ampliar el rango de números procesados ​​(los números con órdenes de 100 a 199 también se muestran en la pantalla como YYGOG, ver números "No estándar" ) y estudiar la reacción de la microcalculadora a intenta realizar operaciones con números fuera del rango estándar.

Otra rama de la eggogología estudió las características no documentadas del modo de programación; los entusiastas encontraron formas de ingresar comandos no documentados, por ejemplo, que contenían el carácter "vacío" (F), estudiaron las posibilidades de uso no estándar del espacio de direcciones de los programas (ver Ramas principales y laterales ), modo PSC .

Después de que el ingeniero F. Lazarev analizara la arquitectura de hardware de las microcalculadoras soviéticas en 2011 y leyera el contenido de la ROM [4] , muchas de las características inusuales del PMC recibieron una explicación lógica. Quedó claro que "Darkness" es un bucle del firmware PMC, y el procesador principal K745IK1302 genera el mensaje "YGGOG" por tiempo de espera, cuando ninguno de los procesadores esclavos pudo procesar el comando ingresado [5] . Leer el firmware de PMC hizo posible crear un emulador que reproduce con precisión todas las características no documentadas de las microcalculadoras [6] .

Números "no estándar"

Eggogology afirma que el orden ( exponente ) del rango de números procesados ​​por la calculadora está limitado módulo 1000 y divide este rango en los llamados pisos o " niveles " [7] . Cada nivel es una centena del rango de 0 a 999. Es decir, el nivel cero son números con una base de poder de 0 a 99, el primer nivel son números con un exponente de 100 a 199, etc. Hay diez niveles en total, y menos el primero el nivel es equivalente al noveno (es decir, el exponente -80 en la representación de la microcalculadora es equivalente a 920), menos el segundo - al octavo (por ejemplo, el exponente -180 es equivalente a 820), etc

La documentación limitó el valor máximo de los números sobre los que se pueden realizar operaciones matemáticas al valor ±9,9999999 × 10 ±99 (es decir, cero y menos los primeros niveles). De hecho, si ingresa el número 1 × 10 50 en la microcalculadora (para lo cual es suficiente una secuencia de pulsaciones de teclas 1 VP 50 ) y lo eleva al cuadrado (presione Fx² ), aparece un mensaje en la pantalla " YGGOG ". Esta indicación de documentación es indicativa de un mensaje de error, ya que el número 1 × 10,100 está fuera del rango "estándar". Resulta que este no es un mensaje de error, sino una forma de indicar los números del primer nivel, y con este número puede realizar las operaciones habituales: sumar, multiplicar, dividir, calcular valores de función, almacenarlo en un registro de memoria , llámalo desde el registro. De la misma manera, puede trabajar con números del segundo nivel (por ejemplo, 1 × 10 200 , la forma más fácil de obtener ese número es elevar al cuadrado el número 1 × 10 100 ). Para saber los valores reales de tales números, había que dividirlos por 1 × 10 99 u otros números similares para reducirlos a un número del nivel cero (por módulo absoluto no más de 9,9999999 × 10 99 ).

En otras palabras, se proporcionó una forma de expandir el rango de números manejados por acciones estándar a ±9.9999999 × 10 299 . También fue posible con algunos trucos (con la ayuda de programas especialmente escritos) obtener números hasta ±9.9999999 × 10 799 y analizar su valor (es decir, averiguar la mantisa y el exponente). Con la ayuda de tales "cálculos", se demostró que el noveno nivel representa números con un valor negativo de la base del grado (por ejemplo, 1 × 10 920 era la representación equivalente del número 1 × 10 −80 ). Los números del octavo nivel (números de ±1 × 10800 a ±9,9999999 × 10899 y también de ±1 × 10900 a ±9,9999999 × 10900 ) no se pueden almacenar después de recibirlos, ya que se convirtieron inmediatamente en un cero regular, independientemente de ya sea de qué lado "levantarse" hacia ellos (desde el séptimo o noveno nivel).

Clasificación de niveles numéricos

Nivel numérico nombre de numeros Rango de números Breve descripción de un número de este rango
Nulo Números ordinarios con orden no negativo ±1 a ±9,9999999 × 1099 Puedes hacer cálculos normales.
El primero "HUEVO" ±1 × 10 100 a ±9,9999999 × 10 199 Puede realizar cálculos normales, pero se muestran en la pantalla como
Segundo "3GGOGi" ±1 × 10200 a ±9,9999999 × 10299 Puede realizar cálculos normales, pero se muestran en la pantalla como . Realice un salto incondicional a la dirección que coincida con los dos primeros dígitos del exponente (del 20 al 29)
Tercero "Monstruos indomables" De ±1 × 10300 a ±9,9999999 × 10399 Capaz de transferir arbitrariamente la calculadora al modo de ejecución del programa o hacer que se congele
Cuatro "OS Hombres lobo" De ±1 × 10400 a ±9,9999999 × 10499 Copian la estructura de los niveles de forma distorsionada y se utilizan para analizar otros números. Distorsionar el contenido del registro C
Quinto "Oscuro" De ±1 × 10500 a ±9,9999999 × 10599 Cuando intenta enviar a la pantalla, la calculadora se congela. El indicador se apaga, el rendimiento se restablece después de apagar y encender (el MC 1104 tenía un botón especial para suprimir este efecto)
Sexto "S-YGGOG-hombres lobo" ±1 × 10600 a ±9,9999999 × 10699 Distorsionar el contenido del registro C
Séptimo "Monstruos largos" De ±1 × 10700 a ±9,9999999 × 10799 Copian la estructura de los niveles en forma distorsionada, se utilizan para analizar otros números.
Octavo (menos segundo) "ceros" ±1 × 10800 a ±9,9999999 × 10900 o ±1 × 10 −200 a ±9,9999999 × 10 −100 ( según el método de producción) Convierte a cero normal inmediatamente
Noveno (menos uno) Números ordinarios con orden negativo De ±1 × 10 −99 a ±9,9999999 × 10 −1 Puedes hacer cálculos normales.

Descripción detallada

"3GGOGi"

Ocultos bajo este mensaje hay números desde ±1 × 10200 hasta ±9.9999999 × 10299 . Puede realizar operaciones aritméticas normales en ellos. Cuando aparece 3GGOG en la pantalla, el punto decimal conserva la posición del número anterior y el contador de direcciones del programa se establece en una dirección igual a los dos primeros dígitos del orden 3GGOG.

Cualquier 3GGOG puede ser "descodificado" por los comandos: FABT, punto (su orden aparece a la derecha de la pantalla), FAVT (la mantisa del antiguo 3GGOG aparece a la izquierda y el orden --L o --3 aparece a la derecha).

Al llamar a 3GGOG desde el registro de memoria 0-9 y luego presionar VP o un punto decimal, la calculadora se comporta de manera similar, como si apareciera un "supernúmero" en la pantalla con una orden que comienza con el número de registro. Por ejemplo, si se llama a 3YGOG desde el registro 1, aparece el mensaje YYGOG; desde el registro 2 - nuevamente 3GGOG; desde el registro 3: aparece un comando "estropeado" "3" en el modo de programación; del registro 4 - Oscuridad; del registro 7 - "Monstruo largo".

"OS Hombres lobo"

De ±1 × 10400 a ±9,9999999 × 10499 .

Al sacar el "hombre lobo OS" del registro, coloca su "cola" en el registro C. "Cola" también es un supernúmero cuyos dos primeros dígitos del exponente son los dos últimos dígitos del orden del "hombre lobo OS". ". Si la "cola" también es un "hombre lobo OS" (esto sucede con números con órdenes de 440 a 449), entonces también pone su "cola" en el registro C. Hay hombres lobo de tercer orden: números con orden 444.

Ejemplo:

V/O FPRG Fx 2 Fx 2  × Fx 2 X→PS Sx S/P FAVT V/O 1 VP 22 V↑ 1 VP 50 S/P
P→XS en pantalla 0
P→XS en pantalla 0
P→XS en pantalla 0
P → XS en la pantalla la última "Cola" con tres letras E.

"S-YGGOG-hombres lobo"

De ±1 × 10600 a ±9,9999999 × 10699 .

Si el "C-YGGOG-werewolf" se saca del registro, quedará cubierto por el contenido del registro C y se moverá al registro Y. Al realizar una operación aritmética en él, G.YGOG.

Basado en las propiedades de "S-YGGOG-werewolf", el llamado. " Análisis ASO ":

  1. En el registro 0 ponemos "C-YGGOG-werewolf" (es posible en otro registro)
  2. En el registro A (¡solo!) Colocamos YEGGOG.
  3. P→XA P→X0 PX - contenido del registro C - mantisa y potencia de 3 dígitos
  4. /−/ — contenido de P0

Precauciones al trabajar con "C-ERGOG-hombres lobo":

  1. Se acerca la "oscuridad":
    • si después de "ACO-análisis" presione VP, FABT
    • si inmediatamente después de la formación de YEGGOG, saca "S-YGGOG-hombre lobo"
    • si sacas "S-YGGOG-werewolf" con "PSCh-mode"
    • si "C-YGGOG-werewolf" sale del registro C
"Monstruos largos"

Otro nombre es "Números K".

De ±1 × 10700 a ±9,9999999 × 10799 .

Cuando aparece un monstruo largo, aparece el siguiente número en el indicador:

1.2345678⋅10 735 = [50.12345678 3] Donde el primer 5 en el indicador es el tercer dígito del exponente y el último 3 en el indicador es el segundo dígito del exponente. Y el "Monstruo largo" en sí mismo está escrito en la dirección 73 del programa, que corresponde a los dos primeros dígitos del orden del número.

Comandos no documentados

Equipos "con flechas" en B3-34

En la calculadora B3-34 (y compatible con ella MK-54 , MK-56 ) en todos los comandos de registro, en lugar de la tecla de número (letra) del registro, puede usar la tecla ↑ , es decir, comandos no documentados IP↑ , P↑ , KIP↑ , KP↑ están disponibles , Kx≠0↑ , Kx≥0↑ , Kx<0↑ , Kx=0↑ , KBP↑ , KPP↑ . Cuando estos comandos se ingresan en el modo de programación, se generan códigos que terminan en E. Cuando se ejecutan dichos comandos, en realidad se accede al registro 0; Los comandos de acceso directo al registro son completamente similares IP0 y P0 , pero el resto de comandos que dan acceso indirecto al registro 0 tienen una diferencia importante con los comandos correspondientes KIP0 , KP0 y otros: no reducen el valor del registro 0 cuando se accede. Esto hace posible acceder indirectamente al registro 0 de dos formas: con y sin decrementar el valor en el registro.

El uso de "comandos de flecha" simplifica el recorrido de registros en un ciclo, lo que permite que el valor en el registro 0 se use como contador de ciclo e índice de registro al mismo tiempo. Por ejemplo, el programa más simple para agregar valores en los registros 1-N (suponiendo que los datos se escriben en los registros y N se ingresa en el registro X antes de ejecutar el programa) se ve así:

  • P0 0 KIP ↑ + FL0 02 S / P (datos en registros de 1 a N) - 7 comandos.

Opción sin "comandos de flecha":

  • P0 0 IP0 PE F⟳ KIPE + FL0 02 S / P  - 10 equipos;
  • P0 2 + P1 0 KIP1 + FL0 05 S / P (datos en registros de 2 a N + 1) - 10 comandos y dos registros adicionales (algo más rápido).

Las instrucciones para saltos indirectos "con flechas" le permiten almacenar la dirección del salto en el registro 0 y saltar a él sin modificar el contenido. Dado que una instrucción de salto indirecto toma un paso del programa y una instrucción de salto regular toma dos, escribir la dirección en un registro gana un paso del programa por cada salto a esa dirección.

Para las calculadoras MK-61 y MK-52 , la tecla " ↑ " corresponde al nuevo registro de memoria E, y los códigos de operación con el registro E corresponden a los "comandos de flecha" B3-34, por lo que los "comandos de flecha" no están disponibles en estas calculadoras [8] (ver tabla). Las designaciones de teclas P , IP y ↑ en B3-34 corresponden a Х→П , П→Х y Е en MK-61 y MK-52.

Códigos de comando Equipos B3-34 Equipos MK-61, MK-52
7E Kx≠0↑ Kx≠0E
8E KBP↑ KBPE
9E Kx≥0↑ Kx≥0E
-MI Punto de control↑ CATP
LE PK↑ KX→PE
CE Kh<0↑ Kx<0E
GE KIP↑ CP→ÉL
EE.UU. Kx=0↑ Kx=0E

La falta de disponibilidad de "comandos de flecha" en los modelos MK-61/MK-52 crea dificultades para adaptar programas de B3-34 que usan estos comandos. Para los comandos de salto indirecto, el problema se resuelve simplemente: la dirección deseada se escribe en el registro E, que no se usa en los programas para B3-34, y los comandos de "flecha" se cambian a comandos que indican el registro E. Pero para el comandos KIP↑/KP↑, la situación es mucho más complicada: Eliminar cada uno de ellos aumenta el tamaño del programa en al menos 3 pasos, lo que puede hacer que se agote la memoria del programa. En los nuevos modelos MK-152/MK-161, están disponibles nuevos comandos de registro indirecto de dos pasos RKIP00/RKP00, que funcionan de la misma manera que KIP↑/KP↑ en B3-34; cada una de estas instrucciones aumenta el programa en un solo paso, y la memoria de programa mucho más grande de las nuevas calculadoras hace que este aumento sea casi insignificante.

Operaciones incorrectas con la tecla K

En la calculadora B3-34 , la mayoría de las operaciones no documentadas con la tecla K generan el mensaje YYGOG. Estos son los comandos K3-K9, K+, K−, K×, K÷, , K↑, K/−/, KVP, KSx y K punto decimal. Los comandos K1 y K2 son equivalentes a la operación KNOP.

En MK-61 y MK-52 , solo los comandos К−, К×, К÷ conducen al mensaje YYGOG. Los comandos K1 y K2 también son equivalentes a la operación KNOP. Los códigos de los comandos restantes están documentados y se utilizan para convertir medidas de tiempo y ángulo, determinar el módulo y el signo de un número, las partes enteras y fraccionarias de un número, el mayor de dos números, operaciones lógicas y generar un número aleatorio.

Una operación incorrecta en el MK-61 y MK-52 es también la conversión de minutos (segundos) a grados y si el valor de minutos o segundos es mayor o igual a 60.

El mensaje YYGOG, recibido con la ayuda de operaciones incorrectas con la tecla K, no es un "supernúmero" del primer "nivel" y no puede almacenarse en el registro de memoria, pero puede usarse para mostrar dígitos hexadecimales en el indicador, por ejemplo:

1 K− (se muestra YYGOG) VP VP ↑ (se muestra la letra E).

La letra E resultante se puede almacenar en registros de memoria y recuperar desde allí, y el uso de registros 0-3 también se puede convertir en caracteres de otros dígitos hexadecimales:

P0 BOTÓN KIP0 IP0 (G) KIP0 BOTÓN IP0 (S) KIP0 BOTÓN IP0 (L) KIP0 BOTÓN IP0 (-) KIP0 BOTÓN IP0 (9), etc.

Se utilizaron técnicas similares para formar mensajes de video, por ejemplo, en programas de juegos.

Recibir un mensaje de video que comience con el número F (que se muestra como un espacio vacío) puede interrumpir el funcionamiento normal de la calculadora (distorsión del programa y los datos, transición espontánea al modo de conteo, etc.). Esto se puede evitar "expulsándolo" inmediatamente con el comando ↑ , dado al menos cuatro veces [8] (según otras fuentes, siete veces [9] ), sin intentar realizar ninguna otra operación.

Entrada artificial de códigos de comando

Un paso de la memoria de programa de la microcalculadora puede contener dos dígitos hexadecimales, es decir, teóricamente puede haber 256 códigos de comando diferentes. De estos, 214 están documentados en el manual de usuario del MK-61/52 Existe una técnica artificial que te permite ingresar 12 de los 42 códigos no documentados. Para ello, se ingresa uno de los comandos de transición, por ejemplo, BP (código 51) seguido de dos dígitos hexadecimales, percibidos por la calculadora como la dirección de transición. Después de eso, el comando de transición se sobrescribe con el comando KNOP "ficticio", y la calculadora percibirá el siguiente paso durante la ejecución del programa no como una dirección de transición, sino como un comando [10] . Algunos de estos códigos también se pueden ingresar usando las operaciones de la tecla K no documentadas descritas en la subsección anterior.

Códigos de comando Acciones de comando Entrar con la tecla K
27 Muestra el mensaje YYGOG K−
28 Muestra el mensaje YYGOG ×
29 Muestra el mensaje YYGOG
2L Muestra el mensaje YYGOG No
2C Muestra el mensaje YYGOG No
2G Muestra el mensaje YYGOG No
2E Muestra el mensaje YYGOG No
3C Muestra el mensaje YYGOG No
3G Copia el contenido del registro X a X1. Se guarda el contenido de los registros X, Y, Z y T. No
3E Mueve el contenido del registro X a X1, copia el contenido del registro Y a X.

Se guarda el contenido de los registros Y, Z y T.

No
55 No hace nada (equivalente al comando KNOP) K1
56 No hace nada (equivalente al comando KNOP) K2

Los códigos 55 y 56 se utilizaron en los idiomas de entrada de los análogos a pequeña escala de MK-52 [11] .

Esta técnica no es aplicable para ingresar los 30 códigos de comando no documentados restantes que contienen el dígito hexadecimal F (que se muestra en el indicador como un carácter vacío), ya que no hay ninguna tecla en el teclado de la calculadora para ingresar el número F (que no debe confundirse con el prefijo clave F). Algunas formas de ingresar dichos códigos se discutirán en la siguiente subsección.

Introducción de códigos de comando que contengan el número F

En la calculadora MK-52 , es posible generar cualquiera de los 256 códigos de instrucción para cualquiera de las direcciones de memoria del programa. Para ello, se utiliza la siguiente característica de escritura de programas en PROM. En el proceso normal de escribir un programa, primero debe borrar la sección correspondiente de la memoria PROM. Si esto no se hace, entonces hay una adición lógica bit a bit de los códigos de instrucción de la RAM con los códigos que estaban previamente en la PROM [12] . Entonces, si el comando BP (código 51) está escrito en la EPROM en una dirección determinada, y el comando B↑ (código 0E) está ubicado en la RAM en la dirección correspondiente, entonces el resultado de la suma lógica será un comando con código 5F (que conduce a la congelación de la microcalculadora). Las acciones de los comandos con códigos que contienen el número F se muestran en la siguiente tabla:

Códigos de comando Acciones de comando
0F Comando FBx documentado
1F, 2F, 3F No hacer nada (equivalente al comando KNOP)
4F Equivalente al comando X→P0 (código 40)
5F Hace que la calculadora se congele. El indicador se apaga, la capacidad de trabajo se restablece después de apagar y encender la alimentación.
6F Equivale al comando P→X0 (código 60)
7F Equivale al comando Kh≠00 (código 70)
8F Equivalente al mando KBP0 (código 80)
9F Equivale al comando Kh≥00 (código 90)
-F Equivalente al comando KPP0 (código -0)
LF Es equivalente al comando КХ→П0 (código L0)
FC Es equivalente al comando Khx<00 (código С0)
novia Es equivalente al comando KP → X0 (código G0)
FE Equivalente al mando Kx=00 (código E0)
F0, F1, ...FF No hacer nada (equivalente al comando KNOP)

Desafortunadamente, los comandos no documentados 7F, 8F, ... EF, que brindan acceso indirecto al registro 0, reducen su contenido, al igual que sus contrapartes documentadas con los códigos 70, 80, ... E0 y no pueden servir como reemplazo del " flecha" comandos en B3 -34 .

En B3-34 y MK-61 , que no tienen PROM, también es posible ingresar algunos comandos con códigos que contienen el número F, pero solo en algunas direcciones fijas. Una forma es usar los comandos B / 0 PPC N en modo de cálculo manual (F ABT), N  - cualquiera de los registros (0-9, A-E). En este caso, la microcalculadora ingresa al modo de programación e inserta el código F N en la dirección 30+ N (para registros de letras A-E, respectivamente, 40-44). Tenga en cuenta que al usar los registros 0-6, el resultado depende de su contenido [ ]13 Para ello, primero se crea un “super número” aplicando dos veces el comando VP con una suma de órdenes superior a 99 (por ejemplo, VP 10 VP 90), y luego, tras aparecer la señal YYGOG, pulsando el botón Teclas “VP punto decimal 0”. Esto también pone a la calculadora en modo de programación y, en este ejemplo, el comando F1 se escribirá en la dirección 51. El segundo carácter tanto de la dirección como del comando está determinado por el primer exponente en la primera instrucción VI (por ejemplo, VI 20 VI 80 VI .0 da el comando F2 en la dirección 52, etc.)

Uso no documentado del punto decimal en un programa

El comando "punto decimal" (código 0-) utilizado en el programa (excepto en casos de uso documentado - para ingresar un número de acuerdo con el programa signo por signo), reemplaza el valor en el registro X con el que estaba en él después el último de los comandos 0, 1 , … 9, V↑, P→X0, P→X1, … P→X9, P→XA, … P→XE [14] .

Maneras no documentadas de diagnosticar errores

Cuando se produce la señal EGGOG durante el conteo del programa, hay dos formas no documentadas de determinar qué operación resultó en la parada [8] :

  1. Pulsando la tecla ↑ en B3-34 (B↑ en MK-61/52). Si YYGOG todavía está en el indicador, entonces se ha producido un desbordamiento, y si el número es una operación incorrecta, el "culpable" es este número.
  2. Pulsando la tecla VP. Posibles indicaciones del indicador y los errores correspondientes:
    • "YGGOG 00" - desbordamiento ("supernúmero" del primer "nivel")
    • "G.GGOG 00" - división por cero, cálculo del logaritmo desde cero, función de potencia 0 0 , operación incorrecta con la tecla K.
    • "EG.GOG 00" - cálculo de tg 90 °.
    • "E.GGOG 00" - cálculo del arcoseno o arcocoseno de un número mayor que 1.
    • "YERGOG 00" (con un punto decimal en el mismo lugar que en el argumento) - el argumento positivo de la función exponencial es mayor que lo permitido
    • "−YERGOG 00" (con un punto decimal en el mismo lugar que en el argumento): el argumento negativo de la función exponencial es mayor que el valor permitido, o extrayendo la raíz cuadrada de un número negativo.

El segundo método no funciona después del primero, y viceversa. Para aplicar ambos diagnósticos, debe ejecutar el programa dos veces con los mismos datos de origen. En el modo de cálculo manual, esto también funciona, pero generalmente no es necesario, ya que ya está claro qué operación resultó en el error.

Instrucción B/0 fuera de una subrutina

La instrucción B/0, destinada a terminar subprogramas, cuando se usa en el programa principal, por regla general, salta a la dirección 01. Esto se usa a veces para acortar el programa reemplazando dos instrucciones BP 01 con una B/0. Esta característica se usa especialmente cuando se usa el espacio de direcciones del programa de una manera no estándar (ver Ramas principales y laterales ). Sin embargo, a veces el uso de esta función conduce a un resultado incorrecto.

El motivo de esta función es que las direcciones desde las que se llaman las subrutinas se escriben en la pila de retorno de cinco registros, y se elimina la instrucción B / 0 y el retorno se produce a la dirección uno mayor. Si no se ha escrito nada en la pila de retorno, se almacenan ceros en ella y la instrucción B / 0 salta a la dirección 01. Lo mismo sucederá si no se ingresaron más de cuatro direcciones en la pila de retorno al llamar a las subrutinas y todas ellas fueron recuperada al regresar: la siguiente dirección recuperada será cero.

Sin embargo, si se insertan cinco direcciones en la pila de retorno, cuando se extrae la primera de ellas, se forma una "dirección de saboteador" en el último registro, cuyos dígitos coinciden con el último dígito de la dirección que estaba allí antes. A medida que se extraen otras direcciones de la pila de retorno, el saboteador de direcciones llena todos sus registros y luego, si la instrucción B/0 se usa fuera de la subrutina, el salto no procederá correctamente [8] .

Puede borrar la pila de retorno usando ZGGOG con mantisa cero: Cx B↑ ÷ VP Fx 2 Cx ↔ Cx

Acceso indirecto a un registro que contiene un número fuera de rango

Si alguno de los registros 7-E contiene un número cuyo módulo es menor que uno, entonces al acceder indirectamente a él se forma una dirección de transición, determinada por la mantisa y el último dígito del orden [8] (ver tabla, M N  - mantisa de dígito N )

Último dígito del pedido Dirección de salto para pedidos negativos Dirección de salto para pedidos positivos
una M 7 M 8 METRO 1 METRO 2
2 M 7 M 8 M 2 M 3
3 M 7 M 8 M 2 M 3
cuatro METRO 6 METRO 7 METRO 4 METRO 5
5 METRO 5 METRO 6 METRO 5 METRO 6
6 METRO 4 METRO 5 METRO 6 METRO 7
7 M 2 M 3 M 7 M 8
ocho M 2 M 3 M 7 M 8
9 METRO 1 METRO 2 M 7 M 8
0 0M 1 0M 1

Modo PSC

El “modo pseudo-conteo” es una técnica para generar combinaciones alfanuméricas arbitrarias en la pantalla de una microcalculadora, la llamada. "palabras". Se basa en la transferencia del PMC a un modo especial de operación, en el que los códigos registrados en la memoria del programa (o más bien, sus primeros caracteres) se leen en el indicador. Descrito en la nota "Novedades de eggogología" "Técnicos - Jóvenes" N° 6 de 1987 [15] . En este artículo, S. Bannikov, I. Emelyanov, B. Muradov son los descubridores del modo PFC. También se dan nombres alternativos para el modo: "anormal", "modo de recopilación".

Antes de ingresar el PMC en el modo PSC, se escribe un programa corto en la memoria, cuyos códigos de comando comienzan con todos los caracteres posibles (por conveniencia, generalmente se usan caracteres dobles de la forma 00 , 11 , ..., EE ) .

El ingreso directo al modo PSC se realiza emitiendo los comandos 6 F10 x K-VP. 0 V/O V/O BP V/O . Este procedimiento es esencialmente una forma de obtener un comando vacío-vacío. También es posible ingresar al modo PSC desde el área de "monstruos largos".

En el modo PSC, los valores clave cambian. V/O y S/P ahora se usan para cambiar de fuera de línea a modo de programa y viceversa. Los comandos FPRG y FABT , así como cualquier "supernúmero" devuelven el PMK al funcionamiento normal. Las teclas SH permiten desplazarse por el programa grabado en la memoria. Las teclas BP y PP transfieren el punto de visualización y lectura a 10 direcciones en lo profundo del programa, y ​​también le permiten operar con el número en el indicador directamente con códigos de comando.

La tecla VI lee en el primer registro del indicador un carácter de la dirección de memoria del programa actual. La formación de "palabras" comienza con una pieza de trabajo de la forma 11111111 , el carácter deseado se lee de la celda de memoria de programa correspondiente y luego, usando los comandos VP /-/ 1 PA KIPA IPA , el último registro se descarta de la pieza de trabajo , y se escribe cero en lugar del primero, el cual, usando el comando VP puede ser reemplazado por el siguiente carácter.

El método le permite ingresar combinaciones alfanuméricas y un espacio (ficticio). Se lee un espacio desde cualquier dirección de "zona oscura". Sin embargo, debido a las peculiaridades de la operación del PMK después de la aparición del "ficticio", se requieren acciones adicionales (borrar la pila, una secuencia complicada de comandos para acortar la pieza de trabajo, observar restricciones en el uso de las teclas ShG ) .

Para ingresar al modo PSCh, técnicamente, se puede usar cualquier espacio alfanumérico que contenga de 6 a 8 caracteres y comience con G, E o carácter “vacío”, otros caracteres iniciales darán error al presionar las teclas “VP-punto”. Después de los comandos VP-punto-dígito , la calculadora ya está en modo PFC con la tecla K activada  ; esto se puede verificar presionando 0 (para desactivar la tecla K), luego V / O y C / P : ya funcionarán en una nueva forma. Pero el uso del modo PSCh es difícil porque al ingresarlo, el espacio alfanumérico inicial se escribe en la pila de retorno a partir del 3er dígito, y cada vez que presiona V / O o BP, se produce un "retorno" en la dirección tomada de esta pila (el comando V/O además le agrega 1). Si se produjo un retorno a la dirección de la "zona oscura" en el comando V / O, la calculadora sale del modo PSC. Por lo tanto, en el momento de eliminar la dirección E0 de la pila, en lugar de V / O, debe presionar el BP. Ejemplo:

(E000000.) Punto VP 0 (00 0.0 51) 0 (E000000.) V/O (00 00 0.0 61) V/O (.E.1.) V/O (.E.2.) S/P ( .E.3.) — hubo una salida del modo PSC al modo de programación.

(Е000000.) Punto VP 0 (00 0.0 51) 0 (Е000000.) V / O (00 00 0.0 61) BP (00 00 0.0 E0) V/O ( 00.01) V/O (00.01 ) S / P (E000000) .) - la calculadora permaneció en modo PSC, la pila de retorno se borró.

(E89-LCG.) Punto VP 0 (00 0.0 51) 0 (E89-LCG.) BP (00 00 0.0 60) BP (00 00 0.0 E8) BP (la pantalla se queda en blanco) - saltando a la dirección "9-" led para colgar PMK.

Características no documentadas del comando VP

El comando VI convierte 0 en 1 (en este caso, solo cambia el valor del registro X en la pila, el resto de los registros de la pila conservan sus valores). Esto se usa en el programa de cálculo factorial para reducirlo, reemplazando varias instrucciones (rama condicional, su dirección, ingresando uno) con una instrucción VI [16] .

Además, el comando VP es el único comando (tanto en el MK-54 como en el MK-61) que se comporta correctamente en los modos manual y paso a paso (!), pero puede comportarse incorrectamente en el modo automático. Este matiz introduce a los principiantes en un estupor (ya que el comando funciona correctamente en el modo paso a paso y, por lo tanto, no es posible encontrar un error en el programa), y el error solo se puede corregir reemplazando los comandos de "número" , VP con los comandos "número", F10 X , " x" , pero esto requiere un paso adicional.

equipo de WP . (punto decimal) realizado en cualquier número, a excepción de las combinaciones que comienzan con E o G, imprime inmediatamente YYGOG, y si hay espacio en la memoria para dos comandos, es mucho más rápido que otros métodos de salida YYGOG artificial: operaciones incorrectas y K− , que provocan una pausa de unos 3 segundos. El EGGOG "largo" habitual omite un comando, pero el instantáneo (VP .) no lo hace.

Ramas principales y laterales

En las calculadoras programables soviéticas Elektronika B3-34 , MK-54 , MK-56 , MK-61 , MK-52 (y similares) hay tanta RAM física como se indica en el manual de PMK, pero debido a las peculiaridades de la implementación del hardware. , hay un ciclo virtual de 160 pasos [17] , que consta de 3 ramas: "principal", "lado corto" y "lado largo" [18] .

La rama principal  es la que se indica en las características de la calculadora como el “Número de pasos del programa”. En la familia B3-34, la rama principal toma 98 pasos - direcciones de "00" a "97", en MK-61 y MK-52 105 pasos - de "00" a "104" (mostrado como "−4" en la pantalla). Si la calculadora al final de la rama principal no ha encontrado un comando C/O, C/P o BP, entonces el contador de pasos continúa aumentando y la calculadora ingresa al rango de la rama lateral corta.

Una bifurcación lateral corta toma 14 pasos del programa, desde la dirección "98" hasta "L1" ( MK-61 y MK-52 : 7 pasos desde la dirección "−5" hasta "L1"). Estas direcciones corresponden a las direcciones reales "00" - "13" ( MK-61 y MK-52 : "00" - "06"). Si la calculadora no cumple con los comandos V/O, C/P o BP en estas direcciones, entonces el contador de pasos continúa aumentando y la calculadora entra en el rango de la rama lateral larga.

Una rama lateral larga toma 48 pasos del programa, desde la dirección "L2" hasta "F9". Estas direcciones corresponden a las direcciones reales "00" - "47"). Si la calculadora no cumple con los comandos V / O, C / P o BP en estas direcciones, entonces el contador de pasos continúa aumentando y la calculadora va a la rama principal. En un ramal lateral largo, una "zona oscura" comienza desde la dirección "C1": los códigos de comando escritos en las direcciones correspondientes del ramal principal no se muestran en el indicador cuando se cambia al modo PRG, sin embargo, se ejecutan correctamente en el modo de conteo.

Gráficamente, este proceso se ve así (por ejemplo, MK-52 ):

Esta característica no documentada no permitía escribir programas más largos que la longitud documentada, pero permitía evitar los comandos de un salto incondicional a la dirección cero dos veces (a veces el comando B/O se colocaba en la dirección cero).

Errores en las calculadoras

Además de características no documentadas, algunas calculadoras contenían errores.

Errores en B3-21 en algunas versiones

En las primeras versiones de la microcalculadora B3-21 , ocurría un error al sumar un número que contenía siete nueves en la mantisa y un número mayor a 4 en el octavo dígito (no indicado) de la mantisa, con un número mayor; por ejemplo, sumar 9,9999999 y 10 es igual a 120.

Además, en algunos B3-21, al calcular operaciones complejas (por ejemplo, seno), el contenido de uno de los registros de la pila de anillos podría distorsionarse.

Algunos B3-21 ejecutaron incorrectamente la instrucción de llamada de subrutina PP si estaba ubicada en una de las direcciones 55, 65, 70, 80, 91 o 92. En lugar de ir a la subrutina, ejecutaron la declaración cuyo código es igual a la dirección de la subrutina [19] .

Errores en B3-34 de algunas versiones

En algunas microcalculadoras B3-34 , la operación de exponenciación Fx y se realizaba con error si la operación anterior era de dos dígitos (excepto la exponenciación) y daba como resultado un número que tiene la cifra 5 o 7 en el octavo dígito de la mantisa Este error se puede evitar si antes de realizar la operación Fx y , adicionalmente se presionan las teclas F1/x F1/x [20] (lo que reemplaza el resultado de una operación doble con el mismo resultado de una sola operación, sobre la cual este error desaparece ). no ocurrió). Otras operaciones "mutuamente excluyentes" (por ejemplo, Fx 2 F√ o Fe x Fln) son menos adecuadas para este propósito, ya que pueden provocar un desbordamiento.

En versiones anteriores de calculadoras, era imposible finalizar una subrutina con comandos de operaciones individuales Fsin, Flg, F√, etc., y también cambiar el signo del resultado del cálculo con la tecla /−/ [21] .

Errores en el MK-61 y MK-52

La operación Kmax considera que cero es el número más grande. Este error se ha utilizado en algunos programas [22] .

En algunas operaciones, por ejemplo, al determinar la parte fraccionaria de un número negativo, aparece un "cero negativo" (que se muestra en el indicador como "−0"), que se comporta como un número negativo durante las transiciones condicionales [22] .

Errores y decisiones irracionales en las unidades de expansión de memoria BRP-3 y BRP-4

En el bloque BRP-3, programa 16, se usó una fórmula incorrecta en lugar de y, en consecuencia, el programa se compiló incorrectamente. En el mismo lugar, para determinar el argumento de un número complejo , se utiliza una fórmula sin tener en cuenta tanto los signos como , y el hecho de que la parte real puede ser cero. Como resultado, en , ocurre un error en la definición del argumento por 180°, y en  , la división por cero se detiene [23] .

En el bloque BRP-4 en el programa de juego "lunar" "Aterrizaje espacial", el modelo físico es erróneo, lo que puede conducir a resultados sin sentido. Por ejemplo, durante la caída libre de una nave espacial sobre la Luna desde una gran altura, la profundidad del cráter puede ser inferior a 8 mm, aunque la velocidad en el momento del contacto con la superficie lunar supera los 3000 m/s. En el mismo bloque, la microcalculadora "rompe las reglas" en los programas de juego "Life" y "Magaraja". Una serie de programas se han elaborado de manera irracional y se prestan a reducciones significativas. Por ejemplo, un programa para encontrar la superficie mínima o la longitud mínima de las soldaduras en una lata cilíndrica de un volumen dado puede reducirse en 15 pasos usando fórmulas más simples [24] .

Véase también

Notas

  1. 1 2 ¡Aterrizaje suave! // Técnica para jóvenes: diario. - 1985. - Junio. - art. 56 .
  2. Mijaíl Pujov. "Kon-Tiki": el camino a la Tierra // "Tecnología - juventud", 1985, No. 8-12; 1986, núm. 1-4.
  3. ¡Aterrizaje suave! // "Tecnología - juventud": revista. - 1985. - Diciembre. - S. 48-49 .
  4. Google Code Archive: almacenamiento a largo plazo para Google Code Project Hosting. . código.google.com . Recuperado: 26 de octubre de 2022.
  5. MK-61: historia, emulación, dispositivo . Habr . Recuperado: 26 de octubre de 2022.
  6. Emulador de calculadora rusa . pmk.arbinada.com . Recuperado: 26 de octubre de 2022.
  7. "Tecnología - juventud", 1986, No. 1, p. 54.
  8. 1 2 3 4 5 Escuela para programadores principiantes. Lección veintiséis. - " Ciencia y Vida ", 1989, N° 11, p. 124-130
  9. ^ "Tecnología - juventud". 1986, nº 7.
  10. 1 2 Alfred Klomp. Algunos experimentos con la piratería de la ELECTRÓNICA MK-61. — http://www.alfredklomp.com/technology/mk-61/ Archivado el 28 de octubre de 2008 en Wayback Machine .
  11. Calculadoras programables: dispositivo y uso / Ed. Ya. K. Trokhimenko. - M.: Radio y comunicación, 1990. - p. 123-124.
  12. Escuela de un programador novato. Lección veintidós. - "Ciencia y Vida", 1989, N° 1, p. 124-129.
  13. "Tecnología - juventud", 1986, No. 5, p. 52.
  14. "Ciencia y Vida", 1989, No. 4, p. 112.
  15. Noticias de eggogología. "Tecnología - juventud", 1987, No. 6, p.54. — http://www.emulator3000.org/Books/TM/1987_06.djvu Archivado el 26 de mayo de 2006 en Wayback Machine .
  16. LM Fink. Papá, mamá, yo y una calculadora. - M.: Radio y comunicación, 1988. - p. 71.
  17. En las instrucciones para el PMK, no se dice nada sobre el ciclo de 160 pasos.
  18. " Tecnología - juventud ", 1986, No. 2, p.56.
  19. Serguéi Frolov. Historia de las calculadoras soviéticas. Parte II. — iNFUSED BYTES OnLine, http://www.enlight.ru/ib/also/calcs/calcs2.htm Archivado el 17 de julio de 2012 en Wayback Machine .
  20. "Ciencia y Vida", 1984, No. 2, p. 66.
  21. V. P. Dyakonov. Manual de cálculos en microcalculadoras. 3ª ed., añadir. y reelaborado. — M.: Nauka, cap. edición Phys.-Math. lit., 1989. - pág. 41.
  22. 1 2 "Ciencia y Vida", 1988, No. 11, p. 84-85.
  23. Hola de BRP. - "Ciencia y Vida", 1990, N° 10, p. 115. - http://www.emulator3000.org/Books/SAL/1990_10.djvu Archivado el 2 de octubre de 2011 en Wayback Machine .
  24. Y el segundo volumen... grumoso. - "Ciencia y Vida", 1991, N° 6, p. 130-131. — http://www.emulator3000.org/Books/SAL/1991_06.djvu Archivado el 2 de octubre de 2011 en Wayback Machine .

Enlaces