Karoshi MSX Community
05 de Julio de 2021, 06:58:34 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Borrar una parte de la pantalla  (Leído 4162 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Tragamanzanas
Karoshi Fan
**
Mensajes: 71


« : 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  Smiley 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.
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #1 : 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
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
Tragamanzanas
Karoshi Fan
**
Mensajes: 71


« Respuesta #2 : 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í?
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #3 : 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.
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
SapphiRe_MSX
Visitante
« Respuesta #4 : 01 de Marzo de 2010, 02:54:40 pm »

La pregunta que falta es... ¿en qué modo de pantalla?
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!