¡No me carga las Fuentes al pasar de .bas a .tzx!

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
AncientBits
Herbert
Mensajes: 99
Registrado: Sab Sep 30, 2017 10:50 am

¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por AncientBits » Lun Ene 08, 2018 11:28 pm

Chavales, tenéis que ayudarme como sea. Hemos terminado el nuevo juego de Ancient Bits que esta programando con BASin 0.13.

Es un juego tipo Elige tu propia Aventura con muuuucho texto, y le puse unas Fuentes super chulas que el programa te las incluye en el código vía POKE y DATA.


[center]Imagen

Así se ve en el BASin, con el código de las fuentes insertado en el programa...[/center]



Cuando ejecuto el .bas desde el BASin me carga el juego con las fuentes sin problemas, pero al pasar el .bas a .tzx y cargarlo con otros emuladores el juego funciona pero... ¡¡las fuentes no se ven, sólo las fuentes predeterminadas del ZX Spectrum!!

Para pasar .bas a .tzx me voy dentro de BASin a TOOLS --> TAPE CREATOR --> ADD FROM CURRENT PROGRAM --> Y EN PROPERTIES AUTORUN LINE 0

Ohh Dios mío... ¡ayuda!


EDITADO: Como había editado el set de fuentes he probado a usar otras fuentes que vienen en el pack, incluso hacer un programa sólo con el código de las fuentes y un PRINT "Hello World" y lo mismo... el Display del BASin lo muestra correctamente pero el emulador (lo he probado en ZXSpin, SpectrumAnywhere y ZXDS de la NDS) no muestra más que las fuentes predeterminadas del ZX Spectrum.
Imagen

Imagen

Imagen

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por hikoki » Mar Ene 09, 2018 12:47 pm

¿Has pensado en usar FZX ? Aquí te explican cómo : https://www.worldofspectrum.org/forums/ ... ion/44088/

Edito:

La última versión de FZX se encuentra en : https://spectrumcomputing.co.uk/index.p ... 6&id=28171

Avatar de Usuario
AncientBits
Herbert
Mensajes: 99
Registrado: Sab Sep 30, 2017 10:50 am

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por AncientBits » Mar Ene 09, 2018 3:03 pm

Hola hikoki! Sí, mi primera intención fue usar las fuentes FZX, pero no encontré la manera de integrarlas en el programa con BASin.

Cuando ponía el código...

CLEAR 59999: LOAD "Sinclair"CODE 60000: LOAD "FZXdriver"CODE 65000: RANDOMIZE USR 65000

con el driver y las fuentes junto al ejecutable de BASin el programa me decía que encontraba el archivo pero que "but some reason it can do what you are trying to do...". Así que cuando encontré la manera de cargar las fuentes con el BASin y enviar el código BASIC al programa desistí de usar las FZX.

He hecho un nuevo programa "Hello World" con otras fuentes distintas y pasa lo mismo...

Imagen

BASin localiza las nuevas fuentes en la dirección 15616 por defecto... no sé si puede ser eso.

Lo que no entiendo es por qué el Display de BASin (que en teoría muestra lo que se vería en la pantalla de nuestra TV al ejecutar el programa) carga las fuentes (incluso tuve que incluir un aviso previo de CARGANDO FUENTES porque tarda unos 8 segundos y hasta relentiza el efecto flash que le puse al aviso) y una vez cargadas las muestra durante todo el programa y en los emuladores (he probado en 3 distintos) no las carga correctamente en memoria y sólo muestra las fuentes predeterminadas del ZX Spectrum... :(


Probé también a salvar el programa como .z80 y en ese caso si lo salvo en una pantalla de texto sí me muestra las fuentes, pero al continuar el programa la siguiente pantalla ya sale con las fuentes normales. En el .z80 puedo abrir el listado desde el emulador y veo que el código POKE/DATA de las fuentes está ahí... pero no lo lee o lo lee pero no almacena en memoria...

Para ser sinceros, yo envío el código de las fuentes a través de la aplicación de las fuentes del BASin pero no tengo ni idea de qué quiere decir el código. ¿Alguién podría explicarme un poco qué hacen estas líneas? Sin esas líneas los DATA no sirven para nada...

Código: Seleccionar todo

10 RESTORE 11:
FOR F=15616 TO 16383:
READ A:
POKE F,A:
NEXT F

Y luego ya van todas las líneas de DATA...
Imagen

Imagen

Imagen

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por hikoki » Mar Ene 09, 2018 3:48 pm

A ver si otro forero te ayuda con los pokes.

Sobre FZX, no puedo trastear ahora. Lo único que se me ocurre es que cargues el fichero basin dentro de ZX-Editor que es compatible con basin, no deberia haber problemas con ese editor porque es del mismo autor que FZX Editor. También podrías probar con BasinC que es un fork actualizado, o directamente utilizar Bas2Tap.
Suerte y a ver simte ayudan por aquí

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por zup » Mar Ene 09, 2018 6:59 pm

¿Te has fijado que estás pokeando la ROM del Spectrum? En un Spectrum real no pasaría nada por hacerlo, y cuando digo no pasaría nada quiere decir que no se cargaría un nuevo tipo de letra porque la ROM es inalterable. Algunos emuladores (y al parecer BASIN) permiten que se altere la ROM y por eso te funciona ahí.

Por otra parte la memoria de video del Spectrum no está basada en caracteres, por lo que al cambiar de tipo de letra el cambio no es efectivo hasta que imprimes algo (lo que está ya impreso en pantalla no se modifica). De ahí que en el .z80 la pantalla permanezca con el tipo de letra que usas y al imprimir algo salga con el tipo tradicional.

La forma correcta de usar tu tipo de letra es reservar 768 bytes en alguna parte (p.ej.: a partir de 64600) y para asegurarte de que no se machaque usas un bonito CLEAR. Luego cargas tu tipo de letra ahí (con los DATA o con un LOAD CODE) y pokeas la variable del sistema CHARS (23606) con la dirección de tu tipo de letra. El código te quedaría algo así:

Código: Seleccionar todo

8 CLEAR 64599
9 POKE 23606,88: POKE 23607,252
10 RESTORE 11: FOR F=64600 TO 65367: READ A: POKE F,A: NEXT F

... (montones de DATAs)...
Esto funciona, pero se lleva por delante un montón de espacio que puedes usar para cosas mejores. Mi recomendación es generar el tipo de letra y grabarlo en cinta/disco, poniendo un SAVE "font" CODE 64600,768 cuando ya esté hecho. Después, para utilizarlo en tu programa solo tendrías que usar

Código: Seleccionar todo

8 CLEAR 64599
9 POKE 23606,88: POKE 23607,252
10 LOAD "font" CODE 64600
(En todo esto hay un pequeño bug... en los dos casos, los POKEs que le dicen al Spectrum el tipo de letra a usar están puestos antes de generar o cargar el tipo de letra y si algo falla la rutina de impresión no funcionará bien. Para saber a que me refiero, teclea POKE 23606,88: POKE 23607,252 en un emulador y verás lo que pasa)
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por hikoki » Mar Ene 09, 2018 7:15 pm

Mi consejo,
Descarga ZX-Blockeditor y Basinc, haz todo desde el GUI de estos programas. Solo tienes que editar FZX.tap
Abre FZX.tap con BasinC, edita el listado Basic. Obtén un nuevo .tap con Tool->export.
Abre el nuevo tap con ZX-Blockeditor, sustituye la pantalla de carga por la tuya, borra las fuentes que no utilices.
Última edición por hikoki el Mié Ene 10, 2018 1:43 pm, editado 1 vez en total.

Avatar de Usuario
AncientBits
Herbert
Mensajes: 99
Registrado: Sab Sep 30, 2017 10:50 am

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por AncientBits » Mar Ene 09, 2018 11:08 pm

Pues efectivamente ZUP... el BASin me estaba enviando por defecto las fuentes a una dirección en la ROM...

¿Por qué lo hicieron así sabiendo que esos programas luego van a ejecutarse en otros emuladores o máquina real? ¿Les gusta ver sufrir a la gente?

He intentado meterlo en otra dirección fuera de la ROM, haciendo el CLEAR como tú dices pero se alteran las letras (por ejemplo el espacio me pone un "?", algunas fuentes especiales desaparecen y se mantienen las básicas, etc.).

Creo que voy a coger un .bas del programa que tengo guardado antes de meter las fuentes y lo abriré con una versión más nueva del BASin (esa Fork que habéis dicho) y a ver si ahí me pone las fuentes fuera de la ROM en algún sitio seguro...

Muchas gracias, ZUP e hikoki, aunque no haya podido solucionarlo aún, el saber por qué pasaba ya es un alivio...


P.D.: 9 POKE 23606,88: POKE 23607,252

¿Por qué el número 88, ZUP? Entiendo que 23606 es la dirección de los caracteres pero no entiendo el 88 ni el 252...


EDITADO:

Ahh... vale, vale... ¿por esto que sale en el capítulo 25 del manual, no?

POKE n,v-256*1NT (v/256)
POKE n+1,lNT (v/256)
Imagen

Imagen

Imagen

Avatar de Usuario
AncientBits
Herbert
Mensajes: 99
Registrado: Sab Sep 30, 2017 10:50 am

Re: ¡No me carga las Fuentes al pasar de .bas a .tzx!

Mensaje por AncientBits » Vie Feb 02, 2018 4:59 pm

Hola, como ya he comentado en otro hilo ya pudimos terminar Vindius - The Videogame con las fuentes personalizadas con BASin. Voy a poner el proceso por si alguien se encuentra en la misma tesitura...


Imagen

COMO SE VE AQUÍ EN BASin SE VEÍA PERFECTAMENTE PERO LUEGO EN EMULADORES NO... :?


El gran problema que hubo desde el principio es que usaba una versión antigua de BASin que me daba un error al cargar el archivo de las fuentes. El único modo era seleccionar primero TOOLS --> GRAPHIC/SPRITE EDITOR --> GRAB --> FROM CURRENT CHARS y luego ya me permitía cargar las fuentes.

Pero al hacer esto, me guardaba las fuentes en una dirección de la ROM (otros editores o emuladores no permiten hacer esto, pero casualidades de la vida, BASin sí permite editar la ROM).

Una vez percatado de esto gracias a los usuarios ZUP (de este foro) y rmartins (de ZXDEVS17), me indicaron el modo correcto de hacerlo...

Código: Seleccionar todo

8 CLEAR 64599
9 POKE 23606,V-256*INT (V/256) 
POKE 23606+1,INT (V/256)
10 RESTORE 11: FOR F=64600 TO 65367: READ A: POKE F,A: NEXT F

... (montones de DATAs)...
* Siendo V la dirección de la RAM donde queremos pokear las fuentes (por ejemplo 60000, 64000, etc. cuanto más alta mejor para "alejarse" de las direcciones de memoria donde se aloja nuestro programa).


Por supuesto, como mi programa ocupaba casi la totalidad de la memoria disponible, por mucho que pusiera una dirección alta (64000 por ejemplo), me solapaba el código del mi programa y se colgaba.

Finalmente pude dejarles hueco ahí al final pero otra vez problemas. Las fuentes no se veían correctamente (las letras salían intercambiadas, espacios en blanco, etc.), daba igual la dirección que les pusiera.

Entonces lo que hice es, poner la dirección 64000 y cargar el texto (que insisto, salía alterado). Una vez hecho eso, me iba de nuevo a TOOLS --> GRAPHIC/SPRITE EDITOR --> GRAB --> FROM CURRENT CHARS, saliendo en el casillero de las fuentes del BASin las fuentes alteradas y entonces CARGABA DE NUEVO EL ARCHIVO DE LAS FUENTES, guardándomelas así en la dirección donde están las fuentes alteradas.

Ahí volvía a pedirle al BASin que me enviara el código de las fuentes y... ¡voilá!

Imagen

* Al fijarme en la nueva dirección que me daba el BASin ahora sí con las fuentes correctas, observo que la dirección de destino la ha cambiado a 64255


1 CLS : PRINT '' LOADING FONTS":
PAUSE 500

2 POKE 23606,64000-256*INT (64000/256):
POKE 23607,INT (64000/256)

3 RESTORE 4:
FOR f=0 TO 7:
READ a$:
FOR g=1 TO LEN a$ STEP 2:
POKE 64255+(g/2)+(f*100),(16*( CODE (a$(g))-48-(7 AND a$(g)>"9")))+ CODE (a$(g+1))-48-(7 AND a$(g+1)>"9"):
NEXT g:
NEXT f

4 DATA "0000000000000000180C1C180810300..."

5 DATA "0000000000000000180C1C180810300..."

(montones de DATAs)[/b]


Ahora sí, fuentes personalizadas almacenadas en la RAM (y no en la ROM) pudiéndose visualizar perfectamente en cualquier ordenador.

Pues eso, un poco lioso con BASin pero queda muy bien. Gracias a los que me ayudasteis a resolver esto, estáis en los créditos del juego... :wink:
Imagen

Imagen

Imagen

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados