0x0C Ensamblador ZX Spectrum Pong – Pantalla de carga

Esta entrega de Ensamblador ZX Spectrum Pong también es nueva con respecto a la publicación original, y el objetivo es dotar a nuestro programa de una pantalla de carga; quizá no sea la mejor manera de hacerlo, pero es relativamente sencillo y cumple con su función.

Ensamblador ZX Spectrum Pong – Pantalla de carga

En esta ocasión vamos a cambiar de emulador, vamos a usar Retro Virtual Machine. ¿Por qué este cambio? Vamos a realizar un cargador BASIC personalizado para añadir nuestra pantalla de carga, y Retro Virtual Machine me parece que se acerca visualmente más a lo que usábamos de pequeños, Computone incluido.

Como hasta ahora, creamos una carpeta que se llame Paso12 y copiamos todos los ficheros .asm desde la carpeta Paso11. En esta ocasión, apenas vamos a modificar el código de nuestro programa, pero si que lo vamos a compilar de distinta manera a como lo hemos hecho hasta ahora.

Antes de nada, debéis descargar y descomprimir la pantalla de carga que he preparado o hacer una vosotros. No soy grafista, así que no esperéis gran cosa, aunque cumple con el cometido de esta entrega.

Implementamos nuestro cargador

Para crear el cargador no vamos a partir desde cero, vamos a modificar el cargador que crea PASMO con la opción –tapbas.

Cargamos nuestro programa en Retro Virtual Machine, pero en lugar de cargarlo con LOAD»», lo vamos a cargar con MERGE»». Para poder escribir MERGE, si estáis trabajando en un PC, tenéis que pulsar las teclas Control y Mayúsculas para pasar a modo extendido, y luego Control + T para escribir MERGE. Después de MERGE hay que poner «», esto lo logramos pulsando la tecla P con la tecla Control pulsada. Un vez que tenemos escrito MERGE»», pulsamos Enter y ya podemos cargar el cargador que nos crea PASMO.

Cuando carga el primer bloque, paramos el reproductor y pulsamos Enter para quitar el mensaje 0 OK, 0:1 y ver el código del cargador.

Ensamblador ZX Spectrum - Cargador PASMO
Ensamblador ZX Spectrum, cargador generado por PASMO

Lo primero que vamos a hacer el editar la primera línea, para lo cual pulsamos el cursor arriba y una vez seleccionada, Mayúsculas + 1 para editar.

Ensamblador ZX Spectrum Pong - Editamos la primera línea del cargador
Ensamblador ZX Spectrum Pong, editamos la primera línea del cargador

Vamos a cambiar la dirección donde se inicia el programa ya que, al meter más BASIC, es necesario cargar el programa en una posición de memoria más alta. Vamos a cambiar el CLEAR 23980, por CLEAR 24059. Seguidamente vamos a cambiar la línea 40 para poner la dirección de memoria donde cargar el programa, de manera que RANDOMIZE USR 23981 la dejamos como RANDOMIZE USR 24060.

Ahora vamos a ampliar la línea 20. Editamos la línea, nos vamos al final y agregamos dos puntos, pulsando Control + Z. Seguido a los dos puntos, vamos a añadir POKE 23624, 0, que se obtiene con Mayúsculas + O y la coma con la coma. Con este POKE ponemos tinta y fondo negro en la línea de comandos del ZX Spectrum, también ponemos en negro el borde; la dirección 23624 es donde esta la variable de sistema que en la entrega 0x0A llamamos BORDCR.

Seguimos en la línea 20 y vamos a poner otro POKE (no olvidéis los dos puntos) para poner un valor en la variable de sistema donde se ponen los atributos permanentes de la pantalla, POKE 23693, 0, para poner la tinta en negro y el fondo en negro en toda la pantalla.

Por último, ponemos otros dos puntos y CLS, que obtenemos pulsando la V.

Ensamblador ZX Spectrum, líneas 10, 20 y 40 modificadas
Ensamblador ZX Spectrum, líneas 10, 20 y 40 modificadas

Vamos a modificar la línea 30, y antes de LOAD «»CODE, vamos a añadir LOAD «»SCREEN$: (LOAD se obtiene pulsando la J y SCREEN$ pulsando Control + K en modo extendido).

Después de SCREEN$, vamos a añadir otro POKE para que no se muestren en pantalla el resto de bloques que se van a cargar, y de esta forma que no borren parte de nuestra pantalla de carga. Este POKE en concreto lo he tomado prestado de uno de los vídeos de AsteroideZX; POKE 23739, 111.

Es el momento de grabar los cambios en una cinta, en este caso concreto la vamos a llamar PongCargador.tap, ya que vamos a crear otras dos cintas: una para la pantalla de carga y otra para el programa.

Para grabar ponemos SAVE «PoromPong» LINE 10. SAVE se obtiene en la S y LINE se obtiene pulsando Control + 3 en modo extendido. Con esto grabamos el programa en cinta y después, al cargarlo con LOAD «», se ejecuta desde la línea 10.

Ensamblador ZX Spectrum, cargador finalizado
Ensamblador ZX Spectrum, cargador finalizado

Reiniciamos el emulador y probamos lo grabado, veréis que se va a auto ejecutar y se queda esperando a que se siga cargando el resto del programa. Pulsamos Escape para parar la ejecución y pulsamos B, luego 7 y Enter, para poner el borde en blanco. Luego en modo extendido Control + X, luego 7 y Enter, y ya tenemos la tinta de la pantalla principal en blanco.

Añadimos la pantalla de carga

La pantalla de carga la he diseñado con ZX PaintBrush y la he exportado como PongPantalla.tap; me ha pedido que ponga un nombre al bloque y he puesto PongScr.

Ensamblador ZX Spectrum - Exportación de pantalla a .tap
Ensamblador ZX Spectrum, exportación de pantalla a .tap

Es muy importante exportar como tap y no grabar como tap. Si grabamos como tap no nos pide el nombre de la cabecera y luego no cargaría.

Ahora vamos a concatenar el cargador y la pantalla a través de Copy, con el símbolo de sistema (en mi caso que es Windows); no olvidéis situaros en el directorio de trabajo.

copy /b PongCargador.tap+PongPantalla.tap Pong.tap

Hemos concatenado los archivos PongCargador.tap y PongPantalla.tap y el resultado lo hemos escrito en Pong.tap.

El siguiente paso es cargar en el emulador el archivo Pong.tap para ver si carga nuestra pantalla.

Ensamblador ZX Spectrum - Pantalla de carga
Ensamblador ZX Spectrum, pantalla de carga

Incluimos nuestro PorompomPong

Ahora solo queda compilar nuestro PorompomPong con PASMO, sin que nos cree el cargador BASIC.

Antes de nada abrimos el archivo Main.asm y cambiamos en la primera línea el ORG $5dad por ORG $5dfc (24060), que es la dirección donde se debe cargar nuestro programa según hemos indicado en el cargador.

Es el momento de compilar con PASMO pero cambiando el –tapbas que veníamos usando hasta ahora por –tap.

pasmo --name PoromPong --tap Main.asm PongBytes.tap

Con esto compilamos pero PASMO no nos crea un cargador BASIC.

Por último vamos a concatenar los tres archivos en uno solo y comprobar si nuestro PorompomPong sigue funcionado.

copy /b PongCargador.tap+PongPantalla.tap+PongBytes.tap Pong.tap

Si todo ha ido bien, cargamos en el emulador y después de la pantalla de carga, se cargará nuestro programa y todo listo para jugar.

Podéis descargar todo el código que hemos generado.

Enlaces de interés

Vídeo

Si lo prefieres, puedes ver el vídeo que grabamos de esta sesión.

Ensamblador ZX Spectrum, pantalla de carga

Ensamblador para ZX Spectrum PONG por Juan Antonio Rubio García.
Comentarios al código por Spirax.
Correcciones al texto original realizadas por Joaquín Ferrero.
Esta obra está bajo licencia de Creative Commons Reconocimiento-NoComercial-CompartitIgual 4.0 Internacional License.
Este tutorial ha sido publicado con anterioridad en AUA y se han grabado vídeos que están publicados a través de Retro Parla.

No olvides visitar las webs amigas.

AUA

Aquí puedes ver más cosas que he desarrollado para .Net, y aquí las desarrolladas en ensamblador para Z80.

Y recuerda, si lo usas no te limites a copiarlo, intenta entenderlo y adaptarlo a tus necesidades.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
A %d blogueros les gusta esto: