Cuando hablé de 2M y Stacker, mced, me sugirió escribir un artÃculo sobre las técnicas de optimización usadas en la época de los 8 bits.
A muchos, les puede resultar hoy dÃa increÃble, pero por aquellos años 80, la máquina más popular en nuestro pais era el Sinclair ZX Spectrum 48K, un microordenador personal bastante limitado.
Su CPU Z-80 a 3,5 Mhz, tenÃa una potencia de cálculo algo superior a sus coetáneos. Sin embargo, no iba asistida por otro hardware, de manera que se encargaba de manejar toda la lógica, las E/S, el manejo de sprites, y la generación de sonido, lo que al cabo, implicaban una limitación.
Lo más apremienta era la memoria, que de 48 Kb. totales (en realidad eran 64 Kb, pero 16 Kb. eran de ROM), descontando la memoria de vÃdeo, y las areas reservadas, quedaba entorno a algo más de 41 Kb. utilizables. Este valor, era todavÃa inferior, si se descontaba lo que ocupaba el cargador BASIC. Si nos referimos al modelo básico, éste tenÃa instalados sólo 16 Kb., por lo que nos debÃamos contentar con 9 Kb. disponibles.
Me gustó mucho Meteor Storm, de 1982, que metÃa en 7 Kb., un clon del clásico Asteroids de Atari, manteniendo gran parte de su jugabilidad intacta.

De esta manera, contábamos con esos 41 Kb. en el mejor de los casos, para meter un juego completo, incluyendo, la configuración, lógica, gráficos, efectos de sonido, música y los datos necesarios para cada uno de los niveles.
Durante este primera época, esa limitación, solamente se superaba con arquitecturas ingeniosas, y un dominio del lenguaje máquina o del ensamblador altÃsimo.
Quizás de todos ellos, destacarÃa Turbo Esprit, de 1986.

Posteriormente se empezaron a aplicar técnicas de compresión, que aunque usaban algoritmos sencillo del estilo RLE primero, y LZ después, obtenÃan una gran reducción del espacio de almacenamiento disponible, especialmente al tratar con gráficos, mapas, o música. El inconveniente era que necesitaban ser descomprimidos antes de ser usados, requiriendo tiempo de CPU y memoria.
Probablemente el ejemplo más relevante fuera Gremlins de 1985, una aventura basada en la pelÃcula de la misma época, donde sólo el espacio necesario para almacenar todos los fondos necesarios para el juego. era casi el doble del total disponible.

Proliferaban los modelos de 128 Kb. (128, +2 y +3), que disponÃan de mucha más capacidad de memoria. Sin embargo ésta, y debido a las limitaciones de direccionamiento del Z-80, era básicamente el mismo 48 Kb. con 64 Kb. adicionales en otras páginas a las que se podÃa acceder puntualmente.
Con la nueva memoria disponible, se optó por las multicargas, que funcionaban generalmente requiriendo que el usuario cargarla los niveles extra desde la cinta cuando se necesitaban en los modelos de 48 Kb., y que estaban completamente cargados en los de 128 Kb.
Por ejemplo Operation Wolf de 1988, cargaba más de 100 Kb. de contenido, que vendrÃan a ser más de 15 minutos de carga. En uno de 48 Kb. la carga inicial ser reducÃa, pero era necesario cargar un par de minutos de datos cada vez que superábamos un nivel.

El colofón, debido a las limitaciones inherentes de un hardware ya obsoleto por aquella época, lo tenÃa Street Fighter II, que con sus más de 200 Kb. requerÃa multicarga, en los modelos de 128 Kb.

Es fácil darse cuenta que cuantos más datos habÃa que cargar, más tiempo tendrÃa que esperar el usuario. A un ritmo medio de 1500 Kbps, si excluÃamos sincronÃas y cabeceras, era algo determinante. Por otro lado, una piraterÃa en aumento, y que pasaba inicialmente por los copiones (las dobles pletinas estaban al alcance de pocos), hicieron que se desarrollaran sistemas de protección y aceleración de carga.
Estas técnicas se llamaban esquemas de codificación, y si hablamos de protección pura, tendrÃamos los bloques sin cabecera, que también ahorraban algo de tiempo.
En cuanto a protecciones, Alcatraz, y Alcatraz 2, fueron incluidos en tÃtulos muy populares.
Sin embargo, el más exitoso, fue Speedlock, que llegó a su versión 8, y además de proteger contra copias, aceleraba la carga hasta un 150%. Vulgarmente se les llamaba cargas Turbo. De hecho, esta aceleración, podrÃa ser mucho mayor, pero a costa de introducir ruidos que podrÃan causar un error de carga.
Como ejemplo de Speedlock en sus últimas evoluciones, cabe mencionar Robocop 3 de 1992.

ArtÃculos relacionados:
Técnicas vÃricas: IntroducciónTécnicas vÃricas: Polimorfismo
100 FPS en un PC (16 bits)
Freescape, el motor 3D de los 8 bits
8 bits, cine y televisión (II)

#1 by Bobby on 26 de julio de 2011 - 10:56
Citar
Me gustan estos articulos, llevo siguiendo el blog desde hace ya mucho tiempo. Pero nunca me anime a comentar. ^_^
Es impresionante el ingenio que tenian los programadores de aquella epoca para luchar con las limitaciones que tenian esas maquinas. Me fascina el nivel de optimizacion que tenian que hacer, en cambio hoy en dia da igual. Total si la espacio tenemos de sobra y la memoria no cuesta mucho.
A veces pienso, si se pusieran a optimizar bien el software, y a lo mejor trabajar a un nivel mas bajo .. obtendrian unos resultados impresionantes con las maquinas de hoy en dia.
Un saludo
#2 by Javier Gutiérrez Chamorro (Guti) on 27 de julio de 2011 - 20:36
Citar
Llevas razón Bobby en que un software actual con las técnicas de antaño, volarÃa con el hardware que tenemos.
No obstante, hay que considerar que el tiempo de desarrollo que necesita un programa escrito de esa manera, es varias veces superior a las tecnologÃas modernas, por lo que repercutirÃa en el precio, y volverÃamos a precios del estilo de 1000 € por una licencia de Wordperfect.
#3 by mced on 29 de julio de 2011 - 21:02
Citar
“Las dobles pletinas estaban al alcance de pocos”
Puede, Guti, pero conectar el EAR de un cassette al MIC de otro permitÃa obtener los mismos resultados. Y si por medio ponÃas el Spectrum con un mÃtico copión llamado Audiocopy (creo recordar), ni los juegos en turbo se resistÃan. Precisamente uno de mis favoritos y que nombras, Turbo Esprit, “cayó” con este método.
A veces, por otra parte, pienso que la falta de optimización del software actual también forma parte de un acuerdo tácito con los fabricantes de componentes. Un software bien diseñado no propicia la renovación del hardware. Ahà tenemos el ejemplo de Microsoft y los netbooks: en cuanto han querido, han pulido todo el código de Vista para poder hacer funcionar Seven en ellos.
#4 by Javier Gutiérrez Chamorro (Guti) on 1 de agosto de 2011 - 8:31
Citar
Creo que tienes razón mced en lo de la falta de optimización como algo acordado con la industria del hardware. No obstante, dudo que sea un acuerdo explÃcito, sino algo más bien del estilo a “Desarrollo de manera rápida aunque sea poco eficiente, y además a los fabricantes de hardware, ya les va bien”.