★ CODING ★ AMSTRAD SEMANAL ★ REJOJ POR INTERRUPCIONES ★![]() |
| Rejoj por interrupciones |
Todos sabemos que nuestro Amstrad es capaz de generar interrupciones, pero por lo general no todos conocen su funcionamiento. En este artículo realizaremos una aproximación a este interesante asunto, utilizando un tema ya casi más tópico que clásico: la implementación de un reloj al que hemos incluido, como novedad, nada más y nada menos que cinco alarmas. Desde el momento en que encendemos nuestro Amstrad, el microprocesador empieza a ejecutar un programa escrito en lenguaje Máquina, contenido en la ROM, que es el que nos permite acceder al lenguaje Basic y, por lo tanto, trabajar con el ordenador. Además, el microprocesador se encarga de detener este programa principal a intervalos regulares, marcados por el reloj interno, para realizar una serie de tareas secundarias como pueden ser leer el teclado, controlar el sonido, manejar el parpadeo de los colores en la pantalla, etc. A este proceso de interrumpir un programa principal, para ejecutar una rutina secundaria a intervalos regulares, se le denomina Interrupción. El programa principal puede ser tanto un programa realizado en Basic como uno en Código Máquina. La única diferencia entre ambos tipos es la elevada velocidad con que se ejecutan las interrupciones en Código Máquina, dándonos la sensación de que en realidad se están ejecutando varias tareas a la vez. A la vez que ejetutamos nuestros programas, disponemos de un reloj ton cinto alarmas programables Cuando se genera una interrupción, el proceso principal se abandona temporalmente, guardando todas sus variables, y se pasa a realizar las tareas secundarias. Cuando éstas hayan finalizado, se reanuda la ejecución de la tarea principal en el punto donde se había dejado. Desde el Basic se pueden generar interrupciones mediante los comandos Every o/y After, pero tienen el inconveniente de que sólo se ejecutan cuando corremos el programa, al contrario que desde el lenguaje Máquina, en el que a partir de que las activemos se estarán ejecutando hasta que realicemos la operación contraria. Un ejemplo muy claro de cómo funcionan las interrupciones es creando un reloj en la pantalla totalmente independiente del programa que resida en memoria; también se puede encontrar otro ejemplo en el programa publicado en esta misma revista, en el número 95, que servía para crear un buffer de impresora. Con este programa, además de disponer de un reloj tenemos acceso a cinco alarmas programables. El manejo es muy sencillo, gracias a la creación de una única RSX que controla todas las acciones del reloj. Para poner en marcha y en hora el reloj, basta con la orden: lRELOJ,h,men la que «h» es la hora del día, que debe estar comprendida entre 1 y 24, y «m» son los minutos, que estarán entre 0 y 59. Es muy importante que ambos parámetros se ajusten a estos valores, ya que la rutina no comprueba si los valores que se le dan son admisibles o no. Si al poner en funcionamiento el reloj nos hemos equivocado en algo, para corregirlo basta con volver a ejecutar la misma orden corrigiendo el valor erróneo.
Desde este instante el reloj está funcionando, y para comprobarlo bastaría con ejecutar: |RELOJcon lo que obtendremos en la pantalla el valor de la hora y los minutos.En el caso de que le interese localizar la salida del reloj a una misma coordenada de la pantalla, basta con teclear: LOCATE x,y:|RELOJy el reloj aparecerá en las coordenadas x, y de la ventana número siete; en el caso de que esta ventana no esté definida, las coordenadas serán las correspondientes al total de la pantalla.Para que el reloj desaparezca de la pantalla hay que volver a teclear la orden: |RELOJPara programar una de las cinco alarmas de las que disponemos, basta con ejecutar un:|RELOJ, al, h ,mdonde «al» puede tomar los valores del 0 al 4, uno para cada alarma, y «h» y «m» son las horas y minutos a las que queremos que nos avise.Para «h» y «m» valen las mismas normas que para el caso de poner en hora el reloj, con la única diferencia de que si «h» toma el valor cero, esa alarma se desactiva. Para corregir una alarma sirve esta misma orden, como en el caso de poner en marcha el reloj. Cuando el reloj llega a una alarma cambia el color del borde de la pantalla a blanco y hace sonar un «beep», esperando a que desactivemos la alarma al pulsar la tecla Control. A partir de ahora ésta queda desactivada, y se puede utilizar para otra alarma. Cómo cargar el Reloj. Copiar el programa cargador y ejecutarlo, en el caso de que no aparezcan errores se procede a salvarlo con la siguiente orden: SAVE ‘‘RELOJ'',B,&A000,&186Para ver su funcionamiento deberemos cargarlo en memoria de la siguiente forma:MEMORY &9FFF:LOAD''reloj.bin'',&A000y después hacer:CALL &A000para tener disponibles las RSX.Para los más curiosos ofrecemos a continuación el listado del programa desensamblado, del que estamos seguros sacarán un buen partido. AS
|