Ver el código de 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.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|*
||536, 537|$218, $219|CDTMV1|Temporizador 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, $21B|CDTMV2|Temporizador 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, $21D|CDTMV3|Temporizador 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, $21F|CDTMV4|Temporizador del sistema número cuatro. Igual que el 538 ($21A).||
||544, 545|$220, $221|CDTMV5|Temporizador 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, $223|VVBLKI|Registro 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, $225|VVBLKD|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.
%%(code)
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.
%%(code)
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, $227|CDTMA1|Direcció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, $229|CDTMA2|Direcció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|$22A|CDTMF3|Indicador 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|$22B|SRTIMR|Temporizador 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|$22C|CDTMF4|Indicador número cuatro del temporizador del sistema. Se activa cuando la posición 542, 543 ($21E, $21F) llega a cero.||
||557|$22D|INTEMP|Registro temporal utilizado por la rutina SETVBL en 58460 ($E45C).||
||558|$22E|CDTMF5|Indicador número cinco del temporizador del sistema. Se activa cuando la posición 558, 559 ($22E, $22F) llega a cero.||
||560, 561|$230, $231|SDLSTL|Estas dos posiciones de memoria, definen el comienzo de la dirección del Display List.||
||564|$234|LPENH|En esta posición de memoria, el Sistema Operativo del ATARI almacena la posición horizontal de la lectura del Lápiz de Luz.||
||565|$235|LPENV|Posición vertical del Lápiz de Luz sobre la pantalla.||
||566, 567|$236, $237|BRKKY|Vector 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|$23A|CDEVIC|Direcció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|$23B|CCOMND|El código de comando del bus SIO.||
||572|$23C|CAUX1|Byte auxiliar de comando uno, cargado desde la posición 778 ($30A) por SIO.||
||573|$23D|CAUX2|Byte auxiliar de comando dos, cargado desde la posición 779 ($30B) por SIO.||
||574|$23E|TEMP|Registro RAM temporal para SIO.||
||575|$23F|ERRFLG|Indicador de error SIO; cualquier error del dispositivo excepto el error de tiempo de espera (tiempo igual a cero).||
||576|$240|DFLAGS|Las banderas de disco se leen del primer byte del archivo de arranque (sector uno) del disco.||
||577|$241|DBSECT|El número de sectores de arranque de disco leídos desde el primer registro de disco.||
||578, 579|$242, $243|BOOTAD|La 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|$244|COLDST|Esta 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|$26F|GPRIOR|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 **M**isiles como un quinto **P**layer y permite que ciertos **P**layer 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|$270|PADDLO|En 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|$271|PADDL1|Valor del paddle 1.||
||626|$272|PADDL2|Valor del paddle 2.||
||627|$273|PADDL3|Valor del paddle 3.||
||628|$274|PADDL4|Valor del paddle 4, Solo para 400/800.||
||629|$275|PADDL5|Valor del paddle 5, Solo para 400/800.||
||630|$276|PADDL6|Valor del paddle 6, Solo para 400/800.||
||631|$277|PADDL7|Valor del paddle 7, Solo para 400/800.||
||632|$278|STICK0|Esta 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|$279|STICK1|Registra el contenido de la lectura del joystick 2.||
||634|$27A|STICK2|Registra el contenido de la lectura del joystick 3, Solo para 400/800.||
||635|$27B|STICK3|Registra el contenido de la lectura del joystick 4, Solo para 400/800.||
||636|$27C|{{anchor href="PTRIG0"}}PTRIG0|Registro del botón del paddle 1, valores posibles 1 no presionado y 0 presionado.||
||637|$27D|{{anchor href="PTRIG1"}}PTRIG1|Registro del botón del paddle 2, valores posibles 1 no presionado y 0 presionado.||
||638|$27E|{{anchor href="PTRIG2"}}PTRIG2|Registro del botón del paddle 3, valores posibles 1 no presionado y 0 presionado.||
||639|$27F|{{anchor href="PTRIG3"}}PTRIG3|Registro del botón del paddle 4, valores posibles 1 no presionado y 0 presionado.||
||640|$280|{{anchor href="PTRIG4"}}PTRIG4|Registro del botón del paddle 5, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.||
||641|$281|{{anchor href="PTRIG5"}}PTRIG5|Registro del botón del paddle 6, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.||
||642|$282|{{anchor href="PTRIG6"}}PTRIG6|Registro del botón del paddle 7, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.||
||643|$283|{{anchor href="PTRIG7"}}PTRIG7|Registro del botón del paddle 8, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.||
||644|$284|STRIG0|Registro del botón del joystick 1, valores posibles 1 no presionado y 0 presionado.||
||645|$285|STRIG1|Registro del botón del joystick 2, valores posibles 1 no presionado y 0 presionado.||
||646|$286|STRIG2|Registro del botón del joystick 3, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.||
||647|$287|STRIG3|Registro del botón del joystick 4, valores posibles 1 no presionado y 0 presionado.
Solo para 400/800.||
||648|$288|CSTAT|Registro de estado del casete.||
||649|$289|WMODE|Esta 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|$28A|LBLIM|ocalizació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|$2B6|INVFLG|Esta 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|$2BE|SHFLOK|Esta 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|$2C0|PCOLR0|Color del player/missile número 0.||
||705|$2C1|PCOLR1|Color del player/missile número 1.||
||706|$2C2|PCOLR2|Color del player/missile número 2.||
||707|$2C3|PCOLR3|Color del player/missile número 3.||
||708|$2C4|COLOR0|Este 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|$2C5|COLOR1|Representa al registro de color 1 cuyo registro de Hardware se encuentra en la posición $D017 ó 53271.||
||710|$2C6|COLOR2|Al igual que el byte anterior, representa al registro de color número 2 cuyo registro de Hardware se encuentra en $D018 o 53272.||
||711|$2C7|COLOR3|Representa al registro de color 3 y su posición en el Hardware es $D019 o 53273.||
||712|$2C8|COLOR4|Representa 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 |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 ((Codigodeteclado#h54-3 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 ((https://archive.org/details/1981-12-compute-magazine/page/n111/mode/2up 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:
%%(code)
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 ((Codigodeteclado 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 ((/Biblioteca/MapeandoElAtari/Pagina3 tres)).