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 HexadecimalNombreDescripción
0, 1$0, $1LINZBSLINBUG 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, $3CASINIVector 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, $5RAMLOPuntero 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$6TRAMSZRegistro 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$7TSTDATRegistro 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$8WARMSTBandera 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$9BOOT?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, $BDOSVECVector 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, $DDOSINIDirecció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, $EAPPMHIUbicación más alta usada por BASIC (LSB, MSB)
16$10POKMSKTecla BREAR, Para desactivar esta tecla debemos usar los siguientes comandos :
POKE 16,112:POKE 53774,112
17$11BRKKEYCero 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, $14RTCLOK

Reloj del computador, Para cálculo de tiempo debemos usar la siguiente fórmula:

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, $16BUFADRRegistro de dirección del buffer indirecto (página cero). Puntero temporal a la memoria intermedia del disco actual.
23$17ICCOMTComando 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, $19DSKFMSPuntero del gestor de archivos del disco. Llamado JMPTBL por el DOS; utilizado como vector para el FMS.
26, 27$1A, $1BDSKUTLEl 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$1CPTIMOTTiempo 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$1DPBPNTPuntero 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$1EPBUFSZTamañ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$1FPTEMPRegistro 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 HexadecimalNombreDescripción
32$20ICHIDZNú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$21ICDNOZNú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$22ICCOMZByte 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$23ICSTAZEstado 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, $25ICBALZ/HZDirecció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, $27ICPTLZ/HZDirecció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, $29ICBLLZ/HZRecuento de bytes de longitud del búfer utilizado para las operaciones PUT y GET; disminuye en uno por cada byte transferido.
42$2AICAX1ZInformación auxiliar primer byte utilizado en OPEN para especificar el tipo de acceso al archivo necesario.
43$2BICAX2ZVariables de trabajo CIO, también utilizadas por algunas funciones del puerto serie. Información auxiliar segundo byte.
44, 45$2C, $2DICAX3Z/4ZUtilizado 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$2EICAX5ZEl 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$2FICAX6ZByte de reserva. También denominado CIOCHR, es el almacenamiento temporal del byte de carácter en la operación PUT actual.
48$30STATUSAlmacenamiento 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$31CHKSUMSuma 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, $33BUFRLO/HIPuntero 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, $35BFENLO/HISiguiente byte pasado el final del buffer de datos SIO y DCB descrito anteriormente.
54$36CRETRYNú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$37DRETRYNúmero de reintentos del dispositivo. El valor por defecto es uno.
56$38BUFRFLIndicador de búfer de datos lleno (255; $FF equivale a lleno).
57$39RECVDNRecibir la bandera de hecho (255; $FF es igual a hecho).
58$3AXMTDONBandera de transmisión hecha (255; $FF es igual a hecho).
59$3BCHKSNTBandera de suma de comprobación enviada (255; $FF es igual a enviado).
60$3CNOCKSMIndicador 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$3DBPTREsta localización es un puntero para el siguiente byte a usar en el buffer del casete.
63$3FFEOFFin 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$41SOUNDRSonido 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$42CRITICBandera 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, $49FMZSPGSistema de administrador de archivos de disco (FMS) página cero de registros (siete bytes).
67, 68$43, $44ZBUFPPuntero de búfer de página cero al nombre de archivo del usuario para la E/S del disco.
69, 70$45, $46ZDRVAPuntero 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, $48ZSBAPuntero de búfer de sector de página cero.
73$49ERRNONúmero de error de E/S del disco. Inicializado a 159 ($9F) por FMS.
74$4ACKEYBandera 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$4BCASSBTBandera 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$4CDSTATRegistro 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$4DATRACTCambio 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.
784EDRKMSKMá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).
794FCOLRSHMá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 HexadecimalNombreDescripción
80$50TEMPRegistro temporal utilizado por el manipulador de pantalla en el movimiento de datos hacia y desde la pantalla. También se llama TMPCHR.
81$51HOLD1Igual que la posición 80. Se utiliza también para mantener el número de entradas de la lista de visualización.
82$52LMARGNMargen 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$53RMARGNIgual 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$54ROWCRSPosición de fila actual del cursor: Cero corresponde a la parte superior de la pantalla.
85, 86$55, $56COLCRSPosició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, $59SAVMSCInicio 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$5AOLDROWFila 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, $5COLDCOLColumna 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$5DOLDCHRConserva el valor del carácter bajo el cursor utilizado para restaurar ese carácter cuando el cursor se mueve.
94, 95$5E, $5FOLDADRConserva 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$60NEWROWPunto (fila) al que irán DRAWTO y XIO 18 (FILL).
97, 98$61, $62NEWCOLPunto (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$63LOGCOLPosició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, $65ADRESSAlmacenamiento 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, $67MLTTMPTambié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, $69SAVADRTambié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$6ARAMTOPCantidad 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$6BBUFCNTRecuento del búfer: el contador del tamaño de la línea lógica actual del editor de pantalla.
108, 109$6C, $6DBUFSTRByte 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$6EBITMSKMá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$6FSHFAMTJustificació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, $71ROWACROWAC 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, $73COLACControla el trazado de puntos de columna.
116, 117$74, $75ENDPTPunto 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$76DELTARFila delta; contiene el valor absoluto de NEWBOW (ubicación 96; $60) menos ROWCRS (ubicación 84; $54).
119, 120$77, $78DELTACColumna 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$79ROWINCEl valor de incremento o decremento de la fila (más o menos uno).
122$7ACOLINCEl 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$7BSWPFLGControl 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$7CHOLDCHAquí se desplaza un valor de carácter antes de que se procese la lógica de control y desplazamiento para el mismo.
125$7DINSDATByte 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, $7FCOUNTRComienza 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, $81LOMEMPuntero 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, $83VNTPPuntero al comienzo de la tabla de nombres de variables del Basic.
132, 133$84, $85VNTDPuntero al fin de la tabla anterior.
134, 135$86, $87VVTPPuntero de la tabla de valores de las variables.
136, 137$88, $89STMTABPuntero al comienzo del programa de Basic codificado.
138, 139$8A, $8BSTMCURPuntero a la línea codificada que está siendo utilizada actualmente por el Basic.
140, 141$8C, $8DSTARPDirección de las matrices y variables alfanuméricas. Fin del programa codificado.
144, 145$90, $91MEMTOPFin 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 HexadecimalNombreDescripción
160, 161$A0, $A1FORLNContiene 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, $AELSTPNTPuntero de la lista. Contiene la ubicación de la línea que se está listando. Cuando se escribe LIST, se encuentra aquí 32767.
182$B6DATLNSeñ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, $B8DATALN

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, $BBSTOPLNLínea en la cual se detuvo la ejecución del programa Basic.
195$C3ERRSAVENúmero de error que causo la detención del programa o la utilización de la instrucción "TRAP".
201$C9PTABWEsta 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$CABININTSi 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 HexadecimalNombreDescripción
212, 217$D4, $D9FR0Usados por el paquete de coma flotante.
218, 223$DA, $DFFRERegistro extra FP.
224, 229$E0, $E5FR1Registro 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, $EBFR2Segundo registro de FP.
236$ECFRXRegistro de repuestos FP.
237$EDEEXPEl valor de E (el exponente).
238$EENSIGNEl signo del número de FP.
239$EFESIGNEl signo del exponente.
240$F0FCHRFLGLa primera bandera de carácter.
241$FlDIGRTEl número de dígitos a la derecha del decimal.
242$F2CIXÍ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, $F4INBUFFPuntero 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, $F6ZTEMP1Registro temporal.
247, 248$F7, $F8ZTEMP4Registro temporal.
249, 250$F9, $FAZTEMP3Registro temporal.
251$FBRADFLGTambié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, $FDFLPTRApunta al número de FP del usuario.
254, 255$FE, $FFFPTR2Puntero 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 uno.