Página Dos

Decimal HexadecimalNombreDescripción
512, 513$200, $201VDSLSTEstas 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, $203VPRCEDEstas 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, $205VINTEREstas 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, $207VBREAKCuando 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, $209VKEYBDAl 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, $20BVSERINSi 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, $20DVSEROREstas 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, $20FVSEROCVector 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, $211VTIMR1Vector 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, $213VTIMR2POKEY vector del temporizador dos para AUDF2 (53762, $D202), inicializado a 59314 ($E7B2). IRQ.
532, 533$214, $215VTIMR4POKEY 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, $217VIMIRQ

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.


Decimal HexadecimalNombreDescripción
536, 537$218, $219CDTMV1Temporizador del sistema número uno. Cuenta hacia atrás desde 255. Este temporizador SIO se decrementa cada VBLANK de la etapa uno. Cuando llega a cero, establece una bandera para saltar (JSR) a través de la dirección almacenada en las ubicaciones 550, 551 ($226, $227). Sólo el reloj de tiempo real (localizaciones 18-20; $12-14), el temporizador uno, y el registro de modo de atracción (77; $4D) se actualizan cuando la rutina VBLANK se corta porque el código de tiempo crítico (localización 66; $42 puesto a no-cero para el código crítico) es ejecutado por el SO. Dado que el SO utiliza el temporizador uno para sus rutinas de E/S y para cronometrar las operaciones del bus serie (ajustándolo a diferentes valores para las rutinas de tiempo de espera), deberías utilizar otro temporizador para evitar conflictos o interferencias con el funcionamiento del sistema.
538, 539$21A, $21BCDTMV2Temporizador del sistema número dos. Se decrementa en la etapa dos VBLANK. Puede ser decrementado en cada VBLANK de la etapa uno, sujeto a la prueba de la sección crítica definida por el ajuste de la bandera CRITIC (ubicación 66; $42). Este temporizador puede omitir (saltar) un conteo cuando se ejecuta un código de tiempo crítico (CRITIC es igual a distinto de cero). Realiza un JSR a través de la ubicación 552, 553 ($228, $229) cuando el valor cuenta a cero.
540, 541$21C, $21DCDTMV3Temporizador del sistema número tres. Igual que el 538. Los temporizadores tres, cuatro y cinco se detienen cuando el SO establece la bandera CRITIC a un valor distinto de cero. El SO utiliza el temporizador tres para ABRIR la grabadora de cassette y para establecer el tiempo de lectura y escritura de las cabeceras de la cinta. Cualquier valor anterior en el registro durante esta función se perderá.
542, 543$21E, $21FCDTMV4Temporizador del sistema número cuatro. Igual que el 538 ($21A).
544, 545$220, $221CDTMV5Temporizador del sistema número cinco. Igual que el 538 ($21A). Los temporizadores tres, cuatro y cinco ponen banderas en 554, 556 y 558 ($22A, $22C, $22E), respectivamente, cuando se decrementan a cero.
546, 547$222, $223VVBLKIRegistro inmediato VBLANK. Normalmente salta al procesador de interrupción NMI del vector VBLANK de la etapa uno en la ubicación 59345 ($E7D1); en las nuevas ROMs "B" del SO; 59310, $E7AE). El registro de estado NMI comprueba si la interrupción se debe a un VBI (después de comprobar si hay un DLI) y, si es así, vectoriza a través de aquí a la rutina VBI, que puede ser escrita por el usuario. En el encendido, los VBI están habilitados y los DLI están deshabilitados. Ver ubicación 512; $200.
560, 561$230, $231SDLSTLEstas dos posiciones de memoria, definen el comienzo de la dirección del Display List.
564$234LPENHEn esta posición de memoria, el Sistema Operativo del ATARI almacena la posición horizontal de la lectura del Lápiz de Luz.
565$235LPENVPosición vertical del Lápiz de Luz sobre la pantalla.
580$244COLDSTEsta dirección del mapa de memoria contiene un flag que define la acción que va a tomar el computador en caso de ser presionada la tecla Reset. Si esta posición contiene un cero, al presionar Reset no se genera un reboot del sistema. Si en cambio su contenido es 1, al presionar Reset el equipo realiza las mismas tareas que hace cuando se enciende el computador.
581$245 Byte de repuesto.
623$26FGPRIOR

Registro de selección de prioridad, Registro de sombra 53275 ($D01B). Las opciones de prioridad seleccionan qué objetos de la pantalla estarán "delante" de los demás. También le permite usar los cuatro Misiles como un quinto Player y permite que ciertos Player superpuestos tengan diferentes colores en las áreas de superposición. Sus valores a continuación :

  • 1 : P0-P1-P2-P3 M0-M1-M2-M3 Fondo
  • 2 : P0-P1 M0-M1-M2-M3 P2-P3 Fondo
  • 4 : M0-M1-M2-M3 P0-P1-P2-P3 Fondo
  • 8 : M0-M1 P0-P1-P2-P3 M2-M3 Fondo
  • 16 : Unir 4 Misile para formar el 5to Player
  • 32 : Overlapping Players para optener el 3er color
  • 64 : GTIA modo grafico
  • 128 : GTIA modo grafico

Los GTIA modo grafico se puede utilizar para seleccionar uno de los modos 9, 10 y 11. Sus valores son :

  • 9 : luminancias diferentes del mismo tono (color)
  • 10 : colores diferentes
  • 11 : 16 matices (colores) diferentes de la misma luminancia
624$270PADDLOEn esta posición de memoria, el sistema operativo almacena el valor de la lectura del paddle Nro. 0. Este valor puede oscilar entre 0 y 228.
625$271PADDL1Valor del paddle 1.
626$272PADDL2Valor del paddle 2.
627$273PADDL3Valor del paddle 3.
628$274PADDL4Valor del paddle 4, Solo para 400/800.
629$275PADDL5Valor del paddle 5, Solo para 400/800.
630$276PADDL6Valor del paddle 6, Solo para 400/800.
631$277PADDL7Valor del paddle 7, Solo para 400/800.
632$278STICK0Esta es la posición que entrega el valor del joystick 1, en la siguiente imagen aparecen los posibles valores en decimal y binario.
https://www.atariware.cl/archivos/mapping/joystick.png
633$279STICK1Registra el contenido de la lectura del joystick 2.
634$27ASTICK2Registra el contenido de la lectura del joystick 3, Solo para 400/800.
635$27BSTICK3Registra el contenido de la lectura del joystick 4, Solo para 400/800.
636$27C

PTRIG0

Registro del botón del paddle 1, valores posibles 1 no presionado y 0 presionado.
637$27D

PTRIG1

Registro del botón del paddle 2, valores posibles 1 no presionado y 0 presionado.
638$27E

PTRIG2

Registro del botón del paddle 3, valores posibles 1 no presionado y 0 presionado.
639$27F

PTRIG3

Registro del botón del paddle 4, valores posibles 1 no presionado y 0 presionado.
640$280

PTRIG4

Registro del botón del paddle 5, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.
641$281

PTRIG5

Registro del botón del paddle 6, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.
642$282

PTRIG6

Registro del botón del paddle 7, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.
643$283

PTRIG7

Registro del botón del paddle 8, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.
644$284STRIG0Registro del botón del joystick 1, valores posibles 1 no presionado y 0 presionado.
645$285STRIG1Registro del botón del joystick 2, valores posibles 1 no presionado y 0 presionado.
646$286STRIG2Registro del botón del joystick 3, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.
647$287STRIG3Registro del botón del joystick 4, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.
648$288CSTATRegistro de estado del casete.
649$289WMODEEsta localización especifica el tipo de operación ejecutada por la unidad de casete :
0 = operación de lectura.
128 = operación de escritura.
650$28ALBLIMocalización que mantiene el registro del numero de datos activos en el buffer del casete los valores fluctúan entre 0 y 128.
651, 655 $28B, $28F Bytes de repuesto. No se recomienda que utilice los bytes de repuesto para su propio uso del programa. En actualizaciones posteriores del sistema operativo, es posible que se utilicen estos bytes, lo que provocaría un conflicto con su programa. Por ejemplo, las nuevas ROM del sistema operativo utilizan las ubicaciones 652 y 653 ($28C, $28D) en las nuevas rutinas de manejo de interrupciones de IRQ. Lo mejor es usar un área protegida de la memoria como la página seis, ubicaciones 1536 a 1791 ($600 a $6FF).
694$2B6INVFLGEsta posición de memoria refleja a un flag que indica si el teclado está o no en video inverso. Un valor cero en esta posición indica que el teclado está en video común, pero si pokeamos un 128 el teclado se convierte en video inverso.
702$2BESHFLOKEsta posición contiene un flag que indica si el teclado está trabajando en mayúsculas o minúsculas o bien si está siendo ocupada la tecla Control. Pokeando un cero, el teclado trabaja con minúsculas, con un 64 lo hace con mayúsculas y cuando posee un 128 la tecla Control está siendo accionada.
704$2C0PCOLR0Color del player/missile número 0.
705$2C1PCOLR1Color del player/missile número 1.
706$2C2PCOLR2Color del player/missile número 2.
707$2C3PCOLR3Color del player/missile número 3.
708$2C4COLOR0Este byte representa al registro de color cero y es la copia del registro de Hardware ubicado en la posición de memoria $D016 o 53270.
709$2C5COLOR1Representa al registro de color 1 cuyo registro de Hardware se encuentra en la posición $D017 ó 53271.
710$2C6COLOR2Al igual que el byte anterior, representa al registro de color número 2 cuyo registro de Hardware se encuentra en $D018 o 53272.
711$2C7COLOR3Representa al registro de color 3 y su posición en el Hardware es $D019 o 53273.
712$2C8COLOR4Representa al registro de color número 4 y como lo indicamos anteriormente es el background de la pantalla. Es un shadow del registro de Hardware ubicado en $D01A o 53274.
729$2D9KRPDELCuando 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$2DAKEYREPEsta 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$2DBNOCLIKSi 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$2DCHELPFGEsta 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, $2E1RUNADEn 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, $2E3INITADTambié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$2E4RAMSIZEsta 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, $2E6MEMTOPEstas 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, $2E8MEMLOEstas dos posiciones de memoria definen la primera posición disponible de la Ram para el usuario.
752$2F0CRS1NHEsta 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 " "
756$2F4CHBASSet 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$2FCCH

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$2FEDSPFLGActiva 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$2FFSSFLAGBandera 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.