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.
548, 549$224, $225VVBLKD

Registro diferido VBLANK; retorno del sistema desde la interrupción, inicializado a 59710 ($E93E, en las nuevas ROMs «B» del SO; 59653; $E905), la salida para la rutina VBLANK. NMI. Estos dos vectores VBLANK apuntan a rutinas de interrupción que se producen al principio del intervalo de tiempo VBLANK.
Se ejecuta la rutina VBLANK de la etapa uno; luego se comprueba la ubicación 66 ($42) para ver si la interrupción es crítica en el tiempo y, si se ha interrumpido una sección de código crítica, no se ejecuta la rutina VBLANK de la etapa dos con un JMP realizado a través del vector inmediato VVBLKI. Si no es crítica, se utiliza la interrupción diferida VVBLKD. Normalmente los bits de interrupción VBLANK están habilitados (BIT 6 en la posición 54286; $D40E está puesto a uno). Para deshabilitarlos, borre el BIT 6 (puesto a cero).


La secuencia normal para los eventos de interrupción VBLANK es: después de la prueba del SO, JMP a la rutina de interrupción VBLANK inmediata del usuario a través del vector en 546, 547, luego a través de SYSVBV en 58463 ($E45F). Esto es dirigido por el SO a través de la rutina de servicio de interrupción VBLANK en 59345 ($E7D1) y luego a la rutina de interrupción VBLANK diferida del usuario vectorizada en 548, 549. Luego sale de la rutina de interrupción VBLANK a través de 58466 ($E462) y una instrucción RTI.


Si está cambiando los vectores VBLANK durante la rutina de interrupción, utilice la rutina SETVBV en 58460 ($E45C). Un VBI inmediato tiene unos 3800 ciclos de máquina de tiempo para usar un VBI diferido tiene unos 20.000 ciclos. Dado que muchos de estos ciclos se ejecutan mientras se dibuja el haz de electrones, se sugiere no ejecutar rutinas gráficas en VBI's diferidos. Consulte la tabla de procesos VBLANK al final del área de mapas.


si crea sus propios VBI's, termine un VBI inmediato con un JMP a 58463 ($E45F) y un VBI diferido con un JMP a 58466 ($E462). Para evitar la rutina VBI del SO en 59345 ($E7D1) por completo, termina tu VBI inmediato con un JMP a 58466 ($E462). Este es un ejemplo del uso de un VBI para crear un cursor intermitente. También parpadeará cualquier texto que muestre en modo inverso.

05 REM EJEMPLO DE ATARI 400/800 CON OS-B + PAL
10 FOR BLINK=1664 TO 1680:READ BYTE:POKE BLINK,BYTE:NEXT BLINK
20 POKE 548,128:POKE 549,6
30 DATA 8,72,165,20,41,16,74,74,74,141
40 DATA 243,2,104,40,76,62,233	

Para restaurar el cursor y la pantalla normales, POKE 548,62 y POKE 549,233.
Si tienes un modelo XL/XE puedes probar esta versión compatible.

05 REM EJEMPLO VERSION XE/XL
10 FOR BLINK=1664 TO 1680:READ BYTE:POKE BLINK,BYTE:NEXT BLINK
20 POKE 548,128:POKE 549,6
30 DATA 8,72,165,20,41,16,74,74,74,141
40 DATA 243,2,104,40,76,98,228	
550, 551$226, $227CDTMA1Dirección de salto del temporizador del sistema, inicializada a 60400 ($EBF0). Cuando las localizaciones 536, 537 ($218, $219) alcanzan (cuenta atrás) el cero, el SO pasa por aquí (salta a la localización especificada por estas dos direcciones). Puedes establecer aquí la dirección de tu rutina de código máquina para que se ejecute cuando el temporizador uno llegue (cuenta atrás) a cero. Su código debe terminar con la instrucción RTS.
Pueden surgir problemas cuando los valores del temporizador son mayores de 255, ya que el 6502 no puede manipular valores de 16 bits directamente (un número en el rango de cero a 255 es un valor de ocho bits; si un valor requiere dos bytes para ser almacenado, como una posición de memoria, es un valor de 16 bits). Técnicamente, podría producirse una interrupción VBLANK cuando un byte del temporizador se está inicializando y el otro aún no se ha establecido. Para evitarlo, mantenga los valores del temporizador por debajo de 255.
Como el SO utiliza el temporizador uno, se recomienda utilizar el temporizador dos en su lugar, para evitar conflictos con el funcionamiento del Atari. Inicializado a 60396 ($EBEA) en las antiguas ROMs, 60400 ($EBF0) en las nuevas ROMs.
552,553$228, $229CDTMA2Dirección de salto del temporizador dos del sistema. No utilizada por el SO, disponible para que el usuario introduzca la dirección de su propia rutina a la que hacer JMP cuando la cuenta del temporizador dos (538, 539; $21A, $21B) llegue a cero. Inicializado a cero; la dirección debe ser especificada por el usuario.
554$22ACDTMF3Indicador número tres del temporizador del sistema, se activa cuando la posición 540, 541 ($21C, $21D) llega a cero. Este registro también es utilizado por DOS como una bandera de tiempo de espera.
555$22BSRTIMRTemporizador de repetición por software, controlado por la rutina de dispositivo IRQ. Establece el retardo inicial de 1/2 segundo antes de que una tecla se repita. La segunda etapa VBLANK establece la velocidad de repetición de 1/10 segundos, decrementa el temporizador e implementa la lógica de repetición automática.
Cada vez que se pulsa una tecla, STIMER se pone a 48 ($30). Siempre que SRTIMR sea igual a cero y se esté pulsando continuamente una tecla, el valor de esa tecla se almacena continuamente en CH, posición 764 ($2FC).
556$22CCDTMF4Indicador número cuatro del temporizador del sistema. Se activa cuando la posición 542, 543 ($21E, $21F) llega a cero.
557$22DINTEMPRegistro temporal utilizado por la rutina SETVBL en 58460 ($E45C).
558$22ECDTMF5Indicador número cinco del temporizador del sistema. Se activa cuando la posición 558, 559 ($22E, $22F) llega a cero.
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.
566, 567$236, $237BRKKYVector de interrupción de la tecla BREAK. Este vector está disponible sólo con la versión «B» OS ROMs, no con la versión anterior. Puede utilizar este vector para escribir su propia rutina de interrupción de tecla BREAK. Inicializado a 59220 ($E754).
568, 569$238, $239 Dos bytes de reserva.
570$23ACDEVICDirección de cuatro bytes del búfer de trama de comandos (CFB) para un dispositivo — utilizado por SIO mientras realiza E/S serie, no para acceso de usuario. CDEVIC se utiliza para el número de ID del bus SIO Los otros tres bytes CFB son:
571$23BCCOMNDEl código de comando del bus SIO.
572$23CCAUX1Byte auxiliar de comando uno, cargado desde la posición 778 ($30A) por SIO.
573$23DCAUX2Byte auxiliar de comando dos, cargado desde la posición 779 ($30B) por SIO.
574$23ETEMPRegistro RAM temporal para SIO.
575$23FERRFLGIndicador de error SIO; cualquier error del dispositivo excepto el error de tiempo de espera (tiempo igual a cero).
576$240DFLAGSLas banderas de disco se leen del primer byte del archivo de arranque (sector uno) del disco.
577$241DBSECTEl número de sectores de arranque de disco leídos desde el primer registro de disco.
578, 579$242, $243BOOTADLa dirección donde se colocará el cargador de arranque del disco. El registro que se acaba de leer se moverá a la dirección especificada aquí, seguido por los registros restantes a leer. Normalmente, con DOS, esta dirección es 1792 ($700), el valor también almacenado temporalmente en RAMLO en 4, 5. La dirección 62189 ($F2ED) es el punto de entrada de la rutina de arranque del disco OS (DOBOOT).
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.

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 HexadecimalNombreDescripción
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.
745$2E9 Byte de repuesto.
746, 749$2EA, $2EDDVSTAT

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, $2EFCBAUDL/HBytes 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$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 " "
753$2F1KEYDELBandera 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$2F2CH1Có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$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.

Fin de la página dos, siga la lectura de la siguiente página tres.