Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: Kotai en 15 de Noviembre de 2012, 01:35:57 am



Título: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 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.


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: theNestruo en 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 :(

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...


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Imanok en 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.


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 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:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Imanok en 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 ;)

Por cierto... qué fue del "Trail 2" que ya tenías terminado??


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 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:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Imanok en 22 de Noviembre de 2012, 11:21:09 pm
Aunque arranques con CTRL pulsado?


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 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:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Imanok en 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


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 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"????"  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:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Imanok en 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


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: nanochess en 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"????"  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.


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: theNestruo en 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 :D

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).


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 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:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: theNestruo en 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.


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 23 de Noviembre de 2012, 04:53:15 pm
Pues en eso tienes razón, si es un editor hexadecimal lo que apunto allí es el valor ASCII directamente, no el caracter que representa. Voy a ver si hago una prueba.

Saludos.  :griel:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: theNestruo en 23 de Noviembre de 2012, 05:51:54 pm
Más sitios de los que puedes sacar memoria... byte a byte, casi:
  • Agrupando DIMs: cambiando DIM a(b):DIM c(d) por DIM a(b),c(d)
  • Sacando expresiones complejas repetidas a una variable temporal
  • En el caso concreto de expresiones complejas utilizadas como coordenadas en PUT SPRITE, se puede calcular sólo para el primero y utilizar STEP para colocar los demás
  • En el caso concreto de expresiones complejas en los bucles FOR, se puede cambiar FOR I = xx TO xx + yy por FOR I = xx TO I + yy
  • Eliminando la letra de los NEXT
  • Cambiando IF xx <> 0 THEN por IF xx THEN
  • Cambiando IF xx = 0 THEN por IF NOT xx THEN
  • Cambiando IF NOT xx THEN yy ELSE zz por IF xx THEN zz ELSE yy
  • Cambiando estructuras IF xx THEN GOTO yy por IF xx GOTO yy. También cambiando ELSE GOTO zz por ELSE zz
  • Cambiando GOSUB yy:RETURN por GOTO yy
  • Agrupando funciones que se llamen siempre en orden. Si siempre se hace GOSUB xx:GOSUB yy:GOSUB zz le puedes quitar el RETURN a xx y a yy y dejar que llamando a xx se pase por ellas. Con esto además podrías seguir llamando a yy y a zz (¡ojo! a yy sólo se podría seguir llamando si después siempre llamas a zz)
  • No utilizar subrutinas que sólo se llamen una vez; recolocarlas en donde está la llamada. En el caso de que se llamase desde un IF, se puede poner a continuación y que en el ELSE (o en el THEN si el GOSUB estaba en el ELSE) poner un GOTO a la linea siguiente a la subrutina
  • Eliminando parámetros innecesarios. Por ejemplo, si tus sprites ya están con los colores y el patrón correcto, al PUT SPRITE basta con ponerle el plano y las coordenadas
  • Recolocando expresiones para poder eliminar paréntesis. ¡En especial en los IFs!
  • Utilizando SPC(xx) en vez de LOCATE si acabas de escribir en la linea anterior
  • Reducir en lo posible el número de líneas utilizando los dos puntos
...y ya no se me ocurre nada más :D

(supongo que nada de esto dará problemas con X-Basic)


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 23 de Noviembre de 2012, 06:10:54 pm
Madre mía si has sacado cosas, eres el PUTO AMO del Basic.

Algunas cosas de las que comentas como quitar la letra de los NEXT no funciona en X-BASIC, pero el resto seguro que varias las puedo aplicar.
Primero voy a acabar el P.... anda que se me escapa el nombre del remake en 10 lineas, y luego me pongo con el TRAIL2 para publicarlo para la RU.

Saludos  :griel:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Tragamanzanas en 24 de Noviembre de 2012, 11:24:16 am
En este hilo hay explicadas varias formas de optimizar un listado basic, muchas de ellas ya te las ha comentado theNestruo,
http://karoshi.auic.es/index.php?topic=93.0 (http://karoshi.auic.es/index.php?topic=93.0)

De todas formas creo que lo que buscas es reducir el código antes que aumentar la velocidad que para eso usas el X-Basic, y estos dos terminos no siempre estan unidos  :D

Saludos


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 17 de Diciembre de 2012, 12:15:44 pm
Bueno, pues al final he acabado el juego de 10 líneas en Basic: Bubble Dream

Mi intención era poner 3 fondos, uno para cada pantalla del juego pero al no poder cargar un fichero de 128KB con las 4 páginas de VRAM solo he cargado 2 y las 3 fases del juego tienen el mismo fondo.
El juego ya está subido a MRC para el concurso TenLiner: http://www.msx.org/news/translations/en/tenliner-challenge-16-bubble-dream

Os pongo unas capturas:

(http://www.kotai.es/imagenes/noticias/BubDream_0001.png)

(http://www.kotai.es/imagenes/noticias/BubDream_0002.png)

(http://www.kotai.es/imagenes/noticias/BubDream_0003.png)

(http://www.kotai.es/imagenes/noticias/BubDream_0004.png)

(http://www.kotai.es/imagenes/noticias/BubDream_0005.png)


Y un vídeo de como www.pixelsmil.com ha hecho el gráfico del final del juego:

http://www.youtube.com/watch?v=eHUuk-0Uw_s

Seguramente el juego lo continuemos a más de 10 líneas pudiendo añadir más fases con otros fondos, escaleras y obstáculos/plataformas donde las bolas reboten (el juego es un Pang).
Para que el tamaño del juego no sea tan grande por culpa de los fondos me gustaría saber en que direcciones de VRAM se guarda cada una de las 4 pantallas para no tener que grabar a disco los 32KB de cada una, si no lo justo y necesario. ¿ Alguien sabe las direcciones donde se guarda cada cosa (sprites, pantalla visible....) ?

Saludos.  :griel:


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: MsxKun en 17 de Diciembre de 2012, 04:32:01 pm
¿ Alguien sabe las direcciones donde se guarda cada cosa (sprites, pantalla visible....) ?

Saludos.  :griel:


http://www.konamiman.com/msx/msx-e.html#msx2th

Capitulo 4


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: nanochess en 19 de Diciembre de 2012, 01:27:02 am
No he tenido tiempo de probar las participaciones de 10 líneas del msx.org y ahora que vi las imagenes de la tuya me has dejado alelaaaado :)

Mis respetos, ¡qué bonito juego!


Título: Re: Guardar un fichero binario con las 4 páginas VRAM de SCREEN 5
Publicado por: Kotai en 19 de Diciembre de 2012, 09:46:08 am
Gracias.

La verdad es que poner unos buenos gráficos al juego cambia mucho, hasta parece bueno.
Todo el mérito de los gráficos es de Toni PixelsMil que con solo 2 páginas de VRAM ha metido todos los gráficos del juego.

Saludos  :griel: