Mapping the Atari - Revised Edition, por Ian Chadwick

APÉNDICE UNO


PROCESO VBLANK


Todas las rutinas VBLANK están documentadas en las páginas 35 a la 38 del listado del Sistema Operativo. En la ROM "A", se procesan en las ubicaciones 59345 a la 59665 ($E7D1 a la $E911). En la ROM "B", se procesan en las ubicaciones 59310 a la 59628 ($E7AE a la $E8EC). Para más información, vea también el libro De Re Atari.

Etapa 1 del VBLANK:

Se ejecuta en cada VBI:

1) Incrementar el reloj de tiempo real en las ubicaciones 18 a la 20 ($12 a la $14).

2) Procesar las variables del modo atracción (ubicación 77; $4D).

3) Decrementar el temporizador del sistema en la ubicación 536 ($218) y, si es igual a 0, haga un JSR a la dirección almacenada en la ubicación 550 ($226).

Etapa 2 del VBLANK:

Se ejecuta en cada VBI siempre y cuando no se interrumpen secciones críticas:

1) Actualizar los registros hardware a partir de los registros sombra, de la siguiente manera:

Sombra:Hardware:Motivo de la actualización:
SDLSTL/H35DLISTL/H FIN DE LISTA DE DESPLIEGUE
SDMCTL DMACTL
CHBAS CHBASE
CHACT CHACTL
GPRIOR PRIOR
COLOR0-4 COLPF0-3,BAK36MODO DE ATRACCIÓN
PCOLR0-337 COLPM0-3
LPENV38PENV39 LÁPIZ DE LUZ
STICK0-1 PORTA JOYSTICKS
PTRIG0-3 PORTA BOTONES DE LOS PADDLES
STICK2-3 PORTB
PTRIG4-7 PORTB
PADDL0-7 POT0-7 PADDLES
STRIG0-3 TRIG0-3 BOTONES DEL JOYSTICK
....CONSOL APAGADO DEL ALTAVOZ DE LA CONSOLA

2) Los temporizadores del sistema del #2 al #5 (ubicaciones 538, 540, 542 y 544; $21A, $21C, $21E y $220)40 se decrementan y, si el valor es igual a 0, se activan las bandera correspondientes. Si el temporizador #2 es igual a 0, se realiza una secuencia de comandos JSR usando la dirección almacenada en la ubicación 552 ($228).

3) Se lee un carácter del registro de teclado POKEY en la ubicación 53769 ($D209) y se lee CH en la ubicación 764 ($2FC), si la repetición automática está activa.

4) El contador de rebote del teclado se decrementa en 1 si es distinto de 0 y si no se pulsa ninguna tecla.

5) Se procesa la lógica de repetición automática del teclado.

6) Se sale de la rutina VBLANK usando la dirección almacenada en la ubicación 58466 ($E462).


35 En el libro original, dice SDLISTL/H en vez de SDLSTL. (N. del T.)

36 En el libro original, dice COLPF0-4,BAK en vez de COLPF0-3,BAK. (N. del T.)

37 En el libro original, dice PCOL0-3 en vez de PCOLR0-3. (N. del T.)

38 En el libro original, dice LPCNV/H en vez de LPENV. (N. del T.)

39 En el libro original, dice PENV/H en vez de PENV. (N. del T.)

40 En el libro original, se omite la ubicación del temporizador #2: 538, $21A. (N. del T.)

APÉNDICE DOS


MAPA DE MEMORIA GRÁFICO


Este diagrama no está a escala; su objetivo es simplemente ofrecer una idea visual de la estructura de la memoria del Atari. Los números a la derecha son los punteros de memoria: estas ubicaciones apuntan a las direcciones mostradas. Los números a la izquierda son las ubicaciones reales en la memoria.

Ubicación     Contenido                             Punteros
              +---------------------------------------------------------------------+
65535 _______ | Parte superior de la memoria_______________________________________ |
              | ROM del Sistema Operativo                                           |
              |                                                                     |
60906-65535   | Rutinas de los controladores de dispositivos  794-831 HATABS        |
59716-60905   | Utilidades de Entrada/Salida Serie (SIO)                            |
59093-59715   | Controlador de las interrupciones             512,513 VDSLST        |
              |                                               514-527 Vectores      |
58534-59092   | Utilidades de la Entrada/Salida Central (CIO)                       |
              |                                                                     |
              |                                                                     |
58533 _______ | Vectores del Sistema Operativo_____________________________________ |
58496-58533   | Vectores iniciales del la RAM al encender el equipo                 |
58448-58495   | Vectores de JMP                                                     |
58432-58447   | Cassette                                                            |
58416-58431   | Impresora                                                           |
58400-58415   | Teclado                                                             |
58384-58399   | Pantalla                                                            |
58368-58383   | Editor                                                              |
              |                                                                     |
              |                                                                     |
58367 _______ | Juego de caracteres en ROM __________________ 756 CHBAS ____________|
              |                                                                     |
              |                                                                     |
57344         |                                                                     |
              |                                                                     |
              |                                                                     |
57343 _______ | ROM del Paquete de Coma Flotante                                    |
              |                                                                     |
              |                                                                     |
55295 _______ | Chips de E/S_______________________________________________________ |
              |                                                                     |
              |                                                                     |
54784-55295   | Sin uso                                                             |
54272-54783   | ANTIC                                         756     CHBAS         |
              |                                               755     CH1           |
              |                                               564-565 LPEN          |
              |                                               560-561 SDLSTL        |
              |                                               559     SDMCTL        |
54016-54271   | PIA                                           636-639 PTRIG#        |
              |                                               632-635 STICK#        |
53760-54015   | POKEY                                         624-631 PADDL#        |
              |                                               562     SSKCTL        |
              |                                               16      POKMSK        |
53504-53759   | sin uso                                                             |
53248-53503   | GTIA o CTIA                                   704-707 PCOLR#        |
              |                                               708-712 COLOR#        |
              |                                               644-647 STRIG#        |
              |                                               623     GPRIOR        |
              |                                                                     |
              |                                                                     |
53247 _______ | Bloque ROM de 4K sin uso___________________________________________ |
              |                                                                     |
              |                                                                     |
49151 _______ | ROM del BASIC de 8K                                                 |
              | o cartridge izquierdo (A)                                           |
              |                                                                     |
              |                                                                     |
40959 _______ | Parte superior de la RAM del BASIC            106     RAMTOP        |
______________|_____________________________________________________________________|
              |                                               740     RAMSIZ        |
              |                                                                     |
              | o ROM del cartidge izquierdo (B), si está presente                  |
              | (Sólo en el Atari 800)                                              |
              |                                                                     |
              |                                                                     |
El tamaño y   |                                                                     |
la ubicación  |                                                                     |
varían con el |                                                                     |
modo GRAPHICS |                                                                     |
              |                                                                     |
              | RAM de pantalla de la ventana de texto        60,661 TXTMSC         |
              | 40800 para el modo GRAPHICS 0                                       |
              |                                                                     |
              | Fondo de la RAM de la pantalla                88,89   SAVMSC        |
              | 40000 para el modo GRAPHICS 0                                       |
              |                                                                     |
              | Lista de Despliegue:                          560,561 SDLSTL        |
              | 39968 para el modo GRAPHICS 0                                       |
              |                                                                     |
              | Parte superior de la RAM del BASIC            741,742 MEMTOP        |
(SO)          |                                                                     |
              |                                                                     |
              |                                                                     |
              |                                                                     |
32768         |                                                                     |
              |                                                                     |
              |                                                                     |
32767 _______ | RAM de los programas del usuario___________________________________ |
              |                                                                     |
              | La cantidad de RAM se puede determinar mediante:                    |
              | PRINT FRE(0)                                                        |
              |                                                                     |
              | El fondo varía: vea la nota abajo                                   |
(13062)       | Depende del área asignada a los búfers.                             |
              |                                                                     |
              |                                                                     |
              | RAM usada por el DOS y por el Administrador del Sistema de Archivos |
              |                                                                     |
              |                                               144,145 MEMTOP        |
              | Pila de FOR-NEXT y GOSUB                      142,143 RUNSTK        |
              |                                               14,15 APPMHI          |
El tamaño y   |                                                                     |
la ubicación  |                                                                     |
varían con    |                                                                     |
el tamaño del |                                                                     |
programa      |                                                                     |
              | Tabla de cadenas y arreglos y                                       |
              | fin del programa BASIC                        140,141 STARP         |
              |                                                                     |
              |                                                                     |
              | área del programa                                                   |
              | BASIC                                                               |
              |                                                                     |
              |                                                                     |
              | Tabla de sentencias:                          136,137 STMTAB        |
              | Comienzo del programa BASIC                                         |
              | Tabla de valores de variables                 134,135 VVTP          |
              |                                                                     |
              | VNTP + 1                                      132,133 VNTD          |
              |                                                                     |
              | Tabla de nombres de variables                 130,131 VNTP          |
              |                                                                     |
(7420)        | Fondo de la memoria del BASIC                 743,744 MEMLO         |
              |                                               128,129 LOMEM         |
              |                                                                     |
              | Búfers de sectores                            4921,4937 SABUFL/H    |
6781          | Búfers de dispositivos y sectores             4905,4913 DBUFA1/H    |
6047          | Vector del DOS                                10,11  DOSVEC         |
5440          | Inicio del DUP.SYS                                                  |
              |                                                                     |
5377          | Búfer del VTOC                                                      |
              | Inicialización del DOS                        12,13   DOSINI        |
              | o RAM del BASIC sin                           (743,744 MEMLO)       |
              | DOS residente                                 (128,129 LOMEM)       |
              | RAM del FMS                                                         |
1792          | Comienzo del DUP.SYS                                                |
              |                                                                     |
              |                                                                     |
1791 ________ | RAM usada por el  OS y el cartucho.                                 |
              | (hasta el fondo de la RAM)                                          |
              |                                                                     |
              | RAM de la Página Seis                                               |
              |                                                                     |
              |           +---------------------------------------------------------+
              | 1535 ____ | RAM usada por BASIC ___________________________________ |
              |           | (hasta el fondo de la RAM)                              |
              |           |                                                         |
              | 1406      | RAM de la Coma Flotante                                 |
              | 1405      | RAM del BASIC                                           |
              |           |                                                         |
              |           |       +-------------------------------------------------+
              |           | 1151  | RAM del Sistema Operativo                       |
              |           |       |                                                 |
              |           |       |                                                 |
              |           |       | Búfer del Cassette                              |
              |           |       |                                                 |
              |           |       | Búfer de la Impresora                           |
              |           |       |                                                 |
              |           |       | IOCB's                                          |
              |           |       |                                                 |
              |           | 512   |                                                 |
              |           |       |  ______________________________________________ |
              |           | 511   | Pila                                            |
              |           |       |                                                 |
              |           |       |                                                 |
              |           |       |                                                 |
              |           | 256   |                                                 |
              |           |       |  ______________________________________________ |
              |           | 255   | RAM de la Página Cero del BASIC                 |
              |           |       |                                                 |
              |           |       | Página Cero de la Coma Flotante                 |
              |           |       |                                                 |
              |           |       | Página Cero del cartucho Assembler              |
              |           |       |                                                 |
              |           |       |                                                 |
              |           |       |                                                 |
              |           |       |                                                 |
              |           | 128   |                                                 |
              |           |       |  ______________________________________________ |
              |           | 127   | RAM de la Página Cero del SO                    |
              |           |       |                                                 |
              |           |       |                                                 |
              |           |       | IOCB de la Página Cero                          |
              |           |       |                                                 |
              |           |       |                                                 |
              |           | 0     | Fondo de la memoria                             |
              +-----------+-------+-------------------------------------------------+
Notas

El límite inferior de la RAM del BASIC depende de si tiene o no cargados los archivos del DOS. Sin DOS, 0LOMEM debería ser igual a 1792; con DOS, 7420. Si aumenta o disminuye el número de búferes de disco y sector modificando DOS, este valor cambiará de nuevo. Consulte las ubicaciones 0743, 744 y 01801, 01802.

El tamaño y la ubicación de las tablas de variables, cadenas y matrices dependen del uso y el tamaño de su programa. Cuantas más variables y matrices, mayor será la memoria que utilizan estas tablas.

El tamaño y la dirección de la Lista de Despliegue y la memoria de pantalla dependen del modo gráfico en uso.

Los primeros 256 bytes a los que apunta LOMEM corresponden al búfer de salida del token. El programa BASIC comienza en la dirección a la que apunta VNTP.

APÉNDICE TRES


EQUIVALENCIAS DE TIEMPO EN EL ATARI


Frecuencia de reloj = 1,79 MHz

1 ciclo de máquina = 0,558 µsegundos

1 fotograma = 1/60 de segundo

Líneas de escaneo = 262 / fotograma

Relojes de color = 228 / línea de escaneo

Relojes de color = 2 / ciclo de máquina

Ciclos de máquina = 29.868 / fotograma

Ciclos de máquina = 114 / línea de escaneo

Tiempo del VBLANK = 7.980 ciclos de máquina o menos, dependiendo del modo gráfico. La instrucción del 6502 más corta requiere 2 ciclos; durante ese tiempo, el haz de electrones mueve 4 relojes de color.

Tiempo del blanqueo horizontal:

Campo de juego ancho: 18 ciclos de máquina

Campo de juego normal: 34 ciclos de máquina

Campo de juego estrecho: 50 ciclos de máquina

Para obtener más información sobre el conteo de ciclos, consulte el Manual del hardware.

APÉNDICE CUATRO


LA ROM VIEJA (A) Y LA ROM NUEVA (B)


A lo largo del libro se ha mencionado la ROM nueva del Sistema Operativo. Se corrigieron algunos errores del sistema operativo anterior, pero también se cambiaron algunas ubicaciones de la ROM. El resultado es un sistema operativo mejorado, pero es posible que parte del software anterior que accede a las ubicaciones de la ROM antigua no funcione con la nueva.

Hay 2 maneras de comprobar si tiene la ROM nueva o antigua: una es hacer PEEK en la ubicación 58383, tal como se describe allí. La otra (la solución hardware) es extraer la tarjeta ROM41, desatornillar la tapa metálica y mirar dentro. Si los dos chips que tiene a la izquierda tienen una "A" después de su primer número de código, entonces tiene la ROM antigua. Si tienen una "B", ¡qué suerte! Tiene la ROM más reciente. También existe la prueba empírica: si la unidad se queda sin tiempo durante las operaciones de E/S, entonces tiene la ROM antigua.

Estas son las diferencias entre las ubicaciones de las ROM nueva y antigua. También se han realizado varios cambios en la ROM nueva en los vectores de las ubicaciones 512 a la 534, 546 a la 549 y 550. Para obtener más información, consulte estas ubicaciones y las ubicaciones del sistema operativo. La lista a continuación especifica primero las ubicaciones de la ROM antigua y luego los cambios en la ROM nueva.

55296-57343 (paquete FP) igual

57344-58367 (conjunto de caracteres) igual

58368-58477 (tablas vectoriales) son iguales a 58459 ($E45B), donde hay cambios en la tabla entre las ubicaciones 58460 a la 58466 ($E45C a la $E462).

58467-59092 ($E463-$E6D4) igual

59093 ($E6D5) es el inicio del controlador de IRQ. Los cambios en las ROM nueva comienzan en la ubicación 59126 ($E6F6) y continúan hasta el final del nuevo controlador de IRQ en la ubicación 59280 ($E790).

59316 ($E7B4) corresponde al controlador de interrupciones NMI en la ROM antigua, que ahora comienza en la ubicación 59281 ($E791). Es igual al de la versión anterior, pero se ha reducido en 35 bytes.

59345 ($E7D1) marca el inicio de las rutinas de VBLANK en la ROM antigua; ahora comienzan en la ubicación 59310 ($E7AE) en la ROM nueva. Las rutinas permanecen iguales hasta que se llega a la rutina SETVBL en la ubicación 59666 ($E912) en la ROM antigua, y en la ubicación 59629 ($E8ED) en la ROM nueva. Los cambios en la rutina de VBLANK se deben principalmente a la adaptación al desplazamiento (shift) de las nuevas ubicaciones de memoria.

58457 ($E459) es el punto de entrada SIO para ambas versiones. Se han realizado cambios en las rutinas SIO para adaptarse a las nuevas ubicaciones de memoria, pero el punto de entrada sigue siendo el mismo.

60048 ($EA90) Se ha modificado la rutina de servicio de interrupción de datos de salida necesarios, pero el punto de entrada es el mismo en ambas versiones.

60113 ($EAD1) La rutina de servicio de interrupción de transmisión realizada es la misma, pero tiene un nuevo punto de entrada, en la ubicación 60111 ($EACF).

60130 ($EAE2) La rutina de recepción tiene algunos cambios de dirección y se ha movido a la ubicación 60128 ($EAE0).

60177 ($EB11) La rutina de servicio de interrupción de entrada serie lista es la misma, pero el nuevo punto de entrada está en la ubicación 60175 ($EB0F).

60222 ($EB3E) Las subrutinas SIO tienen algunos cambios y un nuevo punto de entrada está en la ubicación 60220 ($EB3C).

60270 ($EB6E) La subrutina de carga del búfer es la misma, pero se ha movido a la ubicación 60266 ($EB6A).

60292 a la 60905 ($EB84 a la $EDE9): todas las rutinas en esta área son iguales, pero tienen puntos de entrada 4 bytes más abajo en la ROM (es decir, en la ubicación 60288; $EB80).

60906 a la 62014 ($EDEA a la $F23E): estas rutinas son iguales y se encuentran en las mismas ubicaciones en ambas versiones.

62015 ($F23F): la prueba de RAM y de cartucho especial tiene el mismo punto de entrada, pero presenta algunos cambios.

62038 ($F256): la subrutina de verificación de la RAM tiene cambios y un nuevo punto de entrada, ahora en la ubicación 62036 ($F254).

62081 ($F281): las rutinas de inicialización del hardware tienen cambios y un nuevo punto de entrada, en la ubicación 62071 ($F277) en las ROM nueva. Los cambios continúan hasta la ubicación 62159 ($F2CF), donde todo vuelve a ser igual para ambas versiones, hasta el final de la ROM, en la ubicación 65535 ($FFFF).


41 Sólo el modelo 800 funciona con tarjetas extraíbles para la RAM y la ROM del Sistema Operativo. En el modelo 400, es necesario abrir la carcaza del computador para tener acceso a dichas tarjetas. (N. del T.)

APÉNDICE CINCO


EL COLOR


El color es un aspecto muy importante en los computadores Atari; puede que no lo aprecie por completo, a menos que haya pasado mucho tiempo trabajando con computadores o monitores monocromáticos. El Atari cuenta con 16 colores disponibles para mostrar en 8 factores de luminancia (brillo) diferentes. Estos colores se almacenan en las ubicaciones de memoria de la 704 a la 712. Los primeros 4 de estos registros se utilizan para determinar el color de los players y missiles. Los siguientes 5 determinan el color de los campos de juego, el fondo, las líneas dibujadas y las áreas con relleno.

El Atari tiene un valor predeterminado para cada uno de los 5 registros del campo de juego, que se asigna al encender el equipo:

Campo de juego Ubicación Color Valor
0 708 Naranja
40
1 709 Verde claro
202
2 710 Azul oscuro
148
3 711 Rojo
70
4 (BAK) 712 Negro
0

La cifra en la categoría de valor representa el número que se obtiene si se hace PEEK en esa ubicación. Para obtener información sobre las ubicaciones, consulte el Mapa de Memoria.

Para cambiar estos colores, puede usar una instrucción POKE o el comando SETCOLOR (abreviado como SE.) del BASIC. Consulte la descripción en el texto anterior sobre el Mapa de Memoria. SETCOLOR tiene 3 parámetros: el registro a cambiar (que siempre corresponde a una de las ubicaciones de memoria mencionadas), el tono (un número del 0 al 15 que corresponde a los colores disponibles), y la luminancia (un número par entre el 0 y el 14). En cuanto a luminancia, su Atari tratará cualquier número impar como si fuera el siguiente número par más bajo. Su instrucción podría ser similar a esta:

SETCOLOR 0,2,8
Esto produce el color naranja en el campo de juego #0. Para cambiarlo a rojo, haga:
SETCOLOR 0,4,6

No verá ningún cambio al usar SETCOLOR, a menos que cambie el fondo o el borde, o un registro que ya se haya usado para dibujar en la pantalla. El efecto se produce al ejecutar el comando COLOR, indicando al Atari qué registro usar para el comando DRAWTO o el comando de relleno. Usando esta fórmula puede aplicar fácilmente el valor de color correcto con POKE:

COLOR = TONO * 16 + LUMINANCIA
Por lo tanto, el naranja del ejemplo anterior se obtiene haciendo:
POKE 708,40
y el rojo haciendo:
POKE 708,70
Estos son los valores que aparecen en la tabla anterior. Es muy sencillo cambiarlos a sus propios colores con cualquiera de los 2 métodos. Por supuesto, tendrá que ajustar los colores cada vez que cambie de modo gráfico o pulse la tecla RESET, ya que ambos restablecen los registros a sus valores predeterminados. Además, los registros de player/missile solo se pueden cambiar con POKEs; no tienen comandos SETCOLOR correspondientes y todos están preestablecidos en 0. La edición del invierno de 1981/82 de The Atari Connection, la publicación de Atari Inc., incluye una pequeña tabla a todo color que muestra todos los colores disponibles. El número SETCOLOR de la siguiente lista es el valor que debe colocar como segundo número en la instrucción, justo después del número de registro.

Colornúmero de SETCOLORnúmero de POKE
Negro
0
0
Óxido
1
16
Rojo anaranjado
2
32
Naranja oscuro
3
48
Rojo
4
64
Lavanda oscuro
5
80
Azul cobalto
6
96
Azul ultramar
7
112
Azul medio
8
128
Azul oscuro
9
144
Gris azulado
10
166
Verde oliva
11
176
Verde medio
12
192
Verde oscuro
13
208
Verde anaranjado
14
224
Naranja
15
240

El siguiente número en la instrucción SETCOLOR es la luminancia. Se suma el valor de luminancia al número del POKE.

Al usar los comandos DRAWTO o XIO 18 (relleno), primero se debe especificar el registro de color a usar con el comando COLOR. Lo que suele resultar confuso para la mayoría de las personas es que el número del comando COLOR no corresponde al mismo número del registro SETCOLOR y, para colmo, ¡no siempre es el mismo número en los diferentes modos gráficos! Los modos 0, 1 y 2 son modos de texto; imprimen caracteres en la pantalla en lugar de gráficos, por lo que no se usa el comando COLOR en estos modos. En GRAPHICS 0, solo se tiene un color, determinado por SETCOLOR 2. La luminancia se ignora en este comando y, en su lugar, se establece con SETCOLOR 1, donde se ignora el color. Puede usar SETCOLOR para cambiar los colores del texto y el fondo, tal como se indica a continuación:

GRAPHICS 0 SETCOLOR Registro
Luminancia del caracter
1
709
Fondo
2
710
Borde (BAK)
4
712

GRAPHICS 1 y 2 SETCOLOR Registro
Mayúsculas y números
0
708
Minúsculas
1
709
Mayúsculas en video inverso
2
710
Minúsculas en video inverso
3
711
Fondo, borde
4
712

Para dibujar o rellenar un área en los modos del 3 al 8, debe usar la instrucción COLOR adecuada para el registro SETCOLOR:

GRAPHICS 3, 5, 7
Modos de 4 colores
SETCOLORCOLORRegistro
Punto gráfico o
área de relleno
0
1
708
1
2
709
2
3
710
Fondo, borde
4
0
712

GRAPHICS 4, 6
Modos de 2 colores
SETCOLORCOLORRegistro
Punto gráfico
0
1
708
Fondo, borde
4
0
712

GRAPHICS 8
1 color, 2 luminancias
SETCOLORCOLORRegistro
Luminancia del gráfico
1
1
709
Color de fondo
2
0
710
Borde
4
-
712

Es un método complejo, pero no es difícil de usar. Deberá consultar esta tabla o la tabla de la página 53 de su Manual de Referencia BASIC hasta que le agarre el truco. Recuerde preceder cualquier instrucción COLOR con un SETCOLOR en algún lugar de su programa y preceder un DRAW o XIO 18 con una instrucción COLOR; de lo contrario, el computador usará el registro previamente designado.

El chip GTIA presenta cierta confusión: en GRAPHICS 10, el registro 704 almacena el color del fondo, mientras que el 712 se usa como un registro de color normal. Esto significa que debe cambiarlo con un POKE en lugar de una instrucción SETCOLOR. Sin embargo, en los otros 2 modos GTIA (GR.9 y GR.11), aún se usa la ubicación 712, SETCOLOR 4, para el fondo; vea los ejemplos de los modos GTIA en la ubicación 623.

Con GRAPHICS 9, el comando COLOR se usa para establecer el nivel de luminancia en uno de los 16 valores posibles; el valor que se usa con la instrucción COLOR es igual a la luminancia utilizada (por lo que se puede tener COLOR 15, COLOR 10, etc. De hecho, se puede usar cualquier valor hasta 255 con COLOR sin obtener un mensaje de error; consulte el programa de demostración de GR.11 en la ubicación 623). SETCOLOR 4 define el color de fondo y de los gráficos. Solo hay un color en GRAPHICS 9. En GRAPHICS 11, COLOR se usa para definir el color de la misma manera que se usa para la luminancia en GRAPHICS 9, mientras que la luminancia de cada color tiene el mismo valor; se pueden tener 16 colores con la misma luminancia. GRAPHICS 10 permite configurar los 9 registros de color a colores y luminancias individuales, pero se deben usar comandos POKE para los registros de las ubicaciones 704 a la 707.

Para más información sobre los modos GTIA, consulte las revistas COMPUTE! de julio a septiembre de 1982, y el libro De Re Atari. Hay muchos programas buenos para dibujar sus propias imágenes en varios modos gráficos; Micropainter de Datasoft es uno de mis favoritos; también están Drawpic de Artworx, The Graphics Machine de Santa Cruz, Graphic Master de Datasoft, Graphics Composer de Versaware y The Next Step de Online, que es una utilidad para crear personajes y seleccionar paletas de colores. COMPUTE! publicó un programa interesante llamado "Supercube" en varios números de 1980 y 1981.

APÉNDICE SEIS


SONIDO Y MÚSICA


El sonido en el Atari puede ser bastante sofisticado o bastante simple, según sus necesidades y habilidades de programación. Se pueden introducir sonidos simples con el comando SOUND; se introduce la voz (de 0 a 3), el tono (de 0 a 255), la distorsión (números pares del 0 al 14) y el volumen (del 1 al 15) de esta manera:

SOUND 0,121,10,8
Esto le dará un Do central puro a un volumen moderado. El comando SOUND es solo una forma de ajustar la música o el sonido en el Atari. También puede hacer POKE directamente en los registros POKEY para realizar cambios. Por ejemplo, puede aumentar el rango normal de 5 octavas a 9 estableciendo en 1 los bits adecuados en la ubicación 53768. Este método reduce el número de voces a 2 o 3, pero le ofrece un rango considerable. Puedes usar todo tipo de trucos con filtros, canales de reloj y contadores de polifonía, como se describe en las ubicaciones de POKEY. Para una mejor descripción de la técnica de control de sonido, consulte el libro De Re Atari. Aquí tiene los valores de tono de las notas mayores cuando se usan con un tono puro en el comando SOUND:

NotaOctava
1
2
3
4
5
C
1429 60121*243
B
1531 64128 255
A# o Bb
1633 68136
A
1735 72144
G# o Ab
1837 76153
G
1940 81162
F# o Gb
2142 85173
F
2245 91182
E
2347 96193
D# o Eb
2450102204
D
2653108217
C# o Db
2757114230

Observe que los intervalos entre notas aumentan a medida que disminuye el tono (cuanto mayor es el número, más grave es el tono). El Do central está marcado con un "*". Aquí tiene una rutina sencilla para probar el tono y la distorsión con una sola voz:

5 PRINT CHR$(125):POKE 752,2
10 A=0:B=0:C=0
20 SOUND 0,A,B,C:POSITION 0,0
30 PRINT "TONO","DISTORCION","VOLUMEN"
35 POSITION 0,2:PRINT A,B;"  ",,C;"  "
40 IF STICK(0)=14 THEN A=A+1:IF A>255 THEN A=0:GOTO 20
50 IF STICK(0)=13 THEN A=A-1:IF A<0 THEN A=255:GOTO 20
60 IF STICK(0)=7 THEN B=B+2:IF B>14 THEN B=0:GOTO 20
70 IF STICK(0)=11 THEN B=B-2:IF B<0 THEN B=14:GOTO 20
80 IF STRIG(0)=0 THEN C=C+1:IF C>15 THEN C=0:GOTO 20
90 GOTO 20
Mueva la palanca hacia arriba o hacia abajo para cambiar el tono, hacia la derecha o hacia la izquierda para cambiar el nivel de distorsión. Presione el botón para cambiar el volumen. Para ver un programa similar que usa las 4 voces, consulte la revista Softside n.° 30, y el Tutorial n.° 6 de Santa Cruz (sonido). También revise el cartucho Music Composer de Atari; no solo es un buen programa, sino que también ofrece excelente documentación sobre música, sonido y composición. Hay dos excelentes programas de APX, Sound Editor e Insomnia, que le permiten crear sonidos para incluir en sus programas (aunque no melodías). Insomnia es particularmente interesante porque crea sonidos que se reproducen durante los intervalos de VBLANK.

APÉNDICE SIETE


MAPA DE MEMORIA DE LOS GRÁFICOS PLAYER/MISSILE


Seguro que ha visto este pequeño mapa en docenas de publicaciones. Muestra la ubicación en la memoria de sus gráficos P/M . La pregunta es: ¿qué significa? Intentaré explicarlo a continuación. Primero, el mapa:

Desplazamiento Un byte de ancho Desplazamiento
Resolución                      Resolución
Línea                           Línea
Doble                           Simple
         0   +-----------------+   0
             |                 |
             |       área      |
             |     sin uso     |
      +384   |-----------------|   +768
             |  0 | 1 | 2 | 3  |
             |    missiles     |
             |                 |
      +512   |-----------------|  +1024
             |                 |
             |    Player 0     |
             |                 |
      +640   |-----------------|  +1280
             |                 |
             |    Player 1     |
             |                 |
       +768  |-----------------|  +1536
             |                 |
             |    Player 2     |
             |                 |
       +896  |-----------------|  +1792
             |                 |
             |    Player 3     |
             |                 |
      +1024  +-----------------+  +2048
Independiente de la ubicación en la memoria donde reserve el área de gráficos de sus P/M, la ubicación del espacio utilizado por los players y missiles tendrá un desplazamiento de la misma cantidad de bytes desde el inicio del área reservada. Esto es lo que representan los números de desplazamiento: la cantidad de bytes desde el inicio del área de P/M donde comienzan los gráficos de ese objeto.

Por lo tanto, si decide reservar 16 páginas (4.096 bytes) desde el inicio de su memoria (ubicación 40960), sus gráficos P/M comenzarán en la ubicación 36864.

Dependiendo de la resolución elegida, el área de gráficos de los missiles comenzará 384 ó 768 bytes a partir de esa ubicación: es decir, en las ubicaciones 37248 y 37632, respectivamente. En la resolución de doble línea, puede definir objetos de hasta 128 bytes de longitud; en la de línea simple, pueden tener 256 bytes.

Incluso si su objeto tiene solo 8 ó 10 bytes de altura, los límites para su ubicación siempre tienen el mismo desplazamiento relativo contando desde la parte superior de la memoria gráfica P/M.

Este mapa tiene solo 8 bits (un byte) de ancho. Puede ver que los cuatro missiles comparten el mismo byte de ancho, cada uno usando 2 bits para la resolución. Si combina los missiles para formar un quinto player, usará esta área exactamente como lo haría con el área de cualquier otro player.

Una forma de mover a sus players verticalmente es moverlos dentro de su área reservada en lugar de hacerlo en la pantalla. En BASIC, esto es considerablemente más rápido que tener que mover al player en la pantalla, pero es un proceso lento. En cuanto a los límites del televisor, todos los players en ambas resoluciones se mapean a la altura completa de la pantalla.

Existen muchos buenos programas para crear y editar gráficos P/M, mencionados anteriormente en el texto del Mapa de Memoria. Los gráficos P/M son una de las funciones más potentes y menos comprendidas del Atari. Le sugiero que se informe e intente dominar su uso; no son tan difíciles como parecen.

APÉNDICE OCHO


LISTAS DE DESPLIEGUE


Una lista de despliegue es un programa corto que le indica al chip ANTIC cómo mostrar los datos en la pantalla. Este programa incluye instrucciones como cuántas líneas en blanco se deben colocar en la pantalla como límites superiores, dónde se almacenan los datos de la pantalla, en qué modo se encuentran las líneas que se mostrarán, si hay interrupciones que ejecutar y dónde encontrar la lista de despliegue.

Existen 9 listas de despliegue pre-programadas (10 con GTIA) que se utilizan en BASIC, una para cada modo GRAPHICS. Puede examinar las listas de despliegue de cada modo ejecutando el programa de la ubicación 560. Puede modificar estas listas para adaptarlas a sus necesidades sin mayor esfuerzo. Es bastante fácil diseñar e implementar su propia lista de despliegue una vez que conoce su ubicación y las instrucciones adecuadas.

Ciertas técnicas, como el desplazamiento fino horizontal y vertical, requieren la modificación de la lista de despliegue para mostrar correctamente los datos de la pantalla. A veces es necesario mostrar datos en más de un modo o combinar gráficos y texto en la misma pantalla. Esto se logra modificando la lista de despliegue.

La lista de despliegue más pequeña es para GRAPHICS 2, así que la usaré como ejemplo. Consta de tan solo unos 20 bytes, pero el formato es el mismo para todas las listas; solo cambian las instrucciones. Utilice el programa indicado en el Mapa de Memoria para examinar la lista o utilice un simple programa de 2 líneas como:

10 GRAPHICS 2:P=PEEK(560)+PEEK(561)*256
20 FOR N=0 TO 23:PRINT PEEK(P+N);" ";:NEXT N
Cuando ejecute este ejemplo, obtendrá lo siguiente:
112 112 112 71 112 158 7 7 7 7 7 7 7 7 7 66
  96 159 2 2 2 65 88 158
O algo similar, dependiendo de la memoria disponible. Si cambia GRAPHICS 2 a GRAPHICS 2 + 16, obtendrá esto:
112 112 112 71 112 158 7 7 7 7 7 7 7 7 7 7 7
  65 92 158
El conjunto de instrucciones de la lista de despliegue se analiza en la ubicación 560, pero aquí tiene un cuadro resumen:

Instrucción
Modo BASICLíneas de escaneoLínea de PixelsLínea de BytesComentarios
DecimalHexadecimal
Instrucciones de líneas en blanco
0
0
--
1
--
--
1 línea en blanco
16
10
--
2
--
--
2 líneas en blanco
32
20
--
3
--
--
3 líneas en blanco
48
30
--
4
--
--
4 líneas en blanco
64
40
--
5
--
--
5 líneas en blanco
80
50
--
6
--
--
6 líneas en blanco
96
60
--
7
--
--
7 líneas en blanco
112
70
--
8
--
--
8 líneas en blanco
Instrucciones de despliegue
2
2
0
8
40
40
modo texto 0
3
3
--
10
40
40
modo texto *
4
4
--
8
40
40
modo texto *
5
5
--
16
40
40
modo texto *
6
6
1
8
20
20
modo texto 1
7
7
2
16
20
20
modo texto 2
 
8
8
3
8
40
10
modo gráfico 3
9
9
4
4
80
10
modo gráfico 4
10
A
5
4
80
20
modo gráfico 5
11
B
6
2
160
20
modo gráfico 6
12
C
--
1
160
20
modo gráfico *
13
D
7
2
160
40
modo gráfico 7
14
E
--
1
160
40
modo gráfico *
15
F
8
1
320
40
modo gráfico 8
Instrucciones de salto (3 bytes de largo)
1
1
--
--
--
--
saltar a una ubicación
65
41
--
--
--
--
saltar y esperar el VBLANK

Los modos marcados con un asterisco (*) no tienen equivalente en BASIC.

Estas son las instrucciones de la lista de despliegue. Puede modificar las instrucciones de visualización por medio de la configuración de los bits para el desplazamiento horizontal o vertical, la carga del escaneo de memoria (le indica a ANTIC dónde se encuentran en la memoria las siguientes líneas que se mostrarán y qué modo usar) y la activación de una interrupción de la lista de despliege. Estas instrucciones son:

Funciónsumar decimalhexadecimalbit
Desplazamiento Horizontal
16
10
4
Desplazamiento Vertical
32
20
5
Cargar escaneo de memoria
64
40
6
Interrupción de la Lista de Despliegue
128
80
7

La instrucción LMS (Load Memory Scan - Cargar escaneo de memoria) es una instrucción de 3 bytes: el segundo y el tercer byte corresponden al byte menos significativo y al byte más significativo de la dirección donde se mostrarán los datos de la línea o pantalla. Puede sumar cualquiera o todas estas modificaciones a las instrucciones de modo texto o gráfico. Solo puede añadir la modificación de interrupción a las instrucciones de línea en blanco o de salto. Los 2 bytes que siguen a las instrucciones de salto son el byte menos significativo y el byte más significativo de la dirección a la que ANTIC salta para continuar o repetir la lista. Analicemos la DL para GRAPHICS 2 que imprimimos anteriormente:

112Estas tres instrucciones imprimen
11224 líneas de escaneo en blanco en la parte superior
112de la pantalla
71 GR.2 con la instrucción LMS añadida
112Dirección de la primera línea de datos de la pantalla
158158 * 256 + 112 = 40560
7 Muestra el resto de los datos en
7 GR.2, por lo que tenemos un total de
7 10 líneas GR.2, ó 10 * 16 =
7 160 líneas de escaneo utilizadas.
7
7
7
7
7
7
7
66 GR.0 con instrucción LMS añadida
96 Dirección de la ventana de texto inferior
159159 * 256 + 96 = 40800
2 GR.0 para la ventana de texto, por lo que tenemos
2 un total de 4 líneas
2
65 Saltar y esperar el blanqueo vertical
88 Dirección de la lista de despliegue
158158 * 256 + 88 = 40536
(volver al principio de esta lista)

Ahora examine la lista de GR.2 + 16. Puede ver que suma 2 números 7 para reemplazar las líneas GR.0 en la parte inferior de la pantalla. Un poco de cálculo nos muestra que la pantalla, en ambos casos, tiene un total de 192 líneas de escaneo. Este es un número importante; si quiere que su pantalla se vea bien, debes acercarse lo más posible a esta cifra; de lo contrario, terminará con líneas en blanco en la parte inferior de la pantalla, o peor aún, en la propia pantalla.

Encontrará el valor 112 en todas las listas de despliegue de Atari. Los 3 se utilizan para que la pantalla sea legible en su equipo. Intente reemplazar uno o más de ellos con un 0 para ver qué sucede sin ellos. Las instrucciones de salto también se utilizan para saltar un límite de 1K, ya que la propia DL no puede cruzar un límite de 1K sin dicho salto. Además, los datos de la DL no pueden cruzar un límite de 4K, por lo que debe usar una instrucción LMS antes de cruzar uno. El factor crucial al diseñar su propia lista de despliegue es asegurarse de que los datos y las líneas de escaneo coincidan. Esto puede requerir que manipule sus datos para obtener la cantidad adecuada de bytes por línea y que la visualización se muestre correctamente en pantalla. A continuación, se muestra la cantidad de bits por píxel para cada modo ANTIC:

Modo decimalHexadecimalBASICBits por pixel
2
2
0
8
modos texto
3
3
--
8
4
4
--
8
5
5
--
8
6
6
1
8
7
7
2
8
        
8
8
3
2
modos gráficos
9
9
4
1
10
A
5
2
11
B
6
1
12
C
--
1
13
D
7
2
14
E
--
2
15
F
8
1

Puede tener tantas listas de despliegue como quiera, usando la instrucción de salto/blanqueo vertical al final de cada una para indicarle a ANTIC dónde se encuentra su nueva lista de despliegue. Al colocar su nueva lista de despliegue (la Página Seis, a menos que se use para otras rutinas, es un buen lugar protegido para colocarla), ejecute un POKE 559,0 para deshabilitar las instrucciones de búsqueda de listas de despliegue y, a continuación, haga POKE con el valor adecuado para volver a habilitarla. Sea creativo y construya sus propias pantallas con diversas líneas de texto y gráficos.

Para más información, le recomiendo leer los libros De Re Atari y Your Atari 400/800. Este último ofrece buenos ejemplos de listas de despliegue modificadas y explica cómo crearlas. 2 utilidades para listas de despliegue son The Next Step de Online y Tricky Tutorial #1 de Santa Cruz.

APÉNDICE NUEVE


CONVERSIONES NUMÉRICAS


Si usa este mapa con frecuencia, o usa mucho el Atari para rutinas de lenguaje de máquina, interrupciones, gráficos y similares, sabe que con frecuencia necesita traducir entre decimal y hexadecimal, incluso viceversa. Es posible, aunque tedioso, hacer las traducciones a mano, con lápiz y papel. Las tablas para hacerlo se encuentran a continuación. No es el mejor método ni el más rápido disponible. Le recomiendo la calculadora Texas Instruments TI Programmer. Realiza la mayor parte del trabajo automáticamente, además de la manipulación de bits (desafortunadamente, no ofrece traducción binaria). Es una herramienta indispensable para los programadores.

Hay otras maneras de evitar comprar la calculadora: puede comprar el programa Monkey Wrench de Eastern House Software, que realiza las traducciones hexadecimales a decimales sin problemas. O puede comprar cualquiera de las numerosas utilidades de disco o programación que incluyen dichas rutinas de traducción, como Disk Scan de Micro Media. Sin embargo, quienes deseen realizar el trabajo ellos mismos pueden usar un programa traductor sencillo. Un ejemplo de ello, modificado a partir de rutinas que aparecieron por separado en la revistas COMPUTE! de noviembre de 1981 y marzo de 1982, es el siguiente:

10 DIM HEX$(16),DEC$(23),NUM$(10),W$(4),BIN$(8),BNY$(8),TRANS(8)
15 DATA 128,64,32,16,8,4,2,1
20 FOR N=1 TO 8:READ B:TRANS(N)=B:NEXT N:POKE 201,14
25 PRINT CHR$(125)
30 HEX$="0123456789ABCDEF":DEC$="@ABCDEFGHI!!!!!!!JKLMNO"
40 ? :? "PRESIONE [OPTION] PARA HEXADECIMAL":? "[SELECT] PARA DECIMAL":? "[START] PARA BINARIO"
42 ? "CONVERSIONES":A=1:MAX=4096
50 IF PEEK(53279)=3 THEN GOTO 100
60 IF PEEK(53279)=5 THEN GOTO 200
70 IF PEEK(53279)=6 THEN GOTO 300
80 GOTO 50
100 ? :? "INGRESE NUMERO HEXADECIMAL":? "$0000 TO $FFFF":INPUT NUM$:ACC=0:A=1:TRAP 100
120 FOR NUM=1 TO LEN(NUM$):ACC=ACC*16+ASC(DEC$(ASC(NUM$(NUM))-47))-64:NEXT NUM:T=ACC
125 IF ACC>255 THEN BNY$="........":GOTO 170
130 FOR N=7 TO 0 STEP -1:BIN=2^N
135 IF INT(ACC/BIN)=L THEN BNY$(A,A)="1":ACC=ACC-BIN:GOTO 150
140 BNY$(A,A)="0"
150 A=A+1:NEXT N
170 ? :? "HEXADECIMAL","DECIMAL","BINARIO"
180 ? " ";NUM$,T,BNY$
190 ? :? :GOTO 40
200 ? :? "INGRESE NUMERO DECIMAL":? "0 AL 65535":INPUT NUM:T=NUM:Z=T:MAX=4096:TRAP 200
205 IF NUM>65535 THEN GOTO 200
208 IF NUM<1 THEN GOTO 200
210 FOR N=1 TO 4:BYTE=INT(NUM/MAX):W$(N,N)=HEX$(BYTE+1,BYTE+1):NUM=NUM-MAX*BYTE:MAX=MAX/16:NEXT N
220 IF T>255 THEN BNY$="........":GOTO 270
230 FOR N=7 TO 0 STEP -1:BIN=2^N
235 IF INT(Z/BIN)=1 THEN BNY$(A,A)="1":Z=Z-BIN:GOTO 250
240 BNY$(A,A)="0"
250 A=A+1:NEXT N
270 ? :? "DECIMAL","HEXADECIMAL","BINARIO"
280 ? " ";T,W$,BNY$
290 GOTO 40
300 ? :? "INGRESE NUMERO BINARIO":? "00000000 AL 11111111":? :? "76543210 BITS":INPUT BIN$:TRAP 300
305 IF LEN(BIN$)<>8 THEN GOTO 300
308 FOR B=1 TO 8:IF VAL(BIN$(B,B))>1 THEN POP :GOTO 300
310 NEXT B
320 FOR B=1 TO 8:IF BIN$(B,B)="1" THEN TOT=TOT+TRANS(B)
325 NEXT B:Q=TOT
330 FOR L=1 TO 4:BYTE=INT(TOT/MAX):W$(L,L)=HEX$(BYTE+1,BYTE+1):TOT=TOT-MAX*BYTE:MAX=MAX/16:NEXT L
340 ? :? "BINARIO","HEXADECIMAL","DECIMAL"
350 ? " ";BIN$,W$,Q
390 GOTO 40
Este programa convierte cualquier número hexadecimal, decimal y binario entre sí. Existen algunas restricciones: no convierte ningún número binario para ningún número hexadecimal mayor que $FF ni ningún número decimal mayor que 255. No convierte ningún número hexadecimal mayor que $FFFF ni ningún número decimal mayor que 65.535. Dado que aproximadamente el 99 % de sus manipulaciones numéricas se realizarán dentro de estos rangos, no debería tener problemas. Puede eliminar fácilmente las rutinas de conversión del programa para usarlas en su propia utilidad.

Para convertir rápidamente cualquier número en el rango de 0 a 65.535 ($FFFF), utilice la tabla a continuación. Es muy sencillo: para convertir de hexadecimal a decimal, tome el número que aparece en la columna correspondiente al valor de la fila correspondiente y sume los valores. El total es su número decimal. Por ejemplo:

$7AC1 = 28672   cuarta columna,  7
         2560   tercera columna, A
          192   segunda columna, C
            1   primera columna, 1
        -----
        31425      valor decimal
Para convertir de decimal a hexadecimal, se busca el número mayor que sea menor al número que se desea convertir y se lo resta al número original. El valor de la fila es el primer valor hexadecimal. Luego se repite el proceso con el resto hasta que el resultado sea 0. Los valores de la fila se concatenan para obtener un número hexadecimal. Por ejemplo:
31425 = 31425
      - 28672 número mayor, columna 4. primer número hexadecimal = 7
        -----
         2753 resto, menos la tercera columna
         2560 segundo número hexadecimal = A
        -----
          193 resto, menos la segunda columna
          192 tercer número hexadecimal = C
        -----
            1 resto y cuarto número hexadecimal
Valor hexadecimal = $7AC1
Número
hexadecimal
Columna
Número
hexadecimal
cuartatercerasegundaprimera
1
4096
256
16
1
1
2
8192
512
32
2
2
3
12288
768
48
3
3
4
16384
1024
64
4
4
5
20480
1280
80
5
5
6
24576
1536
96
6
6
7
28672
1792
112
7
7
8
32768
2048
128
8
8
9
36864
2304
144
9
9
A
40960
2560
160
10
A
B
45056
2816
176
11
B
C
49152
3072
192
12
C
D
53248
3328
208
13
D
E
57344
3584
224
14
E
F
61440
3840
240
15
F

Las siguientes páginas son simplemente una lista de los valores decimales, hexadecimales y binarios para el rango de números entre 0 y 255. Esta lista me ha resultado extremadamente útil cuando no he podido usar un programa de traducción ni una calculadora. Lea la nota en la introducción sobre las técnicas de traducción para binario y hexadecimal.

DecimalHexadecimalBinario
0 000000000
1 100000001
2 200000010
3 300000011
4 400000100
5 500000101
6 600000110
7 700000111
8 800001000
9 900001001
10 A00001010
11 B00001011
12 C00001100
13 D00001101
14 E00001110
15 F00001111
161000010000
171100010001
181200010010
191300010011
201400010100
211500010101
221600010110
231700010111
241800011000
251900011001
261A00011010
271B00011011
281C00011100
291D00011101
301E00011110
311F00011111
322000100000
332100100001
342200100010
352300100011
362400100100
372500100101
382600100110
392700100111
402800101000
412900101001
422A00101010
432B00101011
442C00101100
452D00101101
462E00101110
472F00101111
483000110000
493100110001
503200110010
513300110011
523400110100
533500110101
543600110110
553700110111
563800111000
573900111001
583A00111010
593B00111011
603C00111100
613D00111101
623E00111110
633F00111111
644001000000
654101000001
664201000010
674301000011
684401000100
694501000101
704601000110
714701000111
724801001000
734901001001
744A01001010
754B01001011
764C01001100
774D01001101
784E01001110
794F01001111
805001010000
815101010001
825201010010
835301010011
845401010100
855501010101
DecimalHexadecimalBinario
865601010110
875701010111
885801011000
895901011001
905A01011010
915B01011011
925C01011100
935D01011101
945E01011110
955F01011111
966001100000
976101100001
986201100010
996301100011
1006401100100
1016501100101
1026601100110
1036701100111
1046801101000
1056901101001
1066A01101010
1076B01101011
1086C01101100
1096D01101101
1106E01101110
1116F01101111
1127001110000
1137101110001
1147201110010
1157301110011
1167401110100
1177501110101
1187601110110
1197701110111
1207801111000
1217901111001
1227A01111010
1237B01111011
1247C01111100
1257D01111101
1267E01111110
1277F01111111
1288010000000
1298110000001
1308210000010
1318310000011
1328410000100
1338510000101
1348610000110
1358710000111
1368810001000
1378910001001
1388A10001010
1398B10001011
1408C10001100
1418D10001101
1428E10001110
1438F10001111
1449010010000
1459110010001
1469210010010
1479310010011
1489410010100
1499510010101
1509610010110
1519710010111
1529810011000
1539910011001
1549A10011010
1559B10011011
1569C10011100
1579D10011101
1589E10011110
1599F10011111
160A010100000
161A110100001
162A210100010
163A310100011
164A410100100
165A510100101
166A610100110
167A710100111
168A810101000
169A910101001
170AA10101010
171AB10101011
DecimalHexadecimalBinario
172AC10101100
173AD10101101
174AE10101110
175AF10101111
176B010110000
177B110110001
178B210110010
179B310110011
180B410110100
181B510110101
182B610110110
183B710110111
184B810111000
185B910111001
186BA10111010
187BB10111011
188BC10111100
189BD10111101
190BE10111110
191BF10111111
192C011000000
193C111000001
194C211000010
195C311000011
196C411000100
197C511000101
198C611000110
199C711000111
200C811001000
201C911001001
202CA11001010
203CB11001011
204CC11001100
205CD11001101
206CE11001110
207CF11001111
208D011010000
209D111010001
210D211010010
211D311010011
212D411010100
213D511010101
214D611010110
215D711010111
216D811011000
217D911011001
218DA11011010
219DB11011011
220DC11011100
221DD11011101
222DE11011110
223DF11011111
224E011100000
225E111100001
226E211100010
227E311100011
228E411100100
229E511100101
230E611100110
231E711100111
232E811101000
233E911101001
234EA11101010
235EB11101011
236EC11101100
237ED11101101
238EE11101110
239EF11101111
240F011110000
241F111110001
242F211110010
243F311110011
244F411110100
245F511110101
246F611110110
247F711110111
248F811111000
249F911111001
250FA11111010
251FB11111011
252FC11111100
253FD11111101
254FE11111110
255FF11111111
   
   

APÉNDICE DIEZ


CÓDIGOS ATASCII E INTERNO DE LOS CARACTERES


CarácterCódigo ATASCIICódigo Interno
espacio 32 0
! 33 1
" 34 2
# 35 3
$ 36 4
% 37 5
& 38 6
' 39 7
( 40 8
) 41 9
* 42 10
+ 43 11
, 44 12
- 45 13
. 46 14
/ 47 15
0 48 16
1 49 17
2 50 18
3 51 19
4 52 20
5 53 21
6 54 22
7 55 23
8 56 24
9 57 25
: 58 26
; 59 27
< 60 28
= 61 29
> 62 30
? 63 31
@ 64 32
A 65 33
B 66 34
C 67 35
D 68 36
E 69 37
F 70 38
G 71 39
H 72 40
I 73 41
J 74 42
K 75 43
L 76 44
M 77 45
N 78 46
O 79 47
P 80 48
Q 81 49
R 82 50
S 83 51
T 84 52
U 85 53
V 86 54
W 87 55
X 88 56
Y 89 57
Z 90 58
[ 91 59
\ 92 60
] 93 61
^ 94 62
_ 95 63
CarácterCódigo ATASCIICódigo Interno
CTRL-, 0 64
CTRL-A 1 65
CTRL-B 2 66
CTRL-C 3 67
CTRL-D 4 68
CTRL-E 5 69
CTRL-F 6 70
CTRL-G 7 71
CTRL-H 8 72
CTRL-I 9 73
CTRL-J 10 74
CTRL-K 11 75
CTRL-L 12 76
CTRL-M 13 77
CTRL-N 14 78
CTRL-O 15 79
CTRL-P 16 80
CTRL-Q 17 81
CTRL-R 18 82
CTRL-S 19 83
CTRL-T 20 84
CTRL-U 21 85
CTRL-V 22 86
CTRL-W 23 87
CTRL-X 24 88
CTRL-Y 25 89
CTRL-Z 26 90
ESCAPE 27 91
FLECHA ARRIBA 28 92
FLECHA ABAJO 29 93
FLECHA IZQUIERDA 30 94
FLECHA DERECHA 31 95
CTRL-. 96 96
a 97 97
b 98 98
c 99 99
d 100100
e 101101
f 102102
g 103103
h 104104
i 105105
j 106106
k 107107
l 108108
m 109109
n 110110
o 111111
p 112112
q 113113
r 114114
s 115115
t 116116
u 117117
v 118118
w 119119
x 120120
y 121121
z 122122
CTRL-; 123123
| 124124
CLEAR 125125
DELETE 126126
TAB 127127

Los caracteres en video inverso son iguales a los anteriores, pero se les suma 128 a los valores indicados. Esto se logra estableciendo en 1 el séptimo bit (sumando 128). Se utilizan otros códigos que no se encuentran en este rango:

ATASCII   Función
155       Fin de Línea (Return)
156       Borar línea
157       Insertar línea
158       CTRL-Tab
159       Shift-Tab
253       CTRL-2 (timbre)
254       Borrar caracter
255       Insertar caracter

Consulte las páginas páginas C1 a la C3 y F1 del Manual de Referencia de Atari. Para imprimir en pantalla las teclas de flecha, borrar, insertar, borrar, el timbre, la tecla de escape o cualquiera de los códigos mencionados anteriormente, debe presionar la tecla ESC antes de introducir los caracteres del teclado.

No todos estos códigos se pueden enviar a la impresora. Los códigos ATASCII del 0 al 31 imprimen en blanco o pueden enviar códigos de control a la impresora, según la marca. 96 imprime un apóstrofo en video inverso en lugar de un rombo, 123 imprime un corchete izquierdo en lugar de una pica, 125 imprime un corchete derecho en lugar de borrar, 126 imprime una tilde en lugar de un retroceso y 127 imprime un espacio en blanco en lugar de una tabulación.

Existe un tercer conjunto de códigos utilizados por el controlador de teclado de Atari. Estos valores se encuentran en el Manual del Usuario del Sistema Operativo.