Ver el código de Página Cero

Las posiciones de cero a 255 ($0 a $FF) se denominan "página cero" y tienen especial importancia para los programadores de lenguaje ensamblador ya que la máquina accede a estas ubicaciones más rápida y fácilmente.

Las ubicaciones cero a 127 ($0 a $7F) están reservadas como la página cero del sistema operativo, mientras que de 128 a 255 ($80 a $FF) son la página cero del BASIC y la usada por el usuario en RAM. 

Las ubicaciones cero a 1792 ($0 a $700) se usan como sistema operativo y (si el cartucho está presente) 8K BASIC RAM (excepto la página seis). Las ubicaciones cero a 8191 ($0 a $1FFF) son el mínimo requerido para la operación (8K).

Las ubicaciones dos a siete no se borran en ninguna operación de arranque.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|*
||0, 1|$0, $1|LINZBS|LINBUG RAM, sustituida por la RAM del monitor Ver el listado del SO, página 31. Parece que se utiliza para almacenar el valor del temporizador VBLANK. Una aplicación de usuario que he visto para la ubicación cero es en un programa de metrónomo en De Re Atari. También se utiliza en el ensamblaje cruzado del SO Atari.||
||2, 3|$2, $3|CASINI|Vector de inicialización del casete: JSR pasa por aquí si el arranque del casete fue exitoso. 
Esta dirección se extrae de los primeros seis bytes de un archivo de arranque de casete. El primer byte se ignora. El segundo contiene el número de registros, el tercero y el cuarto contienen los bytes bajos y altos de la dirección de carga, y el quinto y el sexto contienen los bytes bajos y altos de la dirección de inicialización.
El control al cargar salta a la dirección de carga más seis para una carga de varias etapas y a través de CASINI para la inicialización. JSR a través de DOSVEC (10 y 11; $A,$B) para transferir el control a la aplicación.||
||4, 5|$4, $5|RAMLO|Puntero de RAM para la prueba de memoria utilizada en el encendido. También se utiliza para almacenar la dirección de arranque del disco "normalmente 1798 ($706)" para la rutina de continuación de  arranque.||
||6|$6|TRAMSZ|Registro Temporal para tamaño de RAM; se utiliza durante la secuencia de encendido para probar la disponibilidad de RAM. Este valor luego se traslada a RAMTOP, ubicación 106 ($6A).
Lee uno cuando el cartucho de BASIC o A (izquierdo en 400/800) está enchufado.||
||7|$7|TSTDAT|Registro de datos de prueba de la RAM. Lee uno cuando se inserta el cartucho B o el derecho. RAMLO, TRAMSZ y TSTDAT se utilizan para probar el tamaño de la RAM al encender el equipo. En el arranque del DOS, RAMLO y TRAMSZ también actúan como almacenamiento temporal para la dirección de continuación del arranque. TRAMSZ y TSTDAT se utilizan más tarde para marcar si los cartuchos A (izquierda) y/o B (derecha), respectivamente, están enchufados (un valor distinto de cero equivale a un cartucho enchufado) y si el disco debe ser pitado.||
||8|$8|WARMST|Bandera de arranque en caliente. Si la ubicación lee cero, entonces está en medio del encendido; 255 es el estado normal de RESET. El Warmstart es similar a pulsar RESET, por lo que no debería borrar la memoria, las variables o los programas. WARMST se inicializa a cero y no cambiará los valores a menos que se haga algun POKE o hasta la primera vez que se pulse el botón de RESET. Entonces leerá 255 ($FF).
Warmstart normalmente vectoriza a la ubicación 58484 ($E474). WARMST es comprobado por el registro de estado NMI en 54287 ($D40F) cuando se pulsa RESET para ver si se reinicializa el software o se reinicia el disco.||
||9|$9|BOOT?|Indicador de éxito de la bandera de arranque. Un valor de 255 en esta ubicación hará que el sistema se bloquee si se pulsa RESET. Si BOOT? lee uno, entonces el arranque del disco fue exitoso; si lee dos, entonces el arranque del casete fue exitoso. Si lee cero, entonces ninguno de los periféricos fue arrancado.
Si se establece en dos, entonces el vector del casete en las posiciones dos y tres se utilizará en el RESET. Si se pone a uno, se utilizará el vector del DOS en las posiciones 10 y 11 ($A y $B). El Coldstart intenta tanto un arranque de casete como de disco y marca esta ubicación con el éxito o el fracaso de los arranques. BOOT? se comprueba tanto durante el arranque en disco como en casete.||
||10, 11|$A, $B|DOSVEC|Vector de inicio para el software de disco (o sin cartucho). Esta es la dirección a la que BASIC salta cuando llama al DOS. Puede ser configurada por el usuario para apuntar a su propia rutina, pero RESET devolverá DOSVEC a la dirección original. Para evitar esto, POKE 5446 con el LSB y 5450 con el MSB de su dirección vectorial y vuelva a guardar el DOS usando la opción WRITE DOS FILES en el menú. Las ubicaciones 10 y 11 se cargan normalmente con 159 y 23 ($9F y $17), respectivamente. Esto permite cargar la sección DUPSYS del DOS cuando se llama. Inicialmente se establece el vector del modo pizarra (58481; $E471 llamado tecleando "BYE" o "B." desde el BASIC); también vectorizará la dirección de ejecución del casete si no se carga ningún vector del DOS. Si usted crea un archivo AUTORUN.SYS que no termina con una instrucción RTS, debe poner BOOT? a uno y 580 ($244) a cero.||
||12, 13|$C, $D|DOSINI|Dirección de inicialización para el arranque del disco. También se utiliza para almacenar la dirección RUN de arranque del casete, que luego se traslada a CASINI. Cuando se enciende sin el disco o sin una cinta de casete de autoarranque, DOSINI leerá cero en ambas ubicaciones.||
||14, 15|$D, $E|APPMHI|Ubicación más alta usada por BASIC (LSB, MSB)||
||16|$10|POKMSK|Tecla BREAR, Para desactivar esta tecla debemos usar los siguientes comandos : 
POKE 16,112:POKE 53774,112||
||17|$11|BRKKEY|Cero significa que se presiona la tecla BREAK; cualquier otro número significa que no lo es. Un BREAK durante la E/S devuelve 128 ($80). Supervisado por controladores de teclado, casete y pantalla.
Consulte la ubicación 16 ($A) para obtener sugerencias sobre cómo deshabilitar la tecla BREAK. Las últimas ediciones del sistema operativo proporcionan un vector adecuado para las interrupciones BREAK.
El código de estado de cancelación de la tecla BREAK se almacena en STATUS (48; $30). También se comprueba durante todas las rutinas de E/S y desplazamiento o dibujado.
Durante la rutina del controlador de teclado, el código de estado se almacena en DSTAT (76; $4C). BRKKEY se apaga en el encendido. El estado de cancelación de la tecla BREAK se marca configurando el BIT 7 de 53774 ($D20E).||
||18,19,20|$12, $13, $14|RTCLOK|Reloj del computador, Para cálculo de tiempo debemos usar la siguiente fórmula: 
%%(code)TIEMPO = INT((PEEK(18)*65536+PEEK(19)*256+PEEK(20))/60)%% Para mostrar la hora en modo "hora:minuto:segundo" se requiere un programa específico.||
||21, 22|$15, $16|BUFADR|Registro de dirección del buffer indirecto (página cero). Puntero temporal a la memoria intermedia del disco actual.||
||23|$17|ICCOMT|Comando para el vector CIO. Almacena el comando CIO; se utiliza para encontrar el desplazamiento en la tabla de comandos para el vector correcto a la rutina del manejador.||
||24, 25|$18, $19|DSKFMS|Puntero del gestor de archivos del disco. Llamado JMPTBL por el DOS; utilizado como vector para el FMS.||
||26, 27|$1A, $1B|DSKUTL|El puntero de las utilidades del disco. Llamado BUFADR por el DOS, apunta al área guardada para un buffer para el paquete de utilidades (buffer de datos; DBUF) o para el área de programa (MEMLO; 743, 744; $2E7, $2E8).||
||28|$1C|PTIMOT|Tiempo de espera de la impresora, llamado cada vez que se solicita el estado de la impresora. Inicializado a 30, que representa 32 segundos (el valor es de 64 segundos por 60 incrementos en este registro); el tiempo de espera típico para la impresora Atari 825 es de cinco segundos. El valor es establecido por el software de manejo de la impresora. Se actualiza después de cada operación de solicitud de estado de la impresora.
Obtiene el estado de tiempo de espera específico de la ubicación 748 ($2EC), que se carga allí por SIO.
Las nuevas ROMs del SO de tipo "B" aparentemente han resuelto el problema del tiempo de espera que atormentaba a las ROMs "A"; lo veías cuando la impresora o la unidad de disco se dormían periódicamente (se desconectaban) durante unos segundos, causando severos ataques de ansiedad en los propietarios que pensaban que sus Ataris acababan de morir misteriosamente. 
Esto se agrava cuando uno retira un disco de la unidad, creyendo que el proceso de E/S ha terminado, sólo para que la unidad se inicie de nuevo después del tiempo de espera y tratando de escribir o leer de un disco inexistente. Normalmente, tanto el sistema como el usuario se bloquean simultáneamente en este punto.||
||29|$1D|PBPNT|Puntero del buffer de impresión; apunta a la posición actual (byte) en el buffer de impresión. Va de cero al valor de la posición 30.||
||30|$1E|PBUFSZ|Tamaño del búfer de impresión del registro de la impresora para el modo actual. El tamaño normal del búfer y el tamaño de la línea es igual a 40 bytes; la impresión de doble ancho es igual a 20 bytes (la mayoría de las impresoras utilizan sus propios códigos de control para la impresión expandida); la impresión lateral es igual a 29 bytes (sólo en la impresora Atari 820). 
La solicitud de estado de la impresora es igual a cuatro. PBUFSZ se inicializa a 40. El manejador de la impresora comprueba si el mismo valor está en PBPNT y, si es así, envía el contenido del buffer a la impresora.||
||31|$1F|PTEMP|Registro temporal utilizado por el manejador de la impresora para el valor del carácter que se envía a la impresora.||  
|#

Las posiciones 32 a 47 ($20 a $2F) son los ZIOCB: Bloque de Control de Entrada-Salida de la página cero. Utilizan la misma estructura que los IOCB's en las ubicaciones 832 a 959 ($340 a $3BF). El ZIOCB se utiliza para comunicar los datos de control de E/S entre CIO y los manejadores de dispositivos. Cuando se inicia una operación de CIO, la información almacenada en el canal IOCB se mueve aquí para ser utilizada por las rutinas de CIO. Cuando la operación termina, la información actualizada es devuelta al área de usuario.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|* 	
||32|$20|ICHIDZ|Número de índice del manejador. Establecido por el sistema operativo como índice de la tabla de nombres de dispositivos para el archivo actualmente abierto. Si no hay ningún archivo abierto en este IOCB (IOCB libre), este registro se establece en 255 ($FF).||
||33|$21|ICDNOZ|Número de dispositivo o número de unidad Llamado MAXDEV por el DOS para indicar el número máximo de dispositivos. Se inicializa en uno.||
||34|$22|ICCOMZ|Byte de código de comando establecido por el usuario para definir cómo se formatea el resto del IOCB, y qué acción de E/S se debe realizar.||
||35|$23|ICSTAZ|Estado de la última acción IOCB devuelta por el dispositivo, establecida por el SO. Puede o no ser el mismo estado devuelto por el comando STATUS.||
||36, 37|$24, $25|ICBALZ/HZ|Dirección del buffer para la transferencia de datos o la dirección del nombre del archivo para comandos como OPEN, STATUS, etc.||
||38, 39|$26, $27|ICPTLZ/HZ|Dirección de la rutina "poner un byte" establecida por el SO. Es la dirección menos un byte de la rutina "put one byte" del dispositivo. Apunta al "IOCB no OPEN" de CIO en una sentencia CLOSE.||
||40, 41|$28, $29|ICBLLZ/HZ|Recuento de bytes de longitud del búfer utilizado para las operaciones PUT y GET; disminuye en uno por cada byte transferido.||
||42|$2A|ICAX1Z|Información auxiliar primer byte utilizado en OPEN para especificar el tipo de acceso al archivo necesario.||
||43|$2B|ICAX2Z|Variables de trabajo CIO, también utilizadas por algunas funciones del puerto serie. Información auxiliar segundo byte.||
||44, 45|$2C, $2D|ICAX3Z/4Z|Utilizado por los comandos BASIC NOTE y POINT para la transferencia de números de sector de disco. Estos cuatro bytes siguientes a la ubicación 47 también están etiquetados como: ICSPRZ y se definen como bytes de repuesto para uso local del CIO.||
||46|$2E|ICAX5Z|El byte al que se accede dentro del sector anotado en las posiciones 44 y 45. También se utiliza para el número IOCB multiplicado por 16. Cada bloque IOCB tiene 16 bytes de longitud. Otras fuentes indican que el registro X del 6502 también contiene esta información.||
||47|$2F|ICAX6Z|Byte de reserva. También denominado CIOCHR, es el almacenamiento temporal del byte de carácter en la operación PUT actual.||
||48|$30|STATUS|Almacenamiento de estado interno. Las rutinas SIO en ROM utilizan este byte para almacenar el estado de la operación SIO actual. STATUS utiliza la ubicación 793 ($319) como almacenamiento temporal. STATUS también se utiliza como un registro de almacenamiento para los valores de tiempo de espera, interrupción de BREAK y error durante las rutinas SIO.||
||49|$31|CHKSUM|Suma de control de la trama de datos utilizada por SIO: suma de un solo byte con arrastre al bit menos significativo. La suma de comprobación es el valor del número de bytes transmitidos (255; $FF). Cuando el número de bytes transmitidos es igual a la suma de comprobación, se establece un indicador de suma de comprobación enviada en la posición 59 ($3B). Utiliza las posiciones 53773 ($D20D) y 56 ($38) para comparar los valores (bytes transmitidos).||
||50, 51|$32, $33|BUFRLO/HI|Puntero al búfer de datos, cuyo contenido se transmite durante una operación de E/S, utilizado por SIO y el Bloque de Control de Dispositivos (DCB); apunta al byte que se va a enviar o recibir.Los bytes se transfieren al registro de retención de salida en serie paralelo de ocho bits o desde el registro de retención de entrada en 53773 ($D20D). 
Este registro es una ubicación de un byte que se utiliza para mantener los ocho bits que se transmitirán un bit a la vez (en serie) hacia o desde el dispositivo. 
El ordenador toma los ocho bits para procesarlos cuando el registro está lleno o sustituye otro byte en él cuando está vacío después de una transmisión.||
||52, 53|$34, $35|BFENLO/HI|Siguiente byte pasado el final del buffer de datos SIO y DCB descrito anteriormente.||
||54|$36|CRETRY|Número de reintentos de tramas de comandos. Por defecto es 13 ($0D). Este es el número de veces que un dispositivo intentará llevar a cabo un comando como leer un sector o formatear un disco.||
||55|$37|DRETRY|Número de reintentos del dispositivo. El valor por defecto es uno.||
||56|$38|BUFRFL|Indicador de búfer de datos lleno (255; $FF equivale a lleno).||
||57|$39|RECVDN|Recibir la bandera de hecho (255; $FF es igual a hecho).||
||58|$3A|XMTDON|Bandera de transmisión hecha (255; $FF es igual a hecho).||
||59|$3B|CHKSNT|Bandera de suma de comprobación enviada (255; $FF es igual a enviado).||
||60|$3C|NOCKSM|Indicador de "ninguna suma de comprobación sigue a los datos". No cero significa que no sigue la suma de comprobación; cero equivale a que la suma de comprobación sigue a los datos de transmisión.||
||61|$3D|BPTR|Esta localización es un puntero para el siguiente byte a usar en el buffer del casete.||
||63|$3F|FEOF|Fin de archivo de casete: Si contiene un cero, significa que aún quedan datos, cualquier otro número indica que se ha encontrado el fin de archivo.||
||65|$41|SOUNDR|Sonido de entrada/salida (I/O): Pokee esta dirección con un cero y el traspaso de información a los periféricos será silenciosa. Con otro número regresará el sonido.||
||66|$42|CRITIC|Bandera de región de E/S crítica; define la operación actual como una sección de tiempo crítico cuando el valor aquí es distinto de cero. Se comprueba en el proceso NMI después de que se haya procesado el VBLANK de la etapa uno. Si se introduce aquí cualquier número distinto de cero, se desactivará la acción de repetición de las teclas y cambiará el sonido del zumbador CTRL-2.
Cero es normal; poner CRITIC a un valor distinto de cero suspende un número de procesos del SO incluyendo el conteo de los temporizadores del software del sistema (temporizadores dos, tres, cuatro y cinco; ver ubicaciones 536 a 558; $218 a $22E). Se sugiere que no se establezca CRITIC por ningún período de tiempo. Cuando se ajusta un temporizador, CRITIC detiene los otros temporizadores para hacerlo, haciendo que se "pierda" una pequeña cantidad de tiempo. Cuando CRITIC es cero, ambos procedimientos VBLANK de la etapa uno y de la etapa dos serán ejecutados. Cuando es distinto de cero, sólo se procesará el VBLANK de la etapa uno.||
||67, 73|$43, $49|FMZSPG|Sistema de administrador de archivos de disco (FMS) página cero de registros (siete bytes).||
||67, 68|$43, $44|ZBUFP|Puntero de búfer de página cero al nombre de archivo del usuario para la E/S del disco.||
||69, 70|$45, $46|ZDRVA|Puntero de unidad de página cero. Copiado aquí desde DBUFAL y DBUFAH; 4905 y 4913 ($1329, $1331). También se utiliza en las rutinas de configuración de "sectores libres" y "obtención de sectores" del FMS.||
||71, 72|$47, $48|ZSBA|Puntero de búfer de sector de página cero.||
||73|$49|ERRNO|Número de error de E/S del disco. Inicializado a 159 ($9F) por FMS.||
||74|$4A|CKEY|Bandera de solicitud de arranque de casete en el arranque en frío. Comprueba si se ha pulsado la tecla START y, si es así, se establece CKEY. Los casetes de autoarranque se cargan pulsando la tecla de la consola START mientras se enciende el equipo. En respuesta al pitido, presiona el botón PLAY de la grabadora.||
||75|$4B|CASSBT|Bandera de arranque de casete. El Atari intenta arrancar simultáneamente un disco y un casete. Un cero significa que no se ha podido arrancar el casete. Ver ubicación 9||
||76|$4C|DSTAT|Registro del estado de la pantalla y del teclado utilizado por el manejador de la pantalla. También se utiliza para indicar que la memoria es demasiado pequeña para el modo de pantalla, el error de cursor fuera de rango y el estado de cancelación de BREAK.||
||77|$4D|ATRACT|Cambio de color automático: Si su programa no utiliza el teclado por más de 7 minutos, pokee esta dirección con cero periódicamente para evitar la rotación de colores. Para comenzar inmediatamente la rotación pokee 77 con 128.||
||78|4E|DRKMSK|Máscara de atracción oscura; ajustada a 254 ($FE) para una luminosidad normal cuando el modo de atracción está inactivo (ver posición 77). Fijado a 246 ($F6) cuando el modo de atracción está activo para garantizar que la luminancia del color de la pantalla no supere el 50%. Inicializado a 254 ($FE).||
||79|4F|COLRSH|Máscara de cambio de color; atrae al cambiador de color; los registros de color son EORd con las localizaciones 78 y 79 en la etapa dos VBLANK (ver localizaciones 18 - 20; $12 - $14). 
Cuando se pone a cero y la ubicación 78 es igual a 246, la luminancia del color se reduce en un 50%. COLRSH contiene el valor actual de la posición 19, por lo que se le da un nuevo valor de color cada 4,27 segundos.||
|#

Los bytes 80 a 122 ($50 a $7A) son utilizados por el editor de pantalla y el controlador de visualización.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|* 	
||80|$50|TEMP|Registro temporal utilizado por el manipulador de pantalla en el movimiento de datos hacia y desde la pantalla. También se llama TMPCHR.||
||81|$51|HOLD1|Igual que la posición 80. Se utiliza también para mantener el número de entradas de la lista de visualización.||
||82|$52|LMARGN|Margen izquierdo: El Sistema Operativo pone aquí un 2. Si desea cambiar este margen, ponga aquí el número correspondiente al margen deseado. Ej: POKE 82,20 (20=número de columnas a la izquierda del margen.)||
||83|$53|RMARGN|Igual que 82 pero refleja la posición del margen derecho, inicializada en 39. Estas posiciones sólo son válidas para gráfico 0 y ventana de texto. Dicha ventana consiste en 4 líneas de gráfico cero en la parte inferior de otro modo gráfico, por ejemplo: gráfico 8.||
||84|$54|ROWCRS|Posición de fila actual del cursor: Cero corresponde a la parte superior de la pantalla.||
||85, 86|$55, $56|COLCRS|Posición de columna actual del cursor: Cero corresponde a la posición izquierda de la pantalla. Debe usarse el siguiente cálculo:
COL = PEEK(85) + PEEK(86)*256||
||88, 89|$58, $59|SAVMSC|Inicio de la pantalla en RAM: Estas posiciones determinan en que parte de la RAM se encuentra el primer byte (parte superior izquierda) de la pantalla. Para imprimir el carácter A con poke usar la siguiente instrucción: 
POKE PEEK(88)+PEEK(89)*256,ASC("A")-32.||
||90|$5A|OLDROW|Fila anterior del cursor gráfico. Se actualiza desde la posición 84 ($54) antes de cada operación. Se utiliza para determinar la fila inicial para el DRAWTO y XIO 18 (comando FILL).||
||91, 92|$5B, $5C|OLDCOL|Columna del cursor de los gráficos anteriores. Se actualiza desde las posiciones 85 y 86 ($55, $56) antes de cada operación. Estas posiciones son utilizadas por los comandos DRAWTO y XIO 18 (FILL) para determinar la columna inicial del DRAW o FILL.||
||93|$5D|OLDCHR|Conserva el valor del carácter bajo el cursor utilizado para restaurar ese carácter cuando el cursor se mueve.||
||94, 95|$5E, $5F|OLDADR|Conserva la posición de memoria de la posición actual del cursor. Se utiliza con la posición 93 (arriba) para restaurar el carácter bajo el cursor cuando éste se mueve.||
||96|$60|NEWROW|Punto (fila) al que irán DRAWTO y XIO 18 (FILL).||
||97, 98|$61, $62|NEWCOL|Punto (columna) al que irán DRAWTO y XIO 18 (FILL). NEWROW y NEWCOL se inicializan a los valores de ROWCRS y COLCRS (84 a 86; $54 a $56) anteriores, que representan el punto final de destino de las funciones DRAW y FILL. Esto se hace para que ROWCRS y COLCRS puedan ser alterados durante estas rutinas.||
||99|$63|LOGCOL|Posición del cursor en la columna de una línea lógica. Una línea lógica puede contener hasta tres líneas físicas, por lo que LOGCOL puede oscilar entre cero y 119. Utilizado por el manejador de la pantalla.||
||100, 101|$64, $65|ADRESS|Almacenamiento temporal utilizado por el manipulador de pantalla para la dirección de la lista de visualización, el búfer de línea (583 a 622; $247 a $26E), el nuevo valor de MEMTOP después de la entrada DL, la dirección de la columna de la fila, el valor de DMASK, los datos a la derecha del cursor, el desplazamiento, el borrado, la rutina de borrado de pantalla y para la memoria de dirección de pantalla (ubicaciones 88, 89; $58, $59).||
||102, 103|$66, $67|MLTTMP|También llamado OPNTMP y TOADR; primer byte utilizado en OPEN como almacenamiento temporal. También utilizado por el manejador de la pantalla como almacenamiento temporal.||
||104, 105|$68, $69|SAVADR|También llamado FRMADR. Almacenamiento temporal, utilizado con ADRESS arriba para los datos bajo el cursor y en el movimiento de datos de línea en la pantalla.||
||106|$6A|RAMTOP|Cantidad de RAM en páginas (una página=256 bytes). Para ubicar el fin de la memoria RAM use la siguiente instrucción: RAM=PEEK(106)*256. Para reservar Memoria debe usar la siguiente instrucción: POKE 106,PEEK(106)-número de páginas a reservar.||
||107|$6B|BUFCNT|Recuento del búfer: el contador del tamaño de la línea lógica actual del editor de pantalla.||
||108, 109|$6C, $6D|BUFSTR|Byte bajo del editor (AM). Muestra el puntero de la rutina GETCH del editor (ubicación 62867 para la entrada; $F593). Almacenamiento temporal; devuelve el carácter apuntado por BUFCNT arriba.||
||110|$6E|BITMSK|Máscara de bits utilizada en las rutinas de mapeo de bits por el manejador de pantalla del SO en las ubicaciones 64235 a 64305 ($FAEB a $FB31). También se utiliza como registro de almacenamiento temporal del controlador de pantalla.||
||111|$6F|SHFAMT|Justificación de píxeles: la cantidad a desplazar los datos de píxeles justificados a la derecha en la salida o la cantidad a desplazar los datos de entrada para justificarlos a la derecha. Antes del proceso de justificación, este valor es siempre el mismo que el de 672 ($2A0).||
||112, 113|$70, $71|ROWAC|ROWAC y COLAC son acumuladores de trabajo para el control del trazado de puntos de fila y columna y las funciones de incremento y decremento.||
||114, 115|$72, $73|COLAC|Controla el trazado de puntos de columna.||
||116, 117|$74, $75|ENDPT|Punto final de la línea a trazar. Contiene el valor mayor de DELTAR o DELTAC para ser usado en conjunto con ROWAC/COLAC para controlar el trazado de los puntos de la línea.||
||118|$76|DELTAR|Fila delta; contiene el valor absoluto de NEWBOW (ubicación 96; $60) menos ROWCRS (ubicación 84; $54).||
||119, 120|$77, $78|DELTAC|Columna delta; contiene el valor absoluto de NEWCOL (posición 97; $61) menos el valor de COLCRS (posición 85; $55). Estos valores del registro delta, junto con las ubicaciones 121 y 122 de abajo, se utilizan para definir la pendiente de la línea a dibujar.||
||121|$79|ROWINC|El valor de incremento o decremento de la fila (más o menos uno).||
||122|$7A|COLINC|El valor de incremento o decremento de la columna (más o menos uno). ROWINC y COLINC controlan la dirección de la rutina de trazado de líneas. Los valores representan los signos derivados del valor en NEWROW (posición 96; $60) menos el valor en ROWCRS (posición 84; $54) y el valor en NEWCOL (posiciones 97, 98; $61, $62) menos el valor en COLCRS (posiciones 85, 86; $55, $56).||
||123|$7B|SWPFLG|Control del cursor en pantalla dividida. Igual a 255 ($FF) si la RAM de la ventana de texto y la RAM normal se intercambian; en caso contrario, es igual a cero. En los modos de pantalla dividida, los datos del cursor de gráficos y los datos de la ventana de texto se intercambian con frecuencia para obtener los valores asociados con el área a la que se accede en las ubicaciones de la base de datos del SO 84 a 95 ($54 a $5F). SWPFLG ayuda a mantener la pista de qué conjunto de datos está en estas ubicaciones.||
||124|$7C|HOLDCH|Aquí se desplaza un valor de carácter antes de que se procese la lógica de control y desplazamiento para el mismo.||
||125|$7D|INSDAT|Byte de almacenamiento temporal utilizado por el manejador de pantalla para el carácter bajo el cursor y la detección de fin de línea.||
||126, 127|$7E, $7F|COUNTR|Comienza conteniendo el valor mayor de DELTAR (posición 118; $76) o DELTAC (posición 119; $77). Este es el número de iteraciones requeridas para dibujar una línea. A medida que se dibuja cada punto de una línea, este valor se decrementa. Cuando el byte es igual a cero, la línea está completa (dibujada).||
||128, 129|$80, $81|LOMEM|Puntero al comienzo de la RAM disponible. Trabaja conjuntamente con 743 y 744. Es una buena idea modificar este puntero para reservar memoria para datos o rutinas en Assembler.||
||130, 131|$82, $83|VNTP|Puntero al comienzo de la tabla de nombres de variables del Basic.||
||132, 133|$84, $85|VNTD|Puntero al fin de la tabla anterior.||
||134, 135|$86, $87|VVTP|Puntero de la tabla de valores de las variables.||
||136, 137|$88, $89|STMTAB|Puntero al comienzo del programa de Basic codificado.||
||138, 139|$8A, $8B|STMCUR|Puntero a la línea codificada que está siendo utilizada actualmente por el Basic.||
||140, 141|$8C, $8D|STARP|Dirección de las matrices y variables alfanuméricas. Fin del programa codificado.||
||144, 145|$90, $91|MEMTOP|Fin de la memoria utilizada por el Basic.||
|#

El cartucho BASIC utiliza las ubicaciones 146 a 202 para varios usos, de los cuales no vale la pena informar. Con las siguientes excepciones, por supuesto.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|* 	
||160, 161|$A0, $A1|FORLN|Contiene el número de línea de la actual sentencia FOR encontrada. Por ejemplo:
%%100 FOR X=1 TO 25
110 NEXT X
120 PRINT PEEK(160)+PEEK(161)*256%%||
||173, 174|$AD, $AE|LSTPNT|Puntero de la lista. Contiene la ubicación de la línea que se está listando. Cuando se escribe LIST, se encuentra aquí 32767.||
||182|$B6|DATLN|Señala el número del elemento dentro de la sentencia DATA. Esto significa que actualmente estamos leyendo el primer número, el segundo, etc. Pruebe este programa:
%%10 FOR I =1 TO 8
20 READ A
30 ? PEEK(182)
40 NEXT I
50 DATA 1,2,3,4,5,6,7,8%%||
||183, 184|$B7, $B8|DATALN|Contiene el número de línea de la sentencia DATA que fue leída por última vez. Por ejemplo:
%%100 READ A
110 PRINT PEEK(183)+PEEK(184)*256
1000 DATA 10%%Se puede utilizar DATALN en una rutina de detección de errores para averiguar dónde se ha producido un error de lectura.||
||186, 187|$BA, $BB|STOPLN|Línea en la cual se detuvo la ejecución del programa Basic.||
||195|$C3|ERRSAVE|Número de error que causo la detención del programa o la utilización de la instrucción "TRAP".||
||201|$C9|PTABW|Esta ubicación especifica el número de columnas entre las paradas de TAB. El primer tabulador vencerá a PEEK(201). El valor por defecto es diez. Este es el valor entre elementos separados en una sentencia PRINT por comas -- como PRINT AS, LOOP, C(12) -- no por el espaciado de la tecla TAB. El número mínimo de espacios entre TABS es tres. Si usted hace POKE 201,2, será tratado como cuatro espacios, y POKE 201,1 es tratado como tres espacios. POKE 201,0 hará que el sistema se cuelgue cuando encuentre una sentencia PRINT con comas. Para cambiar la configuración de la tecla TAB, vea TABMAP (posiciones 675 a 689; $2A3 - $2B1). PTABW no se restablece al valor por defecto al presionar RESET o al cambiar los modos GRÁFICOS (a diferencia de TABMAP).
PTABW funciona en todos los modos GRÁFICOS, no sólo en los modos de texto. El tamaño de los espacios entre elementos depende del tamaño de los píxeles en el modo GRÁFICO en uso. Por ejemplo, en GR.0, cada espacio tiene un carácter de ancho, mientras que en GR.8 cada espacio tiene medio reloj de color (un punto) de ancho.||
||202|$CA|BININT|Si coloca algo que no sea un cero aquí, al pasar al modo inmediato (es decir, reinicio del sistema, interrupción o la finalización del programa) hace que el programa actualmente en la memoria se borre solo, otra forma divertida de evitar que las personas vean su programa.
%%100 POKE 202,1
110 PRINT "Ahora intente listar este programa"%%||
||203, 207|$CB, $CF| |No utilizado por los cartuchos BASIC o Assembler.||
||208, 209|$D0, $D1| |No utilizado por BASIC. ¡La única vez que he visto alguna de estas localizaciones no utilizadas en uso es en COMPUTE! (marzo de 1982 y octubre de 1981), cuando se utilizaron para rutinas de ordenación del usuario, y en ANTIC (junio de 1982), donde se utilizaron como banderas en una demostración gráfica. Los bytes del 203 al 209 ($CB a $D1) son los únicos bytes de la página cero que BASIC deja incontestablemente libres.||
||210, 211|$D2, $D3| |Reservado para el uso de BASIC u otros cartuchos.||
|#

Las posiciones 212 a 255 ($D4 a $FF) están reservadas para el uso del paquete de punto flotante. Las rutinas FP están en la ROM, desde las posiciones 55296 a 57393 ($D800 a $E031). Estas ubicaciones de página cero pueden ser utilizadas si el paquete FP no es llamado por el programa del usuario. Sin embargo, no utilice ninguna de estas ubicaciones para una rutina de interrupción, ya que tales rutinas podrían ocurrir durante una rutina FP llamada por el BASIC, causando la caída del sistema.

El punto flotante utiliza una precisión de seis bytes. El primer byte del número Decimal Codificado Binario (BCD) es el exponente (donde si el BIT 7 es igual a cero, entonces el número es positivo; si es uno, entonces es negativo). 
Los siguientes cinco bytes son la mantisa. Si eso fuera todo lo que hay que hacer. El formato BCD es bastante complejo y se explica mejor en el capítulo ocho de De Re Atari.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|* 	
||212, 217|$D4, $D9|FR0|Usados por el paquete de coma flotante.||
||218, 223|$DA, $DF|FRE|Registro extra FP.||
||224, 229|$E0, $E5|FR1|Registro de punto flotante uno; contiene una forma interna de seis bytes del número de FP al igual que FR0. El paquete FP transfiere con frecuencia datos entre estos dos registros y utiliza ambos para dos números de operaciones aritmeticas.||
||230, 235|$E6, $EB|FR2|Segundo registro de FP.||
||236|$EC|FRX|Registro de repuestos FP.||
||237|$ED|EEXP|El valor de E (el exponente).||
||238|$EE|NSIGN|El signo del número de FP.||
||239|$EF|ESIGN|El signo del exponente.||
||240|$F0|FCHRFLG|La primera bandera de carácter.||         	
||241|$Fl|DIGRT|El número de dígitos a la derecha del decimal.||
||242|$F2|CIX|Índice de caracteres (entrada actual). Se utiliza como compensación de la entrada. búfer de texto señalado por INBUFF a continuación.||        	
||243, 244|$F3, $F4|INBUFF|Puntero del búfer de texto ASCII de entrada; el búfer de entrada de la línea de programa del usuario, utilizado en la traducción del código ATASCII a valores FP. El buffer de salida de resultados está en las posiciones 1408 a 1535 ($580 a $5FF).||
||245, 246|$F5, $F6|ZTEMP1|Registro temporal.||
||247, 248|$F7, $F8|ZTEMP4|Registro temporal.||
||249, 250|$F9, $FA|ZTEMP3|Registro temporal.||
||251|$FB|RADFLG|También llamado DEGFLG. Cuando se establece en cero, todas las funciones trigonométricas se realizan en radianes; cuando se establece en seis, se realizan en grados. El comando NEW y RESET de BASIC restauran RADFLG a radianes.||
||252, 253|$FC, $FD|FLPTR|Apunta al número de FP del usuario.||          	
||254, 255|$FE, $FF|FPTR2|Puntero al segundo número de FP del usuario que se utilizará en un operación.||
|#

Fin de la página cero, siga la lectura de la siguiente página ((/Biblioteca/MapeandoElAtari/Pagina1 uno)).