Ver el código de Página 6 a la 15

#|
*|Decimal |Hexadecimal|Nombre|Descripción|*
||1536, 1791|$600, $6FF|Página 6|Página seis: 256 ($FF) bytes protegidos contra el uso del sistema operativo. El sistema operativo no utiliza la página seis y puede usarse de forma segura para subrutinas de lenguaje de máquina, controladores de E/S especiales, conjuntos de caracteres alterados o cualquier cosa que el usuario pueda colocar en el espacio. Puede surgir algún problema cuando la declaración INPUT recupera más de 128 caracteres.
Las ubicaciones de 1536 a 1663 ($600 a $67F) se utilizan inmediatamente como buffer para los caracteres sobrantes. Para evitar el desbordamiento, evite que las declaraciones INPUT recuperen más de 128 caracteres. La implementación valFORTH de fig-FORTH (de ValPar International) utiliza toda la página seis para su código de inicio, por lo que no está disponible para su uso. Sin embargo, FORTH le permite reservar otros bloques de memoria para funciones similares. BASIC A+ utiliza ubicaciones de $0600 - $67F.||
|#

Las localizaciones 1792 a la dirección especificada por LOMEM (localizaciones 128, 129; ($80, $81) - el puntero a la memoria baja del BASIC) también son utilizadas por el DOS y el Sistema de Gestión de Archivos (FMS). Consulte el código fuente del DOS e Inside Atari DOS para más detalles. Las direcciones que siguen son las del DOS 2.0S, el DOS oficial de Atari en el momento de escribir esto. Hay otro DOS disponible como alternativa al DOS 2.0 -- K-DOS (TM), de K-BYTE (R). El K-DOS no está basado en menús, sino en comandos. No utiliza todas las mismas posiciones de memoria que el DOS Atari, aunque utiliza una versión modificada del FMS Atari. (Otro DOS manejado por comandos, llamado OS/A+, es completamente compatible con el DOS 2.OS y está disponible en OSS, los creadores del DOS 2.0S). 

#|
*|Decimal|Hexadecimal|Nombre|Descripción|*
||1792, 5377|$700, $1501|Página 7 a la 15|Sistema de gestión de archivos RAM. FMS proporciona la interfaz entre BASIC o DUP y la unidad de disco. Es un controlador de dispositivo sofisticado para todas las operaciones de entrada y salida que involucran el dispositivo "D:".
Permite a los usuarios del disco usar los comandos especiales del disco XIO en el BASIC (vea el área IOCB 832 a 959: $340 a $3BF). Es residente en RAM debajo de su RAM del BASIC y proporciona el punto de entrada a DOS cuando BASIC lo llama.||
||5440, 13062|$1540, $3306| |DUP.SYS RAM. La parte superior variará según la cantidad de espacio de almacenamiento en búfer asignado a la unidad y a los búferes de sector.||
||6780, 7547|$1A7C, $1D7B| |Búfers de unidad y búferes de datos sectoriales. La cantidad de memoria variará según la cantidad de buffers asignados.||
||7548, MEMLO|$1D7C, $3306|(máxima)|Porción no residente de DUP.SYS, rutinas de utilidad de DOS. DUP proporciona las utilidades elegidas en la página del menú de DOS, no en BASIC. No reside en la RAM cuando utiliza BASIC u otro cartucho; más bien se carga cuando se llama a DOS desde BASIC o durante el arranque automático (y ningún cartucho lo reemplaza).
Cuando se carga DUP, sobrescribe la parte inferior de la memoria. Si desea salvar su programa de la destrucción, debe haber creado un archivo MEM.SAV en el disco antes de llamar a DOS desde su programa. Consulte el Manual de referencia de DOS.||
|#

Las ubicaciones 1792 a 2047 ($700 a $7FF; página siete) son el área de inicio del usuario. MEMLO y LOMEM apuntan a 1792 cuando no se carga ningún programa DOS o DUP. Esta área luego se puede utilizar para sus programas BASIC o en lenguaje de máquina.
La dirección de memoria libre más baja es 1792 y los programas pueden extenderse hacia arriba desde aquí. Hay un búfer de una página antes del espacio de programa utilizado para la tokenización de declaraciones BASIC, al que apuntan las ubicaciones 128, 129 ($80, $81).
En realidad, un programa puede comenzar desde cualquier dirección por encima de 1792 y por debajo de la lista de visualización en pantalla siempre que no sobrescriba este búfer si es un programa en BASIC. Además, 1792 es el comienzo de la parte FMS de DOS cuando se reside.
 
Cuando se inicia el software, el puntero MEMLO en 743,744 ($2E7, $2E8) en la base de datos del sistema operativo (ubicaciones 512 a 1151; $512 a $47F) apunta a la primera ubicación de memoria libre encima de ese software; de lo contrario, apunta a 1792.
La porción DUP de DOS reside parcialmente aquí, comenzando en 5440 ($1540) y llegando hasta 13062 ($1540 a $3306). La ubicación de la rutina de entrada de inicio del disco del sistema operativo (DOBOOT) es 62189 ($F2ED). El Atari DOS 2.0S estándar ocupa los sectores del uno al 83 ($53) en un disco.

El sector uno es el sector de arranque. Los sectores del dos al 40 ($28) son la porción FMS y los sectores del 41 ($29) al 83 son la porción DUP.SYS de DOS. Para obtener más información, consulte los listados de fuentes de DOS y SO y Inside Atari DOS.

====FMS, DOS.SYS y DUP.SYS====

Los registros de arranque del disco (sector uno en un disco) se leen en 1792 ($700). A partir de $700 (1792), el formato es:

#|
*|Byte|Hexadecimal|Etiqueta y uso|*
||0|$700|BFLAG: El indicador de inicio es igual a cero (sin usar).||
||1|$701|BRCNT: Número de sectores consecutivos a leer (si el archivo es DOS, entonces BRCNT es igual a uno).||
||2, 3|$702, $703|BLDADR: Dirección de carga del sector de arranque ($700).||
||4, 5|$704, $705|BIWTARR: Dirección de inicialización.||
||6|$706|JMP XBCONT: Vector de continuación de arranque; $4C (76): comando JMP a la siguiente dirección en los bytes siete y ocho.||
||7,8|$707, $708|Dirección de continuación de lectura de arranque (LSB/MSB).||
||9|$709|SABYTE: Número máximo de archivos abiertos simultáneamente. El valor predeterminado es tres (ver 1801 a continuación).||
||10|$70A|DRVBYT: Bits de unidad: el número máximo de unidades conectadas al sistema. El valor predeterminado es dos (ver 1802 a continuación).||
||11|$70B|(sin usar) Dirección de asignación de búfer, establecida en cero.||
||12 ,13|$70C, $70D|SASA: Dirección de inicio de la asignación de búfer. Apunta a 1995 ($7CB) cuando se carga DOS.||
||14|$70E|DSFLG: Bandera de DOS. El indicador de inicio está establecido en un valor distinto de cero. Debe ser distinto de cero para la segunda fase del proceso de inicio. Indica que el archivo DOS.SYS ha sido escrito en el disco; cero equivale a ningún archivo DOS, uno equivale a un disco de sector de 128 bytes, dos equivale a un disco de sector de 256 bytes.||
||15, 16|$70F, $710|DFLINK: Puntero al primer sector del archivo DOS.SYS.||
||17|$711|BLDISP: Desplazamiento al byte 125 del enlace del sector ($7D). El byte de enlace del sector es el puntero al siguiente sector del disco que se leerá. Si es cero, se ha llegado al final del archivo.||
||18, 19|$712, $713|DFLADR: Dirección de inicio del archivo DOS.SYS.||
||20+|$714+|Continuación del archivo de carga de arranque. Consulte el Manual del usuario del sistema operativo y el Capítulo 20 de Inside Atari DOS.||
|#

Los datos del sector de arranque se colocan en las ubicaciones 1792 a 1916 ($700 a $77C). Los datos del resto de DOS.SYS se encuentran a partir de 1917 ($77D). Todas las cargas de archivos binarios comienzan con 255 ($FF). El siguiente cuatro bytes son las direcciones inicial y final (LSB/MSB), respectivamente.

#|
*|Decimal |Hexadecimal|Nombre|Descripción|*
||1801|$709|SABYTE|Registra el límite del número de archivos que pueden abrirse simultáneamente. Normalmente se establece en tres, el máximo es siete (uno por cada IOCB disponible -- recuerde que IOCB0 se utiliza para la visualización en pantalla). Cada fichero disponible toma 128 bytes para un buffer, si aumentas el número de buffers, disminuyes tu espacio RAM en consecuencia. Puedes hacer POKE 1801 con tu nuevo número para aumentar o disminuir el número de ficheros y luego reescribir el DOS (llamando al DOS desde BASIC y eligiendo la selección de menú **H**) y tener este número como predeterminado en el nuevo DOS.||
||1802|$70A|DRVBYT|El número máximo de unidades de disco en su sistema, el valor por defecto del DOS 2.0 es dos. Los menos cuatro bits se utilizan para registrar qué unidades están disponibles, por lo que si tiene unidades uno, tres y cuatro, esta ubicación se leería:

00001101 o 13 en decimal.

Cada unidad tiene un buffer separado de 128 bytes reservado para ella en RAM. Si tiene más o menos que el predeterminado (dos), entonces POKE 1802 con el número apropiado:

1 drive  =  1 BIT  0 = 00000001
2 drives =  3 BITS 0 & 1 = 00000011
3 drives =  7 BITS 0, 1 & 2 = 00000111
4 drives = 15 BITS 0, 1, 2 & 3 = 00001111

Esto supone que las tiene numeradas secuencialmente. Si no es así, haga POKE en la traducción decimal apropiada para obtener el código binario correcto: cada unidad está especificada por uno de los cuatro bits inferiores, desde el uno en BIT 0 hasta el cuatro en BIT 3. Si hace PEEK (1802) y obtiene tres, por ejemplo, significa que las unidades uno y dos están asignadas, no tres unidades.

Puede guardar su modificación en un nuevo disco llamando al DOS y eligiendo la selección de menú **H**. Este nuevo DOS arrancará con el número de unidades y búferes que haya asignado. Un sistema de una unidad puede ahorrar 128 bytes de esta manera (256 si se elige un búfer de datos menos). Véase el Manual del DOS, Apéndice G ((https://archive.org/details/disk-operating-system-iireference-manual/page/86/mode/2up página 87)).||
||1900|$76C|BSIO|Punto de entrada a las rutinas de E/S del sector de disco FMS.||
||1906|$772|BSIOR|Punto de entrada al gestor de discos FMS.||
||1913|$779|....|Bandera de verificación de escritura para operaciones de E/S de disco. POKE con 80 ($50) para desactivar la función de verificación, 87 ($57) para volver a activarla. La escritura en disco sin verificación es más rápida, pero puedes obtener errores en tus datos. He tenido muy pocos errores generados desactivando la función verify, pero incluso un error en material crítico puede destruir todo un programa. Tenga cuidado al usar esta ubicación. Puede guardar DOS (como arriba con la selección de menú **H**) sin escribir verify como su nuevo valor por defecto escribiendo DOS en un nuevo disco. Vea el Manual del DOS, apéndice F ((https://archive.org/details/disk-operating-system-iireference-manual/page/84/mode/2up página 85)). La bandera de verificación de escritura de K-DOS se encuentra en 1907 ($773).||
||1995|$7CB|DFMSDH|Punto de entrada a un manejador de dispositivo (disco) FMS de 21 bytes. La dirección de este manejador se coloca en HATABS (posiciones 794 a 831; $31A a $33F) por la rutina de inicialización del FMS. Cuando CIO necesite llamar a una función FMS, localizará la dirección de esa función a través de la tabla de direcciones del manejador. Ver ((https://archive.org/details/Inside_Atari_DOS/page/n39/mode/2up Capítulos 8 al 11)) de Inside Atari DOS, publicado por COMPUTE! Books.||
||2016|$7E0|DINT|Rutina de inicialización del FMS. El punto de entrada es 1995 ($7CB). DUP llama a FMS en este punto. K-DOS utiliza la misma ubicación para su rutina de inicialización.||
||2219|$8AB|DFMOPN|Rutinas OPEN, incluyendo open para append, update y output.||
||2508|$900|DFMPUT|Rutinas de bytes PUT.||
||2591|$A1F|WTBUR|Rutinas de E/S en ráfaga.||
||2592-2773|$A20, $AD5|....|En COMPUTE!, ((https://archive.org/details/1982-05-compute-magazine/page/162/mode/2up mayo y julio de 1982)), Bill Wilkinson analizó BURST I/O, que no debería tener lugar cuando un archivo está abierto para su actualización, pero sí lo hace debido a un error menor en DOS 2.0 (consulte también Inside Atari DOS, Capítulo 12). Esto hará que las escrituras de actualización funcionen correctamente, pero las lecturas de actualización sean malas. Los siguientes POKE corregirán el problema. Recuerde guardar DOS nuevamente en un disco nuevo.

POKE 2592,130 ($A20,$82)
POKE 2593,19  ($A21,$13)
POKE 2594,73  ($A22,$49)
POKE 2595,12  ($A23,$0C)
POKE 2596,240 ($A24,$F0)
POKE 2597,36  ($A25,$24)
POKE 2598,106 ($A26,$6A)
POKE 2599,234 ($A27,$EA)
POKE 2625,16  ($A41,$10)
POKE 2773,31  ($AD5,$1F)

Tenga en cuenta que la edición de julio de 1982 de COMPUTE! contenía un error tipográfico en el que el valor que se iba a insertar en 2773 aparecía erróneamente como 13, no 31). Wilkinson señala que una manera de desactivar completamente BURST I/O (útil en algunas circunstancias, como usar DOS BINARY SAVE para guardar el contenido de ROM al disco!) es por:

POKE 2606,0 ($A2E,$0)

Esto, sin embargo, hará que el sistema CARGUE y GUARDE archivos de forma considerablemente más lenta, por lo que no se recomienda como un cambio permanente al DOS.||
||2751|$ABF|DFMGET|Rutinas GET byte, incluidas las rutinas GET archivo.||
||2817|$B0l|DFMSTA|Rutinas de estado del disco.||
||2837|$B15|DFMCLS|Rutinas IOCB CLOSE.||
||2983|$BA7|DFMDDC|Inicio de las rutinas de comandos dependientes del dispositivo, incluidos los comandos especiales BASIC XIO.||
||3033|$BD9|XRENAME|Renombrar un fichero.||
||3122|$C32|XDELETE|Borrar un fichero.||
||3196|$C7C|XLOCK, XUNLOCK|Bloquear y desbloquear archivos. Las rutinas de UNLOCK comienzan en 3203 ($C83).||
||3258|$CBA|XPOINT|Comando POINT del BASIC.||
||3331|$D03|XNOTE|Comando NOTE del BASIC. Consulte el Manual del DOS para obtener información sobre estos dos comandos BASIC, y consulte De Re Atari para ver un ejemplo de uso.||
||3352|$D18|XFORMAT|Formatea todo el disquete.||
||3501|$DAD|LISTDIR|Lista el directorio del disco.||
||3742|$E9E|FNDCODE|Descodificación del nombre de archivo, incluida la prueba de validez de comodines. El nombre de archivo actual es señalado por ZBUFP en las posiciones 67, 68 ($43, $44).||
||3783|$EC7|....|Introduciendo aquí el valor ATASCII deseado, puede cambiar el carácter comodín (*; ATASCII 42, $2A) utilizado por el DOS por cualquier otro carácter de su elección. El DOS modificado puede guardarse en el disco con la selección "H" del menú DOS.||
||3818,3822|$EEA, $EEE|....|Haciendo POKE en el 3818 con 33 y en el 3822 con 123 ($21 ,$7B;), puede modificar el DOS para que acepte como válidos nombres de ficheros con signos de puntuación, números y minúsculas; 33 es el rango bajo del código ATASCII y 127 el rango alto (los valores más bajos o altos son códigos de control y gráficos y caracteres inversos). Por supuesto, cualquier DOS sin modificar seguirá sin aceptar tales nombres de archivo. En realidad podría cambiar el rango a cualquier valor de cero a 255 a su discreción. Esto, sin embargo, puede causar otros problemas con códigos ATASCII como espacios y el comodín (*; ver arriba). Se puede volver a guardar en disco con la selección de menú "H".||
||3850|$F0A|FDSCHAR|Almacena los caracteres de nombre de archivo resultantes de las rutinas de descodificación de nombres de archivo.||
||3873|$F21|SFDIR|Rutinas de búsqueda en directorios; busca el nombre de archivo especificado por el usuario.||
||3988|$F94|WRTNXS|Rutina del sector de escritura de datos.||
||4111|$100F|RDNXTS|Rutina de lectura del sector de datos.||
||4206|$106E|RDDIR|Rutinas de lectura y escritura de sectores de directorio.||
||4235|$108B|RDVTOC|Leer o escribir los sectores de la tabla de contenidos del volumen (VTOC).||
||4293|$10C5|FRESECT|Rutina de sectores libres; devuelve el número de sectores libres en un disco que están disponibles para el usuario.||
||4358|$1106|GETSECTOR|Rutina de obtención de sector; recupera del disco un sector libre para su uso.||
||4452|$1164|SETUP|SETUP -- Inicialización de los parámetros de FMS. Prepara al FMS para tratar la operación a realizar y para acceder a un fichero en particular. Ver Inside Atari DOS, ((https://archive.org/details/Inside_Atari_DOS/page/n33/mode/2up Capítulo Siete)).||
||4618|$120A|WRTDOS|Escribir nuevo archivo DOS.SYS a la rutina de disco, incluyendo nuevo archivo FMS al archivo DOS.SYS.||
||4789|$12B5|ERRNO|Inicio de la tabla de números de error FMS.||
||4856, 4978|12F8, 1372|....|Área de almacenamiento FMS diversa: longitud del sector, cinta de la unidad, nivel de pila, número de archivo, etc.||
||*|*|*|*||
||5121|$1401|FILDIR|Directorio de archivos, un búfer secuencial de 256 ($100) bytes para las entradas al directorio del disco.||
||5377|$1501|ENDFMS|Búfer de directorio de disco (VTOC -- Volume Table Of Contents). Se reservan 64 ($40) bytes, un byte para cada archivo posible. También marca el final de FMS. El VTOC (sector 360; $168) es un mapa secuencial de bits de cada uno de los 720 sectores del disco. Comienza en el byte diez y continúa hasta el byte 99. Cuando un bit está activado (uno), indica que el sector asociado está en uso.||
||5440|$1540|DOS|Dirección de inicialización de DUP.SYS. Comienzo de mini-DOS; la parte residente en RAM de DUP. Usada para el mismo propósito en K-DOS.||
||5446, 5450|$1546, $154A|....|Contiene la ubicación (LSB/MSB) del VEC del DOS (ubicación 10; $A). Este es el puntero a la dirección a la que BASIC saltará cuando DOS sea llamado.||
||5533|$159D|DUPFLG|Bandera para comprobar si DUP ya reside en la memoria. Cero es igual a DUP no está allí.||
||5534|$159E|OPT|Se utiliza para almacenar el valor de la opción del menú de disco elegida por el usuario.||
||5535|$159F|LOADFLG|Si en esta posición se lee 128, no es necesario cargar un archivo de memoria (MEM.SAV).||
||5540|$15A4|SFLOAD|Rutinas para cargar un archivo MEM.SAV si existe.||
||5888|$1700|USRDOS|Aparece en el archivo de equivalencias DUP.SYS, pero nunca se explica en los listados.||
||5899|$170B|MEMLDD|Indica que se ha cargado el archivo MEM.SAV. Cero significa que no se ha cargado.||
||5947|$173B|....|Las rutinas de creación de archivos MEM.SAV (MEMSAVE) comienzan aquí. Comienzan con el nombre de archivo MEM.SAV almacenado en formato ATASCII. Las rutinas de escritura comienzan en MWRITE, 5958 ($1746). La utilidad del DOS MEMSAVE copia los 6000 bytes inferiores de memoria al disco para evitar que tu programa BASIC sea destruido cuando llamas al DOS, que entonces carga DUP.SYS en esa área de memoria.||
||6044,6045|$179C, $179D|INISAV|DOSINI (ver ubicación 12, 13; $C, $D) ubicación para guardar vectores. Punto de entrada al DOS en una llamada desde BASIC.||
||6046|$179E|MEMFLG|Indicador que muestra si la memoria se ha escrito en el disco mediante un archivo MEM.SAV.||
||6418|$1912|CLMJMP|Prueba para ver si el DOS debe cargar MEM.SAV desde el disco antes de hacer una ejecución en la dirección del cartucho, luego salta a la dirección del cartucho.||
||6432|$1920|LMTR|Prueba para ver si el DOS debe cargar MEM.SAV antes de realizar un comando de ejecución en dirección desde el menú DOS.||
||6457|$1939|LDMEM|Rutinas de carga MEMSAVE (para el archivo MEM.SAV).||
||6518|$1979|INITIO|Entrada de arranque en caliente DUP.SYS. Un excelente programa para eliminar la necesidad de DUP.SYS y MEM.SAV (¡por no mencionar el tiempo requerido para cargarlos!) fue presentado en COMPUTE!, julio de 1982, llamado ((https://archive.org/details/1982-07-compute-magazine/page/106/mode/2up MicroDOS)); merece la pena examinarlo. Véase también "The Atari Wedge", COMPUTE!, ((https://archive.org/details/1982-12-compute-magazine/page/240/mode/2up diciembre)) de 1982.||
||6630|$19E6|ISRODN|Inicio de la rutina de servicio de interrupción serie para dar salida a los datos necesarios rutinas en DUP.SYS.||
||6691|1A23|ISRSIR|Inicio de las rutinas de servicio de interrupción en serie en DUP.SYS.||
||6781|1A7D|....|Inicio de los búferes de accionamiento y de datos. Los búferes de accionamiento se numeran secuencialmente del uno al cuatro, los búferes de datos del uno al ocho, suponiendo que se asignen muchos para cada uno. Normalmente, los dos primeros búferes se asignan a las unidades y los tres siguientes a los datos. Los búferes tienen una longitud de 128 ($80) bytes cada uno y comienzan en 6908 ($1AFC), 7036 ($1B7C), 7162 ($1BFA) y 7292 ($1C7C). Ver posiciones 1801 y 1802 ($709, $70A).||
||7420|$1CFC|....|MEMLO (743, 744; $2E7, $2E8) apunta aquí cuando el DOS es residente a menos que la asignación del buffer haya sido alterada. MEMLO apuntará a 7164 para una configuración de una unidad, dos búferes de datos, un ahorro de 256 bytes. Si se carga el manejador RS-232 desde la Interfaz 850, MEMLO subirá otros 1728 bytes. El manejador RS-232 en la Interfaz 850 sólo arrancará (cargará en memoria) si primero arranca el archivo AUTORUN.SYS en su disquete maestro Atari o usa otro programa de arranque RS-232 como un paquete de terminal. El manejador RS-232 arrancará en memoria si no tiene un disco conectado y lo ha encendido antes de encender el ordenador. Puede seguir utilizando el puerto de impresora (paralelo) del 850 incluso si el manejador RS-232 no está arrancado.||
||7548|$1D7C|....|Comienzo de la parte no residente del DUP; búfer de parámetros de 40 ($28) bytes.||
||7588|$1DA4|LINE|Búfer de línea de 80 ($50) bytes.||
||7668|$1DF4|DBUF|Búfer de datos de 256 ($100) bytes para las rutinas de copia. Las rutinas de copia trabajan en pasadas de 125 bytes, igual al número de bytes de datos en cada sector del disco. Hay 256 bytes porque Atari había planeado un disco de doble densidad que tiene 253 bytes de datos en cada sector.||
||7924|$1EF4|....|Área de almacenamiento de variables varias y búferes de datos.||
||7951, 8278|$1F0F, $2056|DMENU|Aquí se almacenan los datos de visualización de la pantalla del menú del disco.||
||8191|1FFF|....|Esta es la parte superior de la RAM mínima requerida para el funcionamiento (8K). Para usar DOS, debe tener un mínimo de 16K.||
|#