AHORRANDO MEMORIA EN BASIC ZX SPECTRUM
Dicen que los grandes genios de la ciencia hallan la solución a los grandes problemas en situaciones cotidianas como tender la ropa, ir en autobús, bajar unas escaleras... Yo no me considero un genio, pero
lo cierto es que ayer estaba mirando los azulejos del baño mientras cagaba cuando se me ocurrió la solución a mis problemas de espacio para Vindius...
Como ya os dije, el principal problema de memoria son los 7Kb que ocupan las fuentes especiales para el Vindius. Asà que pensé... ¿y si edito el cuadro de caracteres eliminando aquellos que no voy a usar en el juego (sÃmbolos como "[" "&" "\" "w" y otros)?
No me negaréis que se parece a los azulejos de un baño...
Pero como digo... no soy un genio. Fui borrando los 5 últimos ("~", "@", etc) pero al pasar a otros caractéres que están intercalados en medio de la tabla comprobé con horror que "arrastraba" al resto de caracteres. Es decir,
si borro por ejemplo la "M" o la "P", me arrastra todos los caracteres esas posiciones y por tanto al escribir es un caos.Por lo visto, los caracteres van alojados en la memoria y no pueden quedar "huecos en blanco" en la memoria, por asà decir.
Por tanto
me limito a borrar los 5 últimos (hasta la "z" que ya es necesaria) y el resto le hago un "Clear", es decir, borro el gráfico del caracter dejándolo en blanco, aunque sigue ocupando bastante memoria.
Al final ahorro unos 400bytes... menos da una piedra.
Otro ejemplo de mi "genialidad" vino dado con las variables. Como digo, en anteriores juegos de Ancient Bits ya habÃa usado el viejo truco de las variables. Es decir, coger aquellas frases o palabras largas que se repiten a través del código y asignarles un valor. Por ejemplo...
LET A$="\{i1} PULSA ""V"" PARA CONTINUAR\{i0}":
LET B$="\{i1} ELIGE OPCI\`N Y PULSA ""ENTER""\{i0}":
LET E$="El rastro del fugitivo llevo aVindius, Quinto, Milciades y elgrupo de romanos":
LET F$="Vindius ":
LET G$="Milciades ":
LET H$=" ":
LET I$="los romanos":
LET J$=" la Loba Negra":
LET K$=" del fugitivo":
LET L$=" guerreros "
Si os fijáis,
algunas palabras llevan incluido el espacio que va detrás o delante, para ahorrar asà 1 byte más en cada repetición. Por ejempo "Vindius " (con espacio detrás) se repite más veces que "Vindius" a secas, por lo que nos da 1 byte más.
Esto no es válido para palabras de más de 6 caracteres ya que al cambiar esas palabras dentro de las frases del juego hay que escribirlas asà ";F$;" ó ";K$;", que ocupan 6 bytes, por eso
hay que elegir palabras o frases largas y que se repitan mucho, como por ejemplo "Recuerdos de Constantinopla", la frase más repetida del juego (tranquilo Deka, es coña

)
Pero como digo, en anteriores juegos de Ancient Bits usaba las fuentes predeterminadas, por lo que siempre me sobraban 5 ó 6 Kb y no pasaba nada. Pero ojo, aquà que me muevo en excedentes de 50 ó 60 bytes, al ir a cargar el juego me sale el error "There is not engough memory for what are you trying to do"...
¡¡y es que las variables ocupan 2 veces su espacio, una lo que ocupa al escribirlo en el código y otra para almacenarlo en memoria!! ¡Tocaté los cojones, ya tenÃa el juego acabado y me ha tocado borrar y cambiar variables!
Simulación por ordenador del autor al ver en manos de quién ha dejado la conversión de su libro...
Por último, y ahora sÃ, un último detalle de genialidad. Como todos sabéis,
los grandes programadores de BASIC numeramos las lÃneas de 10 en 10, por si se nos ha olvidado meter algo, o es necesario introducir algo entre lÃneas más avanzado el programa.
En programas poco optimizados como los que hacemos en Ancient Bits
no es de extrañar que las lÃneas superen la centena (numeradas quedan como 1000 o más).Peeeero, si cuando ya está terminado el programa
usas la herramienta de BASin Renumber Program y la pones para que renumere las lÃneas de 1 en 1 eso hace que las lÃneas ocupen menos de 100 y por tanto nos ahorramos unos 100bytes en números de lÃnea.
¿Soy un genio o no soy un genio?
¿Y vosotros? ¿Podéis ayudar a este pobre
genio subnormal a ahorrar unos cuantos bytes más? Vamos, por favor, que tengo hasta mi Saloncito Recreativo abandonado por esto. ¡Que la Anjana os lo pague majos!
