Página Tres
Las ubicaciones 768 a 831 ($300 a $33F) se utilizan para el manejador de dispositivos y vectores a las rutinas del manejador (dispositivos S:, P:, E:, D:, C:, R: y K:). Un manejador de dispositivo es una rutina utilizada por el sistema operativo para controlar la transferencia de datos en ese dispositivo en particular para la tarea asignada (como leer, escribir guardar, etc.).
Decimal | Hexadecimal | Nombre | Descripción |
---|---|---|---|
768 | $300 | DDEVIC |
ID del bus de serie del dispositivo (tipo de dispositivo de serie) establecido por el manejador, no modificable por el usuario. Los valores son:
|
769 | $301 | DUNIT | Número de unidad de disco o dispositivo: de uno a cuatro, configurado por el usuario. |
770 | $302 | DCOMND |
El número de la operación de disco o dispositivo (comando) que se realizará, establecido por el usuario o por el controlador del dispositivo antes de llamar a SIO. Los comandos del bus serie son:
Todos los anteriores son comandos de dispositivo de disco, excepto escribir y estatus, que también son comandos de impresora (sin verificación). |
771 | $303 | DSTATS | El código de estado al regresar al usuario. También se usa para establecer la dirección de los datos; si el dispositivo debe enviar o recibir una trama de datos. El controlador de dispositivos utiliza este byte para indicar a SIO qué hacer después de enviar y confirmar la trama de comando. Antes de la llamada SIO, el controlador examina el BIT 6 (uno es igual a recibir datos) y el BIT 7 (uno es igual a enviar datos). Si ambos bits son cero, entonces no hay transferencia de datos asociada con la operación. Ambos bits establecidos en uno no son válidos. SIO lo usa para indicar al controlador el estado de la operación solicitada después de la llamada SIO. |
772, 773 | $304, $305 | DBUFLO/HI | Dirección de búfer de datos del origen o destino de los datos que se van a transferir o la información de estado del dispositivo (o los datos del sector del disco). Establecido por el usuario, no es necesario establecerlo si no hay datos transferidos, como en una solicitud de estado. |
774 | $306 | DTIMLO | El valor de tiempo de espera para el controlador en unidades de un segundo, proporcionado por el controlador para que SIO lo use. El valor de tiempo de espera del casete es 35, poco más de 37 segundos. Los valores del temporizador son 64 segundos por 60 unidades de medida. Inicializado a 31. |
775 | $307 | DUNUSE | Byte no utilizado. |
776, 777 | $308, $309 | DBYTLO/HI | El número de bytes transferidos hacia o desde el búfer de datos (o del disco) como resultado de la operación más reciente, establecida por el controlador. También se utiliza para el conteo de datos de sectores defectuosos. Hay un pequeño error en SIO que provoca acciones incorrectas del sistema cuando el último byte en un búfer está en una ubicación de memoria que termina en $FF, como $A0FF. |
778, 779 | $30A, $30B | DAUX1/2 |
Se utiliza para información específica del dispositivo, como el número de sector del disco para la operación de lectura o escritura. Cargado hasta las posiciones 572, 573 ($23C, $23D) por SIO. Sólo hay cinco comandos soportados por el manejador de disco: GET sector (82; $52), PUT sector (80; $50), PUT sector con VERIFY (87; $57), STATUS request (83; $53) y FORMAT entire disk (33; $21). No hay comando para FORMATAR una porción del disco; esto lo hace el chip formateador/controlador INS 1771-1 en la propia unidad y no es accesible al usuario. Hay una nueva ROM de unidad de disco para reemplazar la actual versión "C". Se trata de la ROM "E". No sólo es más rápida que las ROMs anteriores, sino que también permite formatear sectores del disco de forma selectiva. Atari aún no ha anunciado si esta nueva ROM 810 estará disponible. Para más información, consulte el Manual del usuario del sistema operativo.
Las posiciones 780 a 793 ($30C a $319) son para usos varios. |
780, 781 | $30C, $30D | TIMER1 | Valor inicial del temporizador de velocidad en baudios. |
782 | $30E | ADDCOR | Indicador de corrección de adición para los cálculos de velocidad de transmisión que implican los registros de temporizador. |
783 | $30F | CASFLG | Modo casete cuando está activado. Utilizado por SIO para controlar el flujo del programa a través del código compartido. Cuando se pone a cero, la operación actual es una operación SIO estándar; cuando es distinto de cero, es una operación de casete. |
784, 785 | $310, $311 | TIMER2 | alor final del temporizador. El temporizador uno y el temporizador dos contienen tiempos de referencia para el inicio y el final del periodo de recepción del patrón de bits fijo. El primer byte de cada temporizador contiene el valor VCOUNT (54283; $D40B), y el segundo byte contiene el valor actual del reloj en tiempo real de la posición 20 ($14). La diferencia entre los valores del temporizador se utiliza en una tabla de búsqueda para calcular el intervalo de los nuevos valores para la velocidad de transmisión que se pasa a la posición 750, 751 ($2EE, $2EF). |
786, 787 | $312, $313 | TEMP1 | Registro de almacenamiento temporal de dos bytes utilizado por SIO para el cálculo de VCOUNT durante las rutinas del temporizador de baudios. Ver ubicación 54283 ($D40B). |
788 | $314 | TEMP2 | Registro de almacenamiento temporal. |
789 | $315 | TEMP3 | Registro de almacenamiento temporal. |
790 | $316 | SAVIO | Guarda el puerto de entrada de datos serie utilizado para detectar, y actualizado después de, la llegada de cada bit. Se utiliza para retener el estado del BIT 4 de la posición 53775 ($D20F; registro de entrada de datos serie). |
791 | $317 | TIMFLG | Indicador de tiempo de espera para la corrección de la tasa de baudios, utilizado para definir un valor de tasa de baudios fallido. Inicialmente se establece en uno, y se decrementa durante la operación de E/S. Si llega a cero (después de dos segundos) antes de que se lea el primer byte del registro de casete, se abortará la operación. |
792 | $318 | STACKP | Registro de puntero de pila SIO. Apunta a un byte de la pila que se está utilizando en la operación actual (ubicaciones 256 a 511; $100 a $1FF). |
793 | $319 | TSTAT | Titular temporal del estatuto para la localidad 48 ($30). |
794, 831 | $31A, $33F | HATABS |
Tabla de direcciones de gestores. Se reservan 38 bytes para un máximo de 12 entradas de tres bytes por manejador, los dos últimos bytes se ponen a cero. En el arranque, la tabla HATABS se copia desde ROM.
HATABS puntos de entrada no utilizados: El formato de la tabla HATABS es:
La entrada anterior de la tabla de direcciones del manejador de dispositivo para el manejador específico apunta al primer byte (byte bajo/byte alto) de la tabla de vectores que comienza en 58368 ($E400). Cada manejador está diseñado con el siguiente formato:
CIO utiliza la ZIOCB (ver ubicación 32; $20) para pasar parámetros a la IOCB de origen, los registros A, Y y X y CIO. Es posible agregar su propio controlador de dispositivo (s) a OS siguiendo estas reglas:
Ver las columnas "Insight: Atari" en COMPUTE!, enero y abril de 1982, para más detalles. El programa APX "T: A Text Display Device" es un buen ejemplo de aplicación manejadora de dispositivos. |
Las posiciones 832 a 959 ($340 a $3BF) están reservadas para los ocho IOCB's (bloques de control de entrada/salida). Los IOCB's son canales para la transferencia de información (bytes de datos) dentro y fuera del Atari, o entre dispositivos.
Se utilizan para decirle al ordenador qué operación realizar, cuántos datos mover y, si es necesario, dónde se encuentran los datos a mover. Cada bloque tiene 16 bytes reservados para él.
¿Qué es un IOCB? Cada vez que imprimes algo en la pantalla o en la impresora, cada vez que cargas o guardas un fichero, cada vez que ABRES un canal, estás utilizando un IOCB. En algunos casos, las operaciones tienen funciones automáticas de abrir y cerrar incorporadas (como LPRINT). En otros, debes decirle al Atari que haga cada paso según lo necesites. Algunos IOCB's están dedicados a un uso específico, como el cero para la visualización en pantalla. Otros pueden usarse para cualquier función de E/S que desee. La información que colocas después del comando OPEN le dice a CIO cómo quieres que se transfieran los datos hacia o desde el dispositivo. Es SIO y los manejadores que hacen la transferencia real de datos.
Puedes fácilmente hacer POKE de los valores necesarios en las posiciones de memoria y usar una subrutina en lenguaje de máquina a través de una función USR para llamar al CIO directamente (sin embargo, aún debes usar una sentencia OPEN y CLOSE para el canal). Esto es útil porque BASIC sólo soporta transferencia de datos de registro o de un solo byte, mientras que el CIO manejará E/S de buffer completo. Vea la dirección de entrada del CIO, ubicación 58454 ($E456), para más detalles. Estos bloques se utilizan de la misma manera que la página cero IOCB (localizaciones 32 a 47; $20 a $2F). El SO toma la información aquí, la mueve a la ZIOCB para ser usada por la ROM CIO, luego devuelve la información actualizada al área de usuario cuando termina la operación.
Note que cuando BASIC encuentra un comando DOS, CIERRA todos los canales excepto el cero. Consulte el Manual de Hardware Atari y el Manual de Interfaz 850 para un uso más detallado de estas localizaciones.
Decimal | Hexadecimal | Nombre | Descripción |
---|---|---|---|
832, 847 | $340,$34F | IOCB0 |
Bloque de control de E/S (IOCB) cero. Normalmente se usa para el editor de pantalla (E:). Puedes hacer POKE 838,166 y POKE 839,238 y enviar todo a la impresora en vez de a la pantalla (POKE 838,163, y POKE 839,246 para enviar todo de nuevo a la pantalla). 10 GRAPHICS 0:POSITION 2,4 20 PRINT 100:PRINT 150:PRINT 200 25 PRINT "CONT" 30 POSITION 2,0 50 POKE 842,13:STOP 60 POKE 842,12 70 REM SE BORRARAN LAS SIGUIENTES LINEAS 100 PRINT "BORRAR..." 150 PRINT "BORRAR..." 200 PRINT "BORRADO!" Véase COMPUTE!, agosto de 1981, para una muestra de esta poderosa técnica. Véase el Tutorial Tricky nº 1 de Santa Cruz (listas de visualización) para otra aplicación. Los últimos cuatro bytes (844 a 847; $34C a $34F en este caso) son bytes de reserva (auxiliares) en todos los IOCB's. |
848, 863 | $350, $35F | IOCB1 | IOCB primero. |
864, 879 | $360, $36F | IOCB2 | IOCB segundo. |
880, 895 | $370, $37F | IOCB3 | IOCB tercero. |
896, 911 | $380, $38F | IOCB4 | IOCB cuarto. |
912, 927 | $390, $39F | IOCB5 | IOCB quinto. |
928, 943 | $3A0, $3AF | IOCB6 | IOCB sexto. La sentencia GRAPHICS abre el canal seis para la visualización en pantalla (S:), por lo que una vez que salga del modo cero, no podrá utilizar el canal seis a menos que primero emita una sentencia CLOSE#6. Si cierra este canal, no podrá usar los comandos DRAWTO, PLOT o LOCATE hasta que reabra el canal. El comando LOAD cierra el canal seis; también cierra todos los canales excepto el cero. |
944, 959 | $3B0, $3BF | IOCB7 | IOCB siete. LPRINT utiliza automáticamente el canal siete para su uso. Si el canal está abierto para algún otro uso y se realiza una LPRINT, se producirá un error, el canal se cerraran y las LPRINT posteriores funcionarán. El comando LIST también utiliza el canal siete, incluso si el canal siete ya está abierto. Sin embargo, cuando finaliza la LIST, cierra el canal siete. El comando LOAD utiliza el canal siete para transferir programas hacia y desde la grabadora o el disco. LIST (excepto en la pantalla de visualización), LOAD y LPRINT también cierran todas las voces de sonido. El comandos RUN desde cinta o disco y guarda utilizan el canal siete, al igual que LIST. |
960, 999 | $3C0, $3E7 | PRNBUF | Estas posiciones de la memoria del computador definen una zona especial para la comunicación con la impresora. Cada byte que se desee imprimir debe pokearse en estas posiciones, pero si utilizamos el comando del BASIC LPRINT esta operatoria es automática. |
1021, 1151 | $3FD, $47F | CASBUF |
Búfer de casete. Estas ubicaciones son utilizadas por el manejador de casete para leer y escribir datos en la grabadora de programa (cinta). Un registro de casete consta de 132 bytes: dos bytes de control ajustados a 85 ($55; alternando ceros y unos) para la medición de la velocidad en la rutina de corrección de la tasa de baudios; un byte de control (ver más abajo); 128 bytes de datos (comparados con los 125 bytes de datos de un sector de disco), y un byte de suma de comprobación. Sólo los bytes de datos se almacenan en el buffer del casete. Ver De Re Atari para más información sobre el grabador de cassette. Valores del bytes de control
|
Las posiciones 1152 a 1791 ($480 a $6FF) son para requerimientos de RAM de usuario (entorno externo), dependiendo de la cantidad de RAM disponible en la máquina. Siempre que no utilice el paquete FP o BASIC, tiene 640 ($280) bytes libres aquí.
Las posiciones 1152 a 1279 ($480 a $4FF) son 128 ($80) bytes libres. El paquete de coma flotante, cuando se utiliza, requiere las posiciones 1406 a 1535 ($57E a $5FF).
Decimal | Hexadecimal | Nombre | Descripción |
---|---|---|---|
1406 | $57E | LBPR1 | LBUFF prefijo uno. |
1407 | $57F | LBPR2 | LBUFF prefijo dos. |
1408, 1535 | $580, $5FF | LBUFF | Buffer de línea BASIC; 128 bytes. Utilizado como buffer de resultado de salida para la rutina FP a ASCII en 55526 ($D8E6). El buffer de entrada es apuntado por las posiciones 243, 244 ($F3, $F4). |
1504 | $5E0 | PLYARG | Argumentos polinómicos (uso FP). |
1510, 1515 | $5E6, $5EB | FPSCR | Uso del bloc de notas FP. |
1516, 1535 | $5EC, $5FF | FPSCR1 | Ídem. El final del buffer se llama LBFEND. |