Página 1 de 1

Comprimir pantallas de carga

Publicado: Lun, 25 Feb 2013, 02:52
por NeilParsons
¿Qué utilidad ó rutina en C/M usáis para comprimir los datos de las pantallas de carga en vuestros juegos, mojones míos? :jias:

Es decir, yo tengo un SCREEN$ y quiero reducir su tamaño en cinta a la menor cantidad posible de bytes. Me supongo que en los datos comprimidos de la pantalla hay incluida una rutina que la descomprime totalmente y que al cargar los datos desde cinta, una vez están ya en memoria, haga ejecutar esa rutina para desplegar la pantalla gráfica al instante.

Tengo algo en la mollera... y no es caspa... :lol:

Re: Comprimir pantallas de carga

Publicado: Lun, 25 Feb 2013, 09:48
por na_th_an
Lo más sencillo (y lo que hacemos nosotros para las pantallas de carga) es usar el compresor que viene en el BMP2SCRExt, que te mete todo en un bloque en 50000 y con un RANDOMIZE USR 50000 lo descomprimes. No comprime demasiado, pero bueno, siempre reduce bastante. El BMP2SCRExt tiene una opción por ahí que te genera un TAP con el bloque comprimido a partir del SCR que le hayas cargado.

Para comprimir a saco lo suyo es usar aplib o exomizer y tal, pero es más lío. Nosotros somos muy vagos para eso.

Re: Comprimir pantallas de carga

Publicado: Lun, 25 Feb 2013, 18:23
por NeilParsons
Oido cocina... mucho zankyu! :corchoneta:

De hecho ya tengo esta utilidad en el ordenador, pero no había visto esta opción de comprimir los datos de la pantalla. Ahora que lo sé, mejor para mí. 8-)

Re: Comprimir pantallas de carga

Publicado: Dom, 10 Mar 2013, 13:48
por jevilon
Esto se puede hacer para que lo comprima donde yo quiera y no solo en 50000????
Asi podria usar esta rutina para meter varias pantallas en ram3 y descomprimir la que yo quiera en un momento dado

Por cierto desde ZXbasic se puede llamar a una direccion directamente?

Edito:
Me respondo a mi mismo, cargo el tzx en 32768, cargo reubica, pokeo 25000,3, ejecuto reubica en 25002, cargo mi juego

$this->bbcode_second_pass_code('', 'Sub pantallazo1 ()

Asm
ld a, 3
ld b, 16
or b
ld bc, $7ffd
out (c), a
call 49152
ld a, 16
ld bc, $7ffd
out (c), a
End Asm
End Sub')

y luego llamo a pantallazo1 ()

funciona perfecto

Re: Comprimir pantallas de carga

Publicado: Dom, 10 Mar 2013, 17:48
por na_th_an
1. Aunque se genere en 50000, son reubicables. Si lo cargas en 46532 (por poner), un RANDOMIZE USR 46532 la descomprimirá. De todos modos hay mejores métodos que comprimen mucho mejor y son más usables. Espérame a mañana y te explico como usar appack.

2. Así:

$this->bbcode_second_pass_code('', 'Asm
Call 50000
End Asm')

Re: Comprimir pantallas de carga

Publicado: Dom, 10 Mar 2013, 23:08
por jevilon
Perfecto, de todas formas con esto me valdria, para hacer un par de pantallazos para instrucciones, el menu y el final

Re: Comprimir pantallas de carga

Publicado: Lun, 11 Mar 2013, 08:16
por na_th_an
Ahí va:

viewtopic.php?f=12&t=1122

Usar esto combinándolo con paginación es bastante fácil, podemos añadir esta función:

$this->bbcode_second_pass_code('', 'Sub aplibUnpack128 (page as uByte, source as uInteger, destination as uInteger)
Poke uInteger @apDataPool, source
Poke uInteger 2 + @apDataPool, destination
Poke 1 + @aplib_unpack_128, page
aplib_unpack_128:
Asm
di
ld a, 3
ld b, 16
or b
ld bc, $7ffd
out (c), a

ld hl, (ap__source)
ld de, (ap__destination)

push ix ; Need this. ZX Basic doesn't like that we fiddle with IX.
push iy
call depack
pop iy
pop ix ; Need this. ZX Basic doesn't like that we fiddle with IX.

ld a, 16
ld bc, $7ffd
out (c), a
ei
End Asm
End Sub')

Y meter los binarios que necesitemos en otra página de RAM.

Por cierto, esto viene muy bien:

$this->bbcode_second_pass_code('', 'copy /b cosa1.bin + cosa2.bin + cosa3.bin RAM3.bin')

;)

Re: Comprimir pantallas de carga

Publicado: Lun, 11 Mar 2013, 09:49
por jevilon
Ñam ñam rico rico y con fundamento... A ver si soluciono un problema al cual no le veo solución... Y terminó ya el juego...

na_th_an cuando puedas te pasas por el hilo de la paginacion en speccy... explico ahi un poco mi problema... y es que por mas que lo miro... no le veo logica... graciassss