El Apple II tendría que haber sido el primer ordenador comentado en esta serie realmente por el hecho que fue el primero en salir al mercado pero paradojicamente su complejidad es mayor que la del Spectrum a la hora de generar sus gráficos aunque menos que el MSX, el cual por el exotismo de su hardware en comparación con el resto decidí hacerle una entrada porque una gran cantidad de contenido lo tenía del antiguo blog que sigue estando activo.

Dicho esto y antes de nada veamos cual es la arquitectura del sistema:

appleiiarch

Esta es la arquitectura general del sistema sacada de la documentación oficial del ordenador, antes de ir a por faena y dirigirnos a la forma en la que el sistema genera los gráficos hemos de entender el resto del sistema.

#1 MOS 6502 a 1Mhz

#2 Mapa de memoria y gráficos.

El Apple II dividía las memoria en páginas de memoria siendo cada una de ellas de 256 bytes, esto es debido a que cada página es intepretada por el 6502 como un set de registros de datos distinto o mejor dicho como una pila de datos de 256 bytes. Esto hacía que el direccionamiento de memoria de las aplicaciones del Apple II fuese particular ya que el total soportado (incluyendo las ROMS hasta llegar a los 64KB de memoria direccionable) eran de 256 páginas de 256 bytes cada una o dicho en hexadecimal unas FF páginas con FF bytes de datos por página.

De cara a los graficos en pantalla el Apple II tenía tres modos de funcionamiento distintos:

  1. Modo Texto/Terminal.
  2. Modo Color Baja Resolución.
  3. Modo Color Alta Resolución.

Los dos primeros modos utilizaban las páginas $04, $05, $06, $07 por lo que utiliza 1KB en total, es posible reservar las páginas $08, $09,$0A y $0B para tener 1KB adicional como búfer trasero o segunda pantalla pero lo normal es que el segundo espacio de la RAM este libre. El tercer modo utiliza las páginas $20 a $5F que son unos 16KB de memoria, dicha memoria queda completamente libre en modo Lo-Res.

El acceso a la RAM era compartido entre la CPU y el Generador de Video, por lo que la memoria funcionaba a 2Mhz y la CPU y el generador de video a 1Mhz para evitar cuellos de botella en el acceso a la memoria y que la CPU o el generador de video se parase.

#3 Generador de Video: Modo Texto y Lo-Res

Lo que realmente fue revolucionario del Apple II fue el elemento que pone Video que es un Generador de Video integrado que fue creado por Steve Wozniac utilizando su experiencia previa trabajando en el hardware de las recreativas de Atari.

En aquella época la Atari VCS aún no había salido al mercado y lo máximo que habían eran máquinas recreativas que utilizaban una circuitería compleja llena de chips y lo que hizo Wozniac fue simplificar al máximo la cantidad de elementos para enviar imagenes a una pantalla pero la particularidad del Apple II es que si lo miramos evolutivamente y en el tiempo en que fue creado lo normal sería pensar que los gráficos al igual que en el Spectrum que eran generados por la CPU pero no es así y para ello se utilizaba una serie de máquinas de estado que lo que hacían era leer en memoria los datos y convertirlos en una señal que el televisor pudiese entender y adaptada a los tiempos del estándar NTSC.

Steve Wozniac afirmaba lo siguiente sobre el generador de video/adaptador de pantalla:

Un parte clave en el diseño del Apple II es el generador de pantalla integado que accede directamente a la memoria programable del sistema (se refería a la RAM). El formateo de la pantalla y el control del cursor están diseñados en mi diseño en la forma de 200 bytes de memoria de solo lectura (ROM) los cuales se encuentrán en los 8KB de memoria ROM incluidos de serie con el sistema. 1KB de la memoria del procesador principal esta dedicada al generador de pantalla, pese a que también es accesible integralmente a los programas. La transferencia de la pantalla es el tiempo en el en que tarda en definir los contenidos de ese segmento de memoria y tiene una media de 1000 carácteres por segundo, limitado principalmente por las rutinas de scroll en la memoria de solo lectura. Desde el momento en que el Apple II tiene este generador de pantalla como parte de su diseño, el modo texto se convierte en la terminal para el sistema. La pantalla tiene 24 columnas de 40 carácteres cada carácter en el diseño del Apple II es una matriz de puntos de 5×7.

La resolución de pantalla en modo texto (y en modo Lo-Res) se ve perfectamente clara en la siguiente imagen de error del Apple II donde se ven las 40 columnas de carácteres y las 24 filas.

nobootscreen

El diseño original del Apple II solo disponia de 4KB de memoria y 1KB que estaba asignado al generador de pantalla en el modo texto, obviamente el modelo inicial de 4K no podía con el modo de alta resolución que más adelante explicare por falta de RAM disponible en el sistema, pero antes de ir directamente al modo gráfico hemos de tener en cuenta como funciona el modo texto. Dicho modo estaba heredado del diseño del Apple I y utilizaba una serie de circuitos combinatorios para poder generar el texto en un televisor en modo monocromo pero en ningun momento utilizaba el 6502 para generar la pantalla sino que la pantalla era generada a través de una versión primitiva del adaptador de pantalla que que se vería evolucionado en el Apple II. Los carácteres que aparen en pantalla se encontraban ya definidos en una ROM que ocupaba el espacio de memoria que en el Apple II esta pensado para el modo texto y el modo Lo-Res a color, cuando en el Apple II seleccionamos el modo texto lo que hace es tomar los datos predefindos de los carácteres en la ROM para componerlos en el KB de memoria que va a ser leido por el adaptador de pantalla.

Paradojicamente en el Apple I y el Apple II se almacenaban las lineas en memoria de una manera cuanto menos curiosa:

appleiientrelazado

Tenemos un total de 24 lineas divididas en grupos de 3 lineas, cada grupo ocupaba unos 128 bytes por lo que de esta manera tenemos 1KB, el sistema original (de 4KB) hace servir unas 16 páginas en total que van desde la 00 (pila del 6502) a la 0F… ¿Verdad que antes hemos definido la posición desde la que el adaptador de pantalla lee en memoria? Lo mejor es verlo ahora de manera gráfica para entender mejor el funcionamiento.

appleiilowres

Lo que vemos aquí es la distribución de las paginas, dada grupo de cuatro páginas corresponde a una pantalla completa y sabemos que cada 3 lineas se almacenan en unos 128 bytes por lo que tenemos que suponer que cada 6 lineas de las 24 lineas totales se almacenan en una página de la memoria por lo que:

apple-ii-assign

Una vez que sabemos como en el Apple I y el Apple II se almacena el texto y antes de pasar al modo Lo-Res a color hemos de entender cuales son los datos que se generan, en el caso del modo texto utiliza como referencia el formato ASCII de 128 bits como referencia para saber que carácter ha de escribir, por lo que ignora el primer bit de cada byte en este modo.

ascii

El 6502 en este caso es el encargado durante el overscan (cuando el haz de electrones no es generando la imagen) de leer la parte superior de la memoria donde esta la ROM de carácteres y los copia en formato binario en las páginas que ha de leer el adaptador de pantalla. Supongamos que el búfer de imagen es tan simple que solo tiene dos carácteres:

aa

El adaptador de pantalla lee los grupos de pixeles en grupos de 8 por lo que…

export30

El código binario en este caso sería 11011110 y el adaptador de pantalla iría leyendo hasta llegar al final de la columna 24 (de 5 pixeles cada una) por lo que en el modo texto el adaptador de pantalla hará el salto de linea en modo texto al llegar al final de la columna 24 y entrara en salto de imagen (overscan) cuando haya compledo las 40 lineas por lo que con esto tenemos casi explicado el modo texto, el cual ocupa unos 33600 bits, por lo que tenemos poco más de 32KB pero no se almacenan de manera consecutiva sino en las 4 páginas de memoria que antes he comentado.

El siguiento modo es el Lo-Res a color, donde en él ya se pueden utilizar patrones definidos por el usuario, este se activa a través de poner en 1 un valor en un registro concreto (GR) que hace el generador de video acabe por interpretar el código binario de otra manera y utilizando 4 bits por pixel para definir el color de cada pixel utilizando como referencia una paleta de 16 colores que es la siguiente:

apple_ii_low-resolution_graphics_demo_2

Pero en el caso del modo a color la lectura de los pixeles se hace cogiendo las lineas de dos en dos por lo que si tomamos el carácter antes definido en el modo texto entonces tenemos lo siguiente:dualline

Se leen las filas de dos en dos pero las columnas de 1 en 1 y cada ciclo de reloj el adaptador de pantalla lee de la memoria unos 8 bits por lo que esto teniendo en cuenta el código de paleta de arriba donde el el negro es 0 (0000) y el 15 es el blanco (1111) el código en modo color no sería 11011110 como en el modo texto sino (11111111)(11110000)(00001111)(11110000)(11111111)(11111111)(11110000)(00001111) y en el caso de que queramos utilizar color:

coloraa

En este caso el código pasaría a ser: (11111111)(11110001)(00011111)(00011111)(11110001)(11111111)(11111111)(11111100)(11001111). Por lo que si antes una fila de 40 columnas (200 pixeles) ocupaba unos 200 bits ahora tenemos 2 filas de 40 columnas (400 pixeles) ocupando 4 bits por pixel por lo que dos filas ocupan unos 20 bytes en total en este modo y las 6 filas que se almacenan en cada una de las páginas de memoria unos 60 bytes en total de los 256 bytes que hay reservados para almacenar estos datos, en este modo el número de filas se duplica pasando a ser de 24 a 48 y cambiando por completo la forma en la que se almacenan en las páginas de la memoria.

lorescolumns

Por lo que el Apple II tiene memoria suficiente para otros modos a mayor resolución aparte del modo Hi-Res que utiliza otro espacio de la memoria pero Wozniac diseño el ordenador de esta manera y para juegos no se solía utilizar el Lo-Res sino el Hi-Res que es donde esta toda la miga y la parte que nos interesa.

#4 Generador de Video: Modo Hi-Res

Hay que tener en cuenta que este modo inicialmente se pendo como un modo de lujo que necesitaba que el sistema tuviese una mayor cantidad de memoria ya que el el adaptador de pantalla en este modo se asignaba para si unos 16KB de los 48KB de RAM que tenia el sistema por lo que si el programa era muy complejo se solía prescindir de este modo aunque en el caso de los videojuegos era el más utilizado porque era el que mejor iba para estos.

La resolucion horizontal de esta modo pasa a ser de 280 pixeles (140 columnas de 2 pixeles cada una) mientras que en la horizonal pasamos a 192 pixeles (192 filas), este modo tiene dos modos de funcionamiento, uno de ellos es el modo monocromo.

lr_apple

El otro es el modo a color:

lr

Para activar este modo Hi-Res se tenían que activar no uno sino dos bits distintos, el primero de ellos activa el modo monocromo o color y el segundo de ellos activa la paleta de colores a utilizar y es aquí donde entramos en un problema porque cada pixel esta definido por bits distintos de color y si tenemos en cuenta que solo hay dos paletas entonces tenemos lo siguiente:

hirescolors

 

 

Pero antes hemos dicho que el búfer de imagen en este caso es de unos 8KB para el búfer frontal (el que lee el adaptador de pantalla) y de otros 8KB para el búfer trasero (el que generamos actualmente) y si hacemos cálculos veremos que necesitamos unos 13KB para almacenar los datos en total y tenemos menos memoria. La forma de hacerlo es que de las 192 filas en total en cada momento almacena unas 64 filas en cada uno de los búfers de 8KB. por lo que con poco más de 4KB podemos almacenar el búfer de 1/3 de la pantalla. Ahora bien, hay juegos como los Ultima que combinan ambas paletas de colores para alta definición sin problemas.

ultima_2

¿Como lo hacen? Simplemente el 6502 cambia el valor de la paleta mientras el haz de electrones pasa por el televisor y es que el colorido en el caso del Apple II no depende del generador de video que lo que hace es leer el binario en una parte de la memoria y transformarlo para el adaptador de pantalla sino que depende del propio adaptador de pantalla por lo que habrán unos pixeles muertos (en negro) en el periodo en el que el haz de electrones pasa por la pantalla mientras se cambia el bit de la paleta.

Se ha de tener en cuenta que cada linea en modo Hi-Res ocupaba unos 70 bytes de memoria por lo que es posible almacenar 3 lineas por página de memoria quedando libres unos 46 bytes por página y ocupando el espacio de 64 páginas de memoria (64*256 bytes= 16KB) pero la distribución es algo diferente que en el modo Lo-Res.
hiresline

#5 Videx Videoterm

La Videx Videoterm fue una tarjeta de video para el Apple II que tenía como particularidad llevar el 6845 de Motorola como Generador de Video por lo que permitía prescindir por completo del generador de video incluido con el sistema.

videx-videoterm-with-connector-front

¿Que tiene de especial? Bueno, el 6845 fue el adaptador de pantalla de los primeros IBM PC (CGA) y del Amstrad CPC y venía con unos 16KB de memoria. Esta tarjeta estaba pensada para un modo texto de 80 columnas y no estaba pensada para gráficos por lo que era completamente inutil para videojuegos, he pensado que lo mejor es hablar de ella cuando lleguemos al IBM PC cuando comente los modos CGA, EGA y posteriores.

Como curiosidad, esta tarjeta se solía utilizar en combinacion con esta otra:

applez80

La Microsoft Softcard llevaba un Z80 y permitia que el sistema cargase el SO CP/M y sus aplicaciones que estabán pensadas para el Z80 y ene especial utilizaban como generador de video y adaptador de pantalla la 6845. Es decir, ambas tarjetas combinadas transformaban el Apple II en un ordenador completamente distinto pensado para ejecutar el SO CP/M y sus aplicaciones.

#6 El Apple IIe

El Apple IIe es una versión del Apple II con el generador de video mejorado que permite un modo Lo-Res con el doble de resolución horizontal y un modo Hi-Res con el doble de resolución horizontal, a diferencia del modelo original del Apple II con solo 48KB como mucho aquí la RAM ha aumentado hasta los 64KB gracias a la nueva capacidad de poder seleccionar banco de memoria en comparación con modelos anteriores del Apple II, esto le permitía trabajar con 128KB de RAM, no es que la CPU soportase un direccionamiento mejor, era la misma que en los anteriores modelos, solo que se podían tener dos bancos de memoria RAM e intercambiar entre ellos.

appleii128kb

Para poder llegar a los 128KB el sistema tenía un puerto de expansión donde colocar la 80 Column Card que añadía esos otros 64KB de memoria en el sistema.

extended-80-column-card

La tarjeta permitía un modo texto de 80 columnas (recordemos que en el Apple II el modo texto y el Lo-Res es de unas 40 columnas) a base de utilizar dos espacios de memoria distintos que también permiten un modo Hi-Res de 560 pixeles en horizontal pero para ello era necesario instalar dicha tarjeta.

#7 El Apple II GS

Después del fiasco comercial del Macintosh y dada la popularidad del Apple II en Cupertino decidieron sacar un Macintosh de bajo coste tomando como referencia la arquitectura del Apple II pero utilizando el 65C816, que no deja de ser la versión de 16 bits del 6502 (que Nintendo también utilizaría en SFC/SNES) esta vez a la velocidad de 2.5 Mhz, pero no solo la CPU se vio mejorada sino también el adaptador gráfico, lo que supuso un salto adelante bastante importante.El cambio de CPU le permitía al sistema direccionar una mayor cantidad de memoria ya que el 65C816 tiene un direccionamiento de 24 bits (16MB) y el sistema aparecio en el mercado con unos 256KB de RAM divididos en 128KB de RAM lenta y 128KB de RAM rápida. La RAM rápida funcionaba a una velocidad de 2.5 Mhz y era utilizada para las aplicaciones propias del Apple II GS mientras que la RAM lenta era utilizada para aplicaciones que no necesitaban tanta potencia y para la compatibilidad hacía atrás con el Apple IIe y esta funcionaba a 1Mhz, aunque era posible ampliar la memoria total del sistema más allá y era recomendable porque a partir de los 128KB en adelante las aplicaciones podían utilizar el procesador y la memoria a 2.5 Mhz, en especial Apple vendía una expansión de memoria de 1MB para el sistema.

apple1mb

Pero lo que nos interesa son los gráficos, en este caso los ingenieros mantuvieron por compatibilidad hacía atrás la circuitería original y la integraron aun más pero decidieron colocar un nuevo chip gráfico al que llamaron VGC que tenía dos modos de funcionamiento que son los siguientes:

appleiigs

El modo de 320×200 pixeles almacena los pixeles la misma manera que el modo Lo-Res donde cada pixel utiliza unos 4 bits.

appleiigs2

En el modo de 640×200 la forma de alcanzar los 16 colores era ir intercalando entre las diferentes paletas de colores disponibles, el primer pixel tenía acceso a la primera paleta, el segundo pixel a la segunda paleta, el tercer pixel a la tercera paleta y el cuarto pixel a la cuarta paleta, obviamente cada una de estas paletas era solo de 4 colores mientras que en el modo 320×200 se pueden seleccionar hasta 16 colores por linea y las paletas en ambos casos se pueden cambiar durante el periodo de salto de linea.

¿Y la forma de almacenar en memoria? No utilizaba el método exótico del Apple II que habría creado Wozniac sino que lo que hicieron fue utilizar un búfer de imagen convencional que serían de unos 32KB de memoria por búfer, haciendo un total de 64KB. Las aplicaciones en modo Apple II GS utilizaban hasta 176KB de RAM, dejando unos 80KB para el SO y la pantalla. El SO en los modelos iniciales era el del Apple IIe adaptado por lo que

El cambio en el adaptador de video permitió mostrar gráficos como los siguientes:

Era un salto importante desde lo que era el Apple II pero la presencia del Commodore Amiga y el Atari ST con adaptadores gráficos superiores y menor precio lo convertió en un fracaso y en el PC ya existía los adaptadores EGA que tenían la misma capacidad de color que el VGC con la misma capacidad visual desde hacía años por lo que Apple intento re-enfocarlo como un Macintosh de bajo coste.

Pero la gente lo rechazo también prefieriendo el Macintosh y haciendo que Apple lanzará el Mac LC para susituir al Apple II matando por completo a la gama.

Con esto terminamos la entrada, las dos siguientes van a ser sobre el Amstrad CPC y Atari 8 bits, dejare la gama de Commodore para el final de los 8 bits antes de dar el salto a los 16 bits, aunque en esta entrada ya ha hecho un adelanto con el II GS.