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.