★ APPLICATIONS ★ PROGRAMMATION ★ WINDOWKEY ★![]() |
| Windowkey | Applications Programmation |
SVENTANA INFORMATIVA PARA TECLAS DE FUNCIÓN Todos hemos utilizado en más de una ocasión las posibilidades que posee el Amstrad para definir nuestras propias teclas de función, con lo que podemos efectuar mucho más cómodamente la labor de programación. Aunque la posibilidad de utilizar dichas teclas posee unas ventajas enormes, en muchas ocasiones nos encontramos con el inconveniente de no acordarnos en qué tecla tenemos definido un comando concreto, por lo que tenemos que ir comprobando cada una de las teclas hasta encontrar la palabra clave que en ese momento deseamos utilizar. Hemos pensado que una de las formas más sencillas de resolver este problema, sería crear una ventana informativa en la parte inferior de la pantalla, que nos presentará en cada momento cada una de las teclas de función definidas por nosotros, para así no tener que acordarnos de qué comando se encuentra en cada una de dichas teclas. Pues bien, en el programa que acompaña a este artículo se encuentra la solución. Dicha rutina, se encarga de mostrarnos en cada momento todas las teclas de función, en una ventana situada en la parte baja de la pantalla. De este modo, podremos visualizar cuáles son las nuevas funciones de cada una de las teclas. Para la utilización de esta ayuda de programación, únicamente deberéis copiar el listado para aquellos que posean ensamblador o bien el programa cargador en Basic para los que no tengan en su poder un ensamblador. Una vez copiado el listado ejecutaremos el programa Basic. Si hemos cometido algún error, el programa nos lo indicará por lo que deberemos corregir las datas de nuestro programa. En caso contrario podemos salvar ese programa en cinta o disco, de la siguiente forma: SAVE «TECLAS», B, &A000, &150Para la ejecución de la rutina una vez en memoria, únicamente deberemos teclear lo siguiente:CALL &A000A partir de este momento dispondremos de dos nuevos comandos que podrán ser utilizados desde Basic, gracias a las posibilidades de los RSX. Estos nuevos comandos son los descritos a continuación:|ON... Activa la ventana informativa en la parte inferior de la pantalla. Como ya habéis podido observar, el programa utiliza las posibilidades de los RSX, para una mayor comodidad del usuario y además utiliza las facilidades que ofrece el Amstrad para el tratamiento de interrupciones. Nos podríamos preguntar cuál es la necesidad de las interrupciones en el programa que estamos describiendo. Pues bien, la respuesta sería que debido a los posibles cambios en las teclas de función, la ventana informativa quedaría obsoleta si no se produjeran las modificaciones pertinentes y para que estas modificaciones se produzcan, no nos queda otro remedio que utilizar las interrupciones. Así pues, la rutina se ejecuta cada 1/50 segundos y se producen las modificaciones si éstas son precisas. Vamos a entrar en la descripción del programa propiamente dicho. En primer lugar podemos observar que las primeras líneas del programa son suficiente conocidas por nosotros, ya que su misión es indicar al sistema que existen comandos RSX. A partir de ahí, definimos los nuevos comandos y su tabla de saltos, para que el sistema sepa a qué atenerse cuando un comando RSX es llamado desde Basic. El programa en sí, empieza en la línea 220 que es donde se realiza el tratamiento de interrupciones, indicándole al sistema que se va a producir una interrupción y la posición de memoria a donde tiene que saltar cuando ésta se produzca. En la línea 300 podemos ver la rutina encargada de desactivar la interrupción, cuando no deseamos ver en pantalla la ventana informativa. Una vez realizados estos pasos preliminares, entramos en la rutina a la que saltará el ordenador cuando se produzca la interrupción. En primer lugar tenemos la definición de ventanas, una para la información, en la parte inferior y otra en la parte superior, en la cual nosotros podremos realizar nuestros programas o ejecutarlos. A continuación se produce un chequeo que comprueba en qué modo de pantalla se está trabajando, si en ese momento se trabaja en modo 0, no se ejecuta la rutina, ya que debido a la anchura de caracteres, no se podrían imprimir en pantalla el contenido de las teclas de función. Si está en otro modo, entonces se hacen los cambios necesarios para que la presentación sea la correcta en cada modo. Ahora nos encontramos con un bucle, encargado de comprobar si se ha producido algún cambio en el contenido de las teclas de función, o sea, si nosotros hemos cambiado alguna de esas teclas, si es así, se salta a la rutina encargada de imprimir en pantalla el contenido de dichas teclas. Si al salir de dicho bucle se comprueba que no se ha producido ningún cambio, entonces se retorna al Basic. Por último nos encontramos con la rutina encargada de la impresión de las teclas de función en la ventana informativa. Al inicio de esta rutina se carga el registro doble DE con la posición de memoria en donde se encuentra almacenado el contenido de las teclas de función. El primer Byte de esa posición de memoria, nos indicará la longitud de la cadena de la primera tecla de función y a continuación se encuentra dicha cadena almacenada en forma de caracteres ASCI, el byte que sigue a continuación nos indicará la longitud de la cadena de caracteres correspondientes a la tecla de función siguiente, y a continuación tendremos los caracteres correspondientes a esa segunda tecla de función, y así sucesivamente hasta llegar a la cadena de caracteres que definen la última tecla. Program Acción Por lo tanto, lo que se hace para imprimir el contenido de cada una de las teclas, es tomar en primer lugar su longitud y la traspasamos al registro B, que será el encargado de indicar cuántas veces se debe repetir el bucle de impresión, a continuación tomamos el valor del siguiente byte que pertenecerá ya a la cadena que define la primera tecla, y lo imprimimos llamando a la rutina del firmware encargada de ello, y así hasta completar el bucle. Una vez hecho esto se vuelve a repetir el mismo proceso para la impresión del contenido de la segunda tecla de función, repitiendo el proceso hasta llegar a la última tecla de función almacenada en esa posición de memoria. Por último, diremos que la rutina que se encuentra listada a continuación, funcionará perfectamente en un Amstrad modelo 464, los usuarios que posean otro modelo, deberán tener en cuenta la siguiente modificación: La etiqueta con el nombre de: TECDEF: EQU #B446deberá cambiarse por la siguiente:TECDEF: EQU #B500ésta se encuentra situada en la línea 1390 del listado ensamblador.Para aquellos que prefieran el cargador Basic, deberán cambiar las líneas 300 y 400 por las que se indican a continuación: 300 DATA 33, 144, 181,221, 126, 0, 71además la línea 50 deberá ser la siguiente: |
| ![]() |
|