Karoshi MSX Community
05 de Julio de 2021, 07:24:19 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] 2
  Imprimir  
Autor Tema: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5  (Leído 9649 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« : 15 de Noviembre de 2012, 01:35:57 am »

Hola.
Estoy intentando grabar en un solo fichero binario el contenido de las 4 páginas de VRAM más los sprites definidos, pero no se las direcciones de la VRAM de un MSX2 y si intento copiar los 128KB da un error de "Overflow"

Lo que hago es:
Código:
SCREEN 5,2,0:
SET PAGE 3,3:
BLOAD"3.SC5",S:
SET PAGE 2,2:
BLOAD"2.SC5",S:
SET PAGE 1,1:
BLOAD"1.SC5",S:
SET PAGE 0,0:
BLOAD"0.SC5",S:

definir sprites

BSAVE"A:GRAFICOS.BIN",0,&h1FFFF,S

pero con la dirección &h1FFFF da un Overflow.
He probado a copiar solo 64KB, pero luego cuando cargo el fichero BLOAD"GRAFICOS.BIN",S las página 2 y 3 están vacías.

¿ Hay alguna forma de grabar los 128KB en un único fichero ?
¿ y grabar un fichero con solo las zonas de memoria que interesan (dejando espacios de memoria) de forma que en 64KB tenga las 4 páginas ?
En MSX1 una página más los sprites ocupa 16KB. ¿ En MSX2 las 4 páginas ocupan 16*4=64KB, o debido a la tabla de colores cada página ocupa más de 16KB ?

Gracias.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #1 : 16 de Noviembre de 2012, 12:09:51 am »

Supongo que el problema, más que guardar las direcciones >&HFFFF de la VRAM, es poder hacerlo en un único fichero.

La verdad es que no tengo mucha experiencia con el BASIC ni la VRAM del MSX2, pero algunas cosillas que se me ocurren:

¿BLOAD,S acepta parámetro offset? Aunque con esto lo que se podría llegar a solucionar es lo de cargar en la parte alta de la VRAM, pero no lo del guardado.

¿Se podrían concatenar los ficheros, modificando la cabecera del primero y eliminando la de los siguientes, para que al cargarlo alcanzara esas páginas altas?
Aunque esto me hace pensar en otra cosa: que la cabecera de los binarios sólo caben direcciones entre &H0000 y &HFFFF; por lo que o hay algo que se me escapa, o efectivamente no pueden operar más allá de los primeros 64KB de VRAM Sad

Y una última idea con otro enfoque diferente. Depende de cómo tengas organizadas las páginas, a lo mejor puedes intentar reorganizarlo para que te quepa todo en las dos primeras (que entiendo que son las que se guardan con los primeros 64KB). Algo así como lo que decías de "guardar sin huecos", pero hecho a mano. Y luego trabajar con alguna de las dos últimas páginas para lo que habitualmente utilizarías la 0.

A ver si alguien que se haya pegado más con el BSAVE,S te puede dar más pistas...
En línea

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #2 : 17 de Noviembre de 2012, 04:39:16 pm »

Yo tampoco soy un experto en el tema, pero por lo poco que sé, en MSX2 las páginas son de 32Kb (incluye los gráficos de la página propiamente dicha, la paleta, definición de sprites, colores y tal...)

Puede que me equivoque, pero dudo que haya alguna forma de cargar los 128Kb del tirón (salvo haciéndote una rutina de carga propia)... así que yo también voto porque te reorganices la VRAM para meterlo todo en dos páginas y luego usar copy's para mover lo que necesites donde lo necesites.
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #3 : 19 de Noviembre de 2012, 10:05:45 am »

Gracias a los dos. Al final me voy a olvidar de las 4 páginas y usaré solo 2, una completa y la otra a tiles para montar con COPY.

A ver si para la RU de barcelona puedo ir y os enseño el juego.

Saludos.  Griel
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #4 : 22 de Noviembre de 2012, 10:58:45 pm »

Si no recuerdo mal, la ru es el día 15 y el deadline del concurso es el día 17... así que lo deberías tener ya más que terminado para la ru Wink

Por cierto... qué fue del "Trail 2" que ya tenías terminado??
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #5 : 22 de Noviembre de 2012, 11:19:50 pm »

El TRAIL2 aprovecharé y lo "publicaré" ese mismo día de la RU.  Al añadir los sonidos, en un TurboR sigue funcionando bien pero en un MSX me dice OUT OF MEMORY, tengo que cambiar algunos CHR$() por su código ASCII dentro de los PRINT para ahorrar espacio y que vuelva a funcionar.

Saludos.  Griel
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #6 : 22 de Noviembre de 2012, 11:21:09 pm »

Aunque arranques con CTRL pulsado?
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #7 : 23 de Noviembre de 2012, 01:54:10 am »

Creo que con CTRL va bien, pero quiero que se pueda arrancar sin pulsar nada, y puedo eliminar muchos carácteres del código fuente cambiando por ejemplo un PRINT CHR$(96) por PRINT "a"

Saludos  Griel
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #8 : 23 de Noviembre de 2012, 08:15:30 am »

Si haciendo eso lo consigues, estupendo. Supongo que ya le pasas el Nestorpreter para eliminar espacios, comentarios y tal
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #9 : 23 de Noviembre de 2012, 10:32:35 am »

Si, claro uso el Nestorpreter para, primero entender mejor el código y luego por lo que ahorras en carácteres de código.
El problema es que el juego es en SCREEN1 y los fondos se pintan con PRINT. Hasta el caracter 126 más o menos lo puedo pintar bien con los PRINT"abcde..." pero a partir del 128 ya no puedo representar esos carácteres en el editor de texto de Windows y eso que he probado un montón de editores que permiten cambiar el CODE PAGE, pero con ninguno consigo que lo que escribo en el editor luego salga en el MSX.
Lo que he pensado hacer es, una vez pasado el Nestorpreter abrir el código fuente desde el MSX real y bucar en el código donde hago PRINT CHR$(174)+CHR$(175)+CHR$(176)+CHR$(177)... por PRINT"Huh?"  que es mucho más corto y además tengo unos cuantos de esos. El problema de esto es que si luego tengo que hacer alguna actualización me toca volver a hacerlo otra vez.

Saludos.  Griel
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #10 : 23 de Noviembre de 2012, 12:30:04 pm »

Ya sé de qué va el tema, ya... me estuve peleando con ello cuando hice la primera versión del Traffic Jam en basic.

Lo que puedes hacer, para no tener que volver a tocar lo de los PRINT en cada actualización es separar la rutina que tiene los PRINT en un fichero diferente y luego unirlos con un MERGE desde el basic.

Otra opción es usar un editor de texto en el MSX, claro. Yo usaba el AKID
En línea
nanochess
Karoshi Lover
***
Mensajes: 141


Programando algo buenísimo :)


WWW
« Respuesta #11 : 23 de Noviembre de 2012, 02:05:24 pm »

Si, claro uso el Nestorpreter para, primero entender mejor el código y luego por lo que ahorras en carácteres de código.
El problema es que el juego es en SCREEN1 y los fondos se pintan con PRINT. Hasta el caracter 126 más o menos lo puedo pintar bien con los PRINT"abcde..." pero a partir del 128 ya no puedo representar esos carácteres en el editor de texto de Windows y eso que he probado un montón de editores que permiten cambiar el CODE PAGE, pero con ninguno consigo que lo que escribo en el editor luego salga en el MSX.
Lo que he pensado hacer es, una vez pasado el Nestorpreter abrir el código fuente desde el MSX real y bucar en el código donde hago PRINT CHR$(174)+CHR$(175)+CHR$(176)+CHR$(177)... por PRINT"Huh?"  que es mucho más corto y además tengo unos cuantos de esos. El problema de esto es que si luego tengo que hacer alguna actualización me toca volver a hacerlo otra vez.

Saludos.  Griel
Hay un truco para esto, pones los PRINT claramente identificables como PRINT "XXXXXX", después salvas el programa BASIC en binario (no como ASCII), usas un editor hexadecimal para buscar los XXXXX y los reemplazas con los caracteres que quieres. No se si en MSX haya disponible un editor hexadecimal de archivos, pero igual puedes pasar el archivo a un PC para la edición.
En línea

Mira mis juegos MSX/Colecovision/Atari/Intellivision http://nanochess.org/retro_es.html, y sígueme en Twitter http://twitter.com/nanochess
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #12 : 23 de Noviembre de 2012, 03:35:04 pm »

Si las cadenas se cargan antes de entrar al bucle principal del juego (por el tema de la velocidad), tienes más posibilidades:
- Utilizar los ASCII 32..127 y tener un bucle que recorra la cadena sumando un valor fijo a cada caracter. Por ejemplo, si las letras mayúsculas son letras y las minúsculas ya son gráficos, sumando 32 las mayúsculas serían gráficos y las minúsculas los caracteres con ASCII >=128
- Hacerlas con DATAs con los códigos ASCII, aunque tendrías que tener varias para que la ganancia en tokens (4 vs 1: CHR$ ( ) + vs ,) compense el bucle
- Igual al anterior, pero teniendo un archivo binario y leyéndolas con PEEKs en vez de con READ/DATA.
- Igual al anterior, pero utilizando la VRAM y leyéndolas con VPEEKs.
- Y otra opción más sería utilizar toda la RAM desde el BASIC. Esto es: abrir un MEMDISK, llevar allí un fichero con las cadenas, y utilizar accesos "a disco" para leer las cadenas correspondientes Cheesy

De todos modos, si estás tan tan justo, quizá habría que mirar si el fichero de código se puede partir en dos (menús por un lado y juego por otro).
En línea

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #13 : 23 de Noviembre de 2012, 03:58:03 pm »

Gracias a todos por vuestras respuestas.
Lo de hexadecimal, para hacerlo en PC me quedo igual, porque los carácteres > 128 que grabas en el PC no se corresponde con el que lee el MSX.

Lo de sumar un valor fijo a la cadena de ASCII está bien, pero para ello necesitaría más memoria para añadir esas líneas con el bucle y la suma de un valor fijo, y justamente quiero quitar los CHR$() para liberar espacio.

Por ahora creo que la solución que más memoria ahorraré es la de cambiar esos carácteres en el MSX una vez pasado ya el Nestorpreter.

Saludos.  Griel
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #14 : 23 de Noviembre de 2012, 04:48:43 pm »

Espera, que a lo mejor nos estamos complicando "de más"... lo que puedes hacer es abrir con un editor hexadecimal el fichero que editas en el PC y poner el byte exacto en las posiciones que quieres. De esta forma, al abrirlo en el PC verás el caracter que no es (ejemplo chorra: à), pero al pasarlo al MSX saldrá el caracter que sí que es (ejemplo chorra: á).
Es decir, con el editor hexadecimal no vas a poner caracteres que luego se guarden con tal o cual encoding o código de página en el fichero; vas a poner el byte (el código ASCII) que quieres en en el MSX, aunque en el editor de PC cuando lo abras se vea incorrecto.
En línea

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
Páginas: [1] 2
  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!