Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: Tragamanzanas en 28 de Febrero de 2010, 11:24:49 pm



Título: Borrar una parte de la pantalla
Publicado por: Tragamanzanas en 28 de Febrero de 2010, 11:24:49 pm
Hola,

Mi problema es que necesito borrar solo una parte de la pantalla, pero el código me está quedando bastante liado (parece que funciona, pero me gustaría que me dijeseis como lo haceis, porque creo que no debe ser tan rebuscado como lo he programado, utilizo un monton de registros, etc.)

Lo que quiero es antes de llamar a esta función, darle en dos varibles los datos X1,Y1 y X2,Y2 ,yo le doy directamente los valores en vram por simplificar  :) y que borre ese cuadrado/rectangulo (luego aprovechandome de este código, quiero que rellene el cuadrado con los valores de un array)

Bueno, espero que alguien me ayude, ya que me gustaría ir depurando el código.


Título: Re: Borrar una parte de la pantalla
Publicado por: j4mk3 en 01 de Marzo de 2010, 01:06:51 am
A ver.... si te sirve esto.
Este codigo hace un barrido de la pantalla y lo rellena con un caracter en concreto a lo cortinilla a la derecha...admite el tamaño que tu quieras de ancho y alto , partiendo de una posicion inicial.

Pinta una columna en cada interrupcion.
El codio esta preparado para asMSX.

Es una funcion que hice hace un tiempo y esta chula para hacer limpieza de zonas asi con elegancia.
Si le quitas los HALT, ya tienes un rellenado sin barrido. Y si antes del LD [HL],A , preparas en A lo que quieras poner del array ese...pos ya lo tienes.

Código:
; Cortilla a la derecha
; Contiene HALTS !.

; A = Char de relleno
; DE = Pos. del Buffer Inicial
; B = Ancho
; C = Alto
; HL = Posicio Buffer pantalla

; Cal RAM : res
; Toca   : HL,BC,DE
; Retorna : res
; Usa fun.: res

SLIDERI:
add HL,DE ; Inicio VBUFF

; Ancho Ya lo tengo en B
ld DE,32

@@LOOPY:
push BC
push HL

halt

; Alto Ya lo tengo en C
ld B,C
@@LOOPX:
ld [HL],A
add HL,DE
djnz @@LOOPX
pop HL
pop BC
inc HL
djnz @@LOOPY

ret


Título: Re: Borrar una parte de la pantalla
Publicado por: Tragamanzanas en 01 de Marzo de 2010, 02:16:25 pm
Gracias j4mk3 por la respuesta.

Esta noche lo pruebo, pero una duda que veo a primera vista es, ¿que hay que poner en DE y HL?

Imagino que guardas la pantalla en un buffer que será DE y en HL la posición inicial x1,y1 del cuadrado. ¿Es así?


Título: Re: Borrar una parte de la pantalla
Publicado por: j4mk3 en 01 de Marzo de 2010, 02:23:38 pm
; DE =   Pos. del Buffer Inicial
Aqui ya has de entrar el Offset del buffer es decir ya calculado el (Y*32+X), desde que tile hay que empezar a pintar.

; HL =   Posicio Buffer pantalla
Esto es la Posicion de RAM donde empieza la copia del orden de tiles que volcas a VRAM.


Título: Re: Borrar una parte de la pantalla
Publicado por: SapphiRe_MSX en 01 de Marzo de 2010, 02:54:40 pm
La pregunta que falta es... ¿en qué modo de pantalla?