martes, 21 de junio de 2016

VOLCADO DEL BUFFER CON LA PILA (II): GUARDANDO EL FONDO



Este programa es idéntico al VOLCADO DEL BUFFER CON LDI en lo concerniente al control de enemigos y prota. Pero cambia sustancialmente a la hora del guardado de fondo, impresión de sprites, volcado y restauración del fondo.





Esta primera parte de la rutina es muy parecida. Vamos metiendo los datos que necesitamos en la tabla de recuperación del sprite, calculamos la dirección del buffer donde  lo imprimimos y colocamos los valores que vamos a utilizar. Sólo cambia que el contador de sprites a imprimir va a ser el registro B, ya que el A se va a usar para hallar la dirección de pantalla inferior a una dada.







Con este código nos aseguramos de que después de sumar el ancho a la dirección donde se va guardando el trozo de buffer, (SUMLDR y SUMLDD), E no pase de FFh.  En esta rutina el tamaño máximo de los sprites lo he fijado en 3x3. El trozo a guardar puede ser 3x4, por lo que el tamaño máximo en bytes a guardar será de 3X4X8=96 bytes. Si al sumar la dirección donde voy a guardar el cacho más 96 tiene acarreo, significa que E ha pasado de 255. Así que lo ponemos a 0 e incrementamos D.







En esta rutina de guardado, va haciendo LDI para guardar el fondo. Al final tiene que decrementar L ya que con el último LDI se ha incrementado de más. Por eso, no podemos usar todo el ancho de la pantalla, ya que hay zonas en las que el LDI ha hecho que HL pase de 40FFh a 4100h.(por ejemplo). Si decrementamos sólo L, nos daría 41FFh y lo correcto sería 40FFh.

Incrementamos H para pasar a la siguiente línea del buffer. Como la coordenada es par, sabemos que no va a cambiar ni de caracter ni de tercio.
Sumamos a DE el ancho ya que ahora vamos a guardar de decrecha a izquierda con LDD. Incrementamos L ya que el último LDD nos lo ha decrementado de más y se vuelve a sumar el ancho a DE para volver a guardar de izquierda a derecha.

Ahora sí que tenemos que comprobar si al pasar a la siguiente línea cambia de caracter o de tercio.
Se repite el bucle y cuando se guarda todo el fondo del sprite se actualiza GFONDI+1 para el siguiente.

En cuanto a la rutina de impresión de sprites es muy parecida a la que uso en el VOLCADO DEL BUFFER CON LDI. Simplemente cambia el método de hallar la dirección de la línea inferior a una dada, ya que aquí estamos usando la estructura real de la pantalla.

No hay comentarios:

Publicar un comentario