La programación de pulsaciones de teclas describe una forma específica de programación mediante la cual cada pulsación de tecla en un dispositivo o aplicación se registra de alguna manera y luego se reproduce de modo que las pulsaciones de teclas grabadas se puedan repetir varias veces. La programación de pulsaciones de teclas se encuentra más comúnmente, pero no exclusivamente, en las calculadoras programables , pero también existen aplicaciones de software programables por pulsaciones de teclas, por ejemplo, Vim (editor de texto) [1]
Las calculadoras Texas Instruments TI-58 / TI-58C / TI-59 eran programables y el almacenamiento de los programas se realizaba en forma de una secuencia de códigos que (en su mayoría) correspondían a la posición de las teclas en el teclado de la calculadora. A continuación se muestra un diagrama simplificado de la disposición básica de las teclas:
A cada tecla se le asigna un código de dos dígitos; para la mayoría de las teclas (pero no todas), el dígito de las decenas proviene del número de fila (como se indica en la parte inferior izquierda de la tabla) y el dígito de las unidades proviene del número de columna (como se indica en la parte superior de la tabla).
Ahora, pensemos en un programa muy simple, que suma 2 al número que se muestra y luego se detiene. El programa se inicia desde la posición de programa 000 y se ve así:
Para utilizar este programa, deberá ingresar el número n sobre el que se realizará la operación, presionar RST para asegurarse de que la ubicación actual del programa sea 000 y luego R/S para iniciar la ejecución. Cuando el programa se detenga (lo que debería suceder bastante rápido para un programa tan simple), la pantalla mostrará el número n + 2.
Puedes ver que los códigos 85, 95 y 91 corresponden a las posiciones de las teclas etiquetadas como + , = y R/S en la cuadrícula anterior, pero el código para el 2 no es 83 como esperarías de la posición de la cuadrícula, sino 02. Este último código fue elegido para que sea más fácil de entender para un humano que intente leer el programa. No hay fila 0, por lo que los códigos 00 .. 09 se utilizan para representar las teclas 0 .. 9 .
Estas calculadoras TI permitían direccionar hasta 100 posiciones de memoria de datos, numeradas del 00 al 99 (algunos modelos tenían un límite inferior). Una secuencia de pulsaciones de teclas como STO 4 2 (almacenar el número que se muestra actualmente en la memoria 42) se codificaría como 42 42. En este caso, el primer 42 es el código de tecla para la tecla STO , pero el segundo 42 no es un código de tecla, sino un número de registro de memoria. La calculadora sabe interpretarlo como tal porque eso es lo que tiene que seguir al código de la tecla STO .
Las direcciones de los programas tenían 3 dígitos, lo que permitía potencialmente que los programas constaran de hasta 1000 pasos, numerados del 000 al 999 (aunque, de hecho, ninguno de los modelos producidos permitía este máximo). Una instrucción de bifurcación, por ejemplo GTO 3 4 5 (bifurcación incondicional a la ubicación 345) se codificaría como 61 03 45. En este caso, el dígito de las centenas del destino de la bifurcación está en el dígito de las unidades del segundo byte de instrucción (después del código de operación), con un dígito de decenas cero; y los dígitos restantes están en el tercer byte de instrucción.
Por otro lado, una secuencia de código como 61 11 representa las pulsaciones de teclas GTO A , que es una rama a la ubicación marcada por la etiqueta simbólica A . La calculadora puede determinar que se trata de una rama simbólica, en lugar de una rama a una ubicación numerada, porque el dígito de las decenas del byte que sigue inmediatamente al código de operación no es cero.
La mayoría de las teclas del teclado se pueden utilizar como etiquetas simbólicas. Por ejemplo, secuencias como GTO STO y GTO GTO son legítimas, siempre que STO y GTO se hayan definido como etiquetas en algún lugar del programa.
La mayoría de las teclas tenían funciones múltiples, dependiendo de si se había presionado INV o 2nd antes. INV invocaba la "inversa" (lo que sea que eso significara) de la función siguiente, y se registraba en un programa como una pulsación de tecla separada (código 22), mientras que 2nd invocaba una función completamente diferente que estaba escrita en la placa frontal del teclado justo encima de la tecla. Por ejemplo, presionar 2nd x 2 invocaba la función seno , mientras que INV 2nd x 2 (o INV sin ) te daba el arcoseno.
El código para esta función alternativa se deriva del de la función de tecla original, añadiendo 5 al dígito de las unidades ( sin llevar al dígito de las decenas). Por lo tanto, los códigos de tecla correspondientes a la posición de la segunda tecla (21 y 26) nunca se utilizan como códigos de operación. A continuación se muestra la tabla de los códigos producidos con el segundo prefijo:
La tecla Ind permite la indirección: siempre que se permita una referencia a un registro de memoria o a una ubicación de programa, esta tecla se puede utilizar para obtener el valor real de un registro de memoria. Por ejemplo, la secuencia de teclas RCL Ind 1 0 significa obtener el valor en el registro de memoria 10 y utilizar ese valor a su vez como el número de un registro de memoria cuyo contenido se va a obtener como el operando actual. Sin embargo, en este caso, Ind no se puede codificar como código 40, porque la secuencia de código 43 40 se interpretaría como RCL 4 0 , no RCL Ind .
Pero, debido al uso de los códigos 00...09 para las teclas 0 ... 9 , los códigos 62-64, 72-74, 82-84 y 92 están disponibles para otros usos. Por lo tanto, la mayoría de ellos se reasignan para representar secuencias de op Ind :
De esta forma, la secuencia de teclas RCL Ind 1 0 quedaría codificada como 73 10.
Nótese el uso del código 92 para INV SBR (retorno de subrutina); esto no fue necesario por razones de ambigüedad, pero se hizo para ahorrar espacio con una secuencia tan común.