Crea cabeceras para programas grabados en cintas (hoy en día en wav, mp3, tzx) y poder cargar directamente el cuerpo o datos del programa, sin el comando LOAD del Basic.
Por ejemplo, si queremos cargar una pantalla sin cabecera en la Sinclair, debemos generar lo siguiente desde el programa.
Sabemos que la dirección de comienzo de memoria de la pantalla en la Sinclair es 16384 y su longitud son 6912 bytes. En caso de desconocerlo, se puede obtener con el
Analizador de Tapes que publique al principio de este foro.
LD DE, 6912 (El registro DE es la longitud en bytes)
LD IX 16384 (El registro IX marca la posición de comienzo de memoria)
LD SP, (En este caso presionamos la tecla ENTER para ANULAR este comando, debido a que no se moverá el STACK de la PILA)
LD A, (Presionamos ENTER ya que tomara el flag estándar 255. Se usa otros valores cuando se personaliza el programa, previamente grabado con otro valor de flag.)
JP (Si no vamos a ejecutar otro programa en assembler luego de la carga de la pantalla, presionan ENTER para generar el comando
RET que retorna del Assembler a Basic)
Luego Ingresan el nombre del programa que genera la cabecera (10 caracteres).
Confirman si los datos son correctos para generar el código máquina.
Grabamos el programa.
Generamos otra cabecera o salimos del sistema.
El programa se graba dentro de la zona de memoria de la impresora 23300. Si queremos cargar la pantalla sin cabecera, escribimos los siguientes comandos.
LOAD “” CODE : RANDOMIZE USER 23300
El programa
header-maker.tzx es compatible para TS2068 y ZX48k. Cuando este programa genera el código máquina , lo realiza según en la plataforma que esté corriendo (obteniendo ese dato desde las variables de sistemas)
A modo de ejemplo, les dejo los archivos ejemplos de cabeceras
header_Screen_TS.tzx y
header_Screen_ZX.tzx para Timex Sinclair y Spectrum respectivamente y un archivo de pantalla sin cabecera del juego Crazy Bugs
screen_crazy_bugs.tzx. Este juego no tiene pantalla de carga, y lo obtuve con un save.screen desde adentro del programa (esto lo explicaré en la próxima publicación con otras rutias de programación que tendrá relación con este).
Otro ejemplo, es cargar un programa sin cabecera y ejecutarlo directamente sin que retorne al Basic.
Los siguientes datos son del último juego Earth Ligth publicado, el cual el programa del juego comienza en la dirección 24501 y una longitud de 41035 bytes. Nuevamente estos datos se obtienen con el programa
Analizador de Tapes publicado al principio de este foro.
Debido a que la zona de Basic en la TS2068 comienza en la dirección 26710, el juego puede cargar con un LOAD ””, pero no retornaría correctamente al Basic para continuar con la siguiente instrucción RANDOMIZE USR 24576 para ejecutar el Juego.
LD DE, 41035 (El registro DE es la longitud en bytes)
LD IX, 24501 (El registro IX marca la posición de comienzo de memoria)
LD SP, 23500 (Mover el STACK de la PILA. Por default la Timex comienza en la dirección 24576 )
LD A, (Presionamos ENTER ya que tomara el flag estándar 255)
JP 24576 (Equivalente a un RANDOMIZE USR 24576)
Luego Ingresan el nombre del programa que genera la cabecera (10 caracteres).
Confirman si los datos son correctos para generar el código máquina.
Grabamos el programa.
Generamos otra cabecera o salimos del sistema.
Ya tenemos el programa cabecera para cargar el juego. Si bien su dirección estándar está dentro del buffer de la impresora 23300, también se lo puede reubicar en otra dirección de memoria, siendo este totalmente transportable.
Esta es una de las tantas técnicas para poder compatibilizar programas de Spectrum con TS2068. (Cada programa es un mundo y el trabajo es bastante manual).
También se puede crear cabeceras con el programa Analizador de Tapes, en la opción de Ver /Modificar Cabecera. La diferencia que estas cabeceras no son programas para ejecutar (USR xxxxx). Son audios para cargar como cabecera y luego el audio del programa (para usar con los comandos LOAD “” o LOAD “” CODE).