Página Dos
Decimal | Hexadecimal | Nombre | Descripción |
---|---|---|---|
512, 513 | $200, $201 | VDSLST | Estas dos posiciones de memoria son utilizadas por el Sistema Operativo como un puntero hacia la zona de memoria en la cual se encuentra el programa de atención a la interrupción del Display List (DLI). Para habilitar las interrupciones de Display List, es necesario primero pokear en la posición 54286 o $D40E un 192 o bien un $C0, pues si no el Antic ignora la solicitud de interrupción. Para que una interrupción de display se ejecute, en el Display List es necesario colocar el bit 7 en 1 en la instrucción que representa a la línea de la pantalla en la cual deseamos generar la interrupción DLI. |
514, 515 | $202, $203 | VPRCED | Estas dos posiciones de memoria, representan al vector del Sistema Operativo mediante el cual se atiende una Interrupción ocasionada por la línea PROCED de la entrada/salida serial del computador. Esta línea computador. Esta línea generalmente es utilizada para conectar periféricos por la entrada serial, que se comuniquen con el 6502 a través de la interrupción VPRCED. Cuando encendemos el ATARI, estas dos posiciones de memoria, apuntan a una zona de memoria que contiene las instrucciones PLA y RTI, las cuales anulan el llamado de la interrupción. Es decir que el computador, a menos que el programador lo desee, no utiliza esta interrupción en su configuración estándar. |
516, 517 | $204, $205 | VINTER | Estas dos posiciones funcionan de igual manera que las anteriores, pero en vez de trabajar con el Proced, lo hacen con la línea de Interrup que también se encuentra en el conector serial del Atari. |
518, 519 | $206, $207 | VBREAK | Cuando en Assembler se ejecuta una instrucción BRK, en realidad en el computador se genera una interrupción por software que es atendida por la rutina en lenguaje de máquina apuntada por este vector. |
520, 521 | $208, $209 | VKEYBD | Al presionar una tecla en nuestro computador, el chip POKEY, genera una interrupción para que el Sistema Operativo determine cuál fue la tecla seleccionada. Para esto, el computador tiene una rutina de atención a esta interrupción que se encuentra apuntada por estas dos posiciones de memoria. |
522, 523 | $20A, $20B | VSERIN | Si algún periférico transmite un byte por la entrada/salida Serial del ATARI, el Pokey genera una interrupción al 6502 para que éste lea el contenido de la posición SD20D llamada SERIN, la cual posee el byte que el periférico transfirió en serie. De esta manera, la comunicación con los periféricos la realiza el Pokey que se preocupa de leer los 8 bits del byte y sólo le avisa al 6S02 cuando tiene totalmente configurado el byte completo, para que éste distraiga sus operaciones y lea el contenido del SERIN. Así, el procesador cuenta con un sistema de lectura muy rápido, pues no tiene que hacer el trabajo de leer los 8 bits del byte transmitido. Esta interrupción de entrada serial es apuntada por este vector representado por estas dos posiciones de memoria. |
524, 525 | $20C, $20D | VSEROR | Estas dos posiciones de memoria son similares a las anteriores pero trabajan en la salida de bytes del computador a los periféricos. Cuando el Pokey está listo para transmitir un byte por la salida serial, interrumpe al procesador para que éste le defina a través de SEROUT que también es la posición $D20D, el byte a transmitir. Este trabajo se realiza en una rutina que en el Sistema Operativo se encuentra apuntada por estas dos posiciones. |
526, 527 | $20E, $20F | VSEROC | Vector de interrupción de transmisión del bus serie POKEY, inicializado a 60113 ($EAD1), que establece una bandera de transmisión realizada después de enviar el byte de suma de comprobación. IRQ. SIO utiliza las tres últimas interrupciones para controlar la comunicación del bus serie con los dispositivos del bus serie. Durante la comunicación del bus serie, toda la ejecución del programa se detiene. La E/S en serie es controlada por interrupciones; POKEY espera y vigila que se active una bandera cuando la operación de E/S solicitada se complete. Durante esta espera, POKEY está enviando o recibiendo bits a lo largo del bus serie. Cuando se ha transmitido (o recibido) el byte completo, se genera la IRQ de salida necesaria (VSEROR) o de entrada lista (VSERIN) según la dirección del flujo de datos. Esto hace que se procese el siguiente byte hasta que se haya enviado todo el búfer o esté lleno, y se establezca una bandera de «transmisión realizada». En este punto, SIO sale de nuevo a la rutina de llamada. Puedes ver que SIO pierde tiempo esperando a que POKEY envíe o reciba la información en el bus. |
528, 529 | $210, $211 | VTIMR1 | Vector de interrupción del temporizador POKEY uno, inicializado a 59314 ($E7B2), que es una secuencia de instrucciones PLA, RTI. Las interrupciones del temporizador se establecen cuando el temporizador POKEY AUDF1 (53760; $D200) cuenta hasta cero. Los valores de los registros AUDF se cargan en STIMER en 53769 ($D209). IRQ. |
530, 531 | $212, $213 | VTIMR2 | POKEY vector del temporizador dos para AUDF2 (53762, $D202), inicializado a 59314 ($E7B2). IRQ. |
532, 533 | $214, $215 | VTIMR4 | POKEY vector del temporizador cuatro para AUDF4 (53766, $D206), inicializado a 59314 ($E7B2). Esta IRQ sólo está vectorizada en la versión «B» de las ROMs del SO. |
534, 535 | $216, $217 | VIMIRQ | El vector inmediato IRQ (general). Inicializado a 59126 ($E6F6). JMP a través de aquí para determinar la causa de la interrupción IRQ. Tenga en cuenta que con las nuevas («B») ROMs del SO, hay un vector de interrupción de la tecla BREAK en las posiciones 566, 567 ($236, $237). Ver 53774 ($D20E) para más información sobre las interrupciones IRQ. Las nuevas ROMs del SO de la versión «B» cambian los vectores anteriores de la siguiente manera: VDSLST 59280 ($E790) VPRCED 59279 ($E78F) VINTER 59279 ($E78F) VBREAK 59279 ($E78F) VKEYBD NO CHANGE VSERIN 60175 ($EB0F) VSEROR NO CHANGE VSEROC 60111 ($EACF) VTIMR 1–4 59279 ($E78F) VIMIRQ 59142 ($E706) VVBLKI 59310 ($E7AE) VVBLKD 59653 ($E905) |
Las posiciones de 536 a 558 ($218 a $22E) se utilizan para los temporizadores de software del sistema. Los temporizadores de hardware se encuentran en el chip POKEY y utilizan los registros AUDF. Estos temporizadores cuentan hacia atrás cada intervalo de 1/60 segundos (etapa uno de VBLANK) o 1/30 segundos (etapa dos de VBLANK) hasta llegar a cero. Si el proceso de VBLANK está desactivado o interceptado, los temporizadores no se actualizarán. Consulte De Re Atari para obtener información sobre la configuración de estos temporizadores en una rutina de ensamblaje utilizando el registro SETVBV (58460; $E45C). Estas ubicaciones son accesibles para el usuario y se pueden hacer para contar el tiempo para la duración de la música, el juego E/S del juego, reloj del juego y otras funciones.
Los temporizadores de software se utilizan para duraciones superiores a un intervalo VBLANK (1/60 segundos). Para periodos de menor duración, utilice los registros de hardware.
Las posiciones 713 a 735 ($2C9 a $2DF) son bytes de reserva y posiciones 736 a 767 ($2E0 a $2FF) son para usos varios para 400/800.
Decimal | Hexadecimal | Nombre | Descripción |
---|---|---|---|
729 | $2D9 | KRPDEL | Cuando mantenemos presionada una misma tecla del teclado durante unos instantes, ésta comienza a repetirse en la pantalla. Esta posición de memoria maneja el tiempo que debe ser presionada antes de comenzar a repetirse. Pero este valor puede modificarse pokeando cualquier valor que va a indicar la cantidad de 1/60 segundos que el computador va a esperar antes de comenzar la repetición. |
730 | $2DA | KEYREP | Esta posición contiene la velocidad de repetición de las teclas al mantenerse oprimidas. Si en esta posición almacenamos un 0 le estamos indicando al S.O. que no repita teclas, es decir, que al presionar una tecla sólo se imprime un carácter, pero cualquier valor puede ser almacenado en esta posición de memoria. |
731 | $2DB | NOCLIK | Si en esta posición almacenamos cualquier valor distinto de cero, el teclado deja de hacer su ruido característico cada vez que presionamos una tecla. |
732 | $2DC | HELPFG | Esta posición de la memoria lee la tecla HELP, solo para la serie XL/XE. Para más detalles de los valores acá. |
736, 737 | $2E0, $2E1 | RUNAD | En nuestro artículo de Files Binarios, hemos explicado el funcionamiento de la carga de estos archivos. En nuestra Revista Nro. 9 hicimos una completa descripción de este tipo de carga y hemos visto cómo se utilizan las posiciones de memoria $2E0 y $2E1. Cuando un archivo tipo File es terminado de cargar en la memoria del computador, estas dos posiciones de memoria son consultadas por el DOS. Si estas posiciones apuntan a una determinada zona de la memoria, el S.O. interpreta que es en esta zona donde comienza la ejecución del File. |
738, 739 | $2E2, $2E3 | INITAD | También en este artículo hemos estudiado el funcionamiento de estas direcciones de la memoria del computador. Pero para refrescar estos conceptos podemos decir que cuando se carga un File con sus respectivos Stage, si las direcciones que definen el INITAD, es decir, 738 y 739, son distintas de $00 $00, se ejecuta un llamado a la subrutina que es apuntada por estas dos direcciones para luego seguir la carga del File. |
740 | $2E4 | RAMSIZ | Esta posición de memoria contiene la cantidad de páginas de memoria, es decir, grupos de 256 bytes que contiene nuestro computador disponible en RAM. |
741, 742 | $2E5, $2E6 | MEMTOP | Estas dos posiciones de memoria vienen a apuntar a la última posición disponible en RAM para programas o dato: del usuario. Este valor es definido por el Sistema Operativo cuando el computador es encendido y se redefine cada vez que se presiona la teda Reset o se modifican los modos gráficos de la pantalla. Esto es así, porque el Display List del Antic se posiciona en los siguientes bytes apuntados por MEMTDP. |
743, 744 | $2E7, $2E8 | MEMLO | Estas dos posiciones de memoria definen la primera posición disponible de la Ram para el usuario. |
745 | $2E9 | Byte de repuesto. | |
746, 749 | $2EA, $2ED | DVSTAT | Cuatro registros de estado de dispositivo utilizados por la operación de estado de E/S como sigue: 746 ($2EA) es el estado de error del dispositivo y el byte de estado del comando. Si la operación es una E/S de disco, entonces el estado devuelto es el del chip controlador 1771 en su unidad de disco Atari. Los bits puestos a uno devuelven los siguientes códigos de error: Bit Decimal Error 0 1 Se ha recibido una trama de comandos no válida (error). 1 2 Se ha recibido una trama de datos no válida. 2 4 Una operación de salida no ha tenido éxito. 3 8 El disco está protegido contra escritura. 4 16 El sistema está inactivo (en espera). 7 32 El controlador periférico es «inteligente» (tiene su propio microprocesador: la unidad de disco). Todos los dispositivos Atari son inteligentes excepto la grabadora de casetes, por lo que BIT 7 normalmente será uno cuando se conecte un dispositivo. 747 ($2EB) es el byte de estado del dispositivo. Para el disco, contiene el valor del registro de estado del controlador de la unidad. Para la Interfaz 850, contiene el estado de DSR,CTS,CRX y RCV cuando la E/S concurrente no está activa (véase el Manual de la Interfaz 850). También contiene el valor del byte AUX2 de la operación anterior (véase la descripción de IOCB en 832 a 959; $340 a $3AF). 748 ($2EC) es el valor máximo de tiempo de espera del dispositivo en segundos. Un valor de 60 aquí representa 64 segundos. Este valor se devuelve a la posición 582 ($246) después de cada petición de estado del disco. Inicializado a 31. 749 ($2ED) se utiliza para el número de bytes en el búfer de salida. Ver Manual 850, pagina 43. Cuando la E/S concurrente está activa, el comando STATUS devuelve el número de caracteres en el buffer de entrada a las posiciones 747 y 748, y el número de caracteres en el buffer de salida a la posición 749. |
750, 751 | $2EE, $2EF | CBAUDL/H | Bytes bajos y altos de la velocidad de transmisión del casete. Inicializado a 1484 ($5CC), que representa un baudio nominal de 600 (bits por segundo). Después de los cálculos de la tasa de baudios, estas posiciones contendrán valores POKEY para la tasa de baudios corregida. La velocidad en baudios es ajustada por SIO para tener en cuenta las variaciones del motor, el estiramiento de la cinta, etc. El principio de cada registro de casete contiene un patrón de bits alternados de apagado/encendido (cero/uno) que se utilizan únicamente para la corrección de velocidad (baudios). |
752 | $2F0 | CRS1NH | Esta posición de la memoria es utilizada para hacer aparecer o desaparecer al cursor de la pantalla. Si queremos hacer desaparecer al cursor, es necesario pokear a esta posición con un 1 y ejecutar un movimiento del cursor en cualquier sentido. Esto lo podemos realizar de la siguiente manera: 10 POKE 752,1 20 PRINT " " |
753 | $2F1 | KEYDEL | Bandera de retardo de tecla o contador de rebote de tecla; se utiliza para ver si se ha pulsado alguna tecla. Si se devuelve un cero, entonces no se ha pulsado ninguna tecla. Si se devuelve tres, entonces cualquier tecla. Se decrementa cada etapa dos VBLANK (1/60 o 1/30 de segundo) hasta que llega a cero. Si se pulsa cualquier tecla mientras KEYDEL es mayor que cero, se ignora como «rebote». Ver COMPUTE!, Diciembre 1981 en página 111, para una rutina para cambiar el retardo del teclado para adaptarlo a tus propias necesidades de tecleo. |
754 | $2F2 | CH1 | Código de carácter de teclado anterior (leído y aceptado más recientemente). Es el valor anterior pasado desde 764 ($2FC). Si el valor del nuevo código de tecla es igual al valor en CH1, el código se acepta sólo si se ha producido un retardo de rebote de tecla adecuado desde que se aceptó el valor anterior. |
756 | $2F4 | CHBAS | Set de Caracteres en nuestro ATARI, Básicamente CHBAS contiene el valor de la definición de los caracteres para mostrarlos en la pantalla. Por defecto tiene el valor 224 ($E0) por lo cual usa el set de caracteres definidos en la memoria ROM que están ubicadas entre 57344 al 58367 ($E000 al $E3FF). Esto se extiende en modelos XL/XE con CHARSET2 |
764 | $2FC | CH | Esta posición de la memoria permanentemente contiene el código interno de la última tecla presionada. Si queremos investigar esta posición de la memoria podemos ingresar en nuestro computador el siguiente programa en BASIC:10 DATA=PEEK(764) 20 PRINT "TECLA PRESIONADA=";DATA 30 POKE 764,255 40 FOR I=1 TO 250 50 NEXT I 60 GOTO 10 De esta manera, presionando cada tecla, podemos obtener una tabla de los valores internos de las teclas que puede ser muy útil en nuestra programación. Es muy importante que para volver a leer esta posición la pokees con un 255 o un $FF para limpiar su contenido. Si quiere saber el valor de cada letra o combinaciones revisa por acá |
766 | $2FE | DSPFLG | Activa o desactiva la funcionalidad de las teclas de control para poder ser visualizado el carácter en pantalla. En 0 activado y si es disntinto desactivado. |
767 | $2FF | SSFLAG | Bandera de inicio o detención de la pantalla, utilizada para detener el desplazamiento de la pantalla durante una rutina de dibujo o de gráficos, un listado o una impresión. Cuando el valor es cero, la salida de la pantalla no se detiene. Cuando el valor es 255 ($FF; el complemento de uno), la salida a la pantalla se detiene, y la máquina espera a que el valor se convierta en cero de nuevo antes de continuar con el desplazamiento de la pantalla. Normalmente, el usuario conmuta SSFLAG durante estas operaciones pulsando la combinación de teclas CTRL+1 para iniciar y detener el desplazamiento. Se pone a cero con el RESET y el encendido. |
Fin de la página dos, siga la lectura de la siguiente página tres.