Cargando nueva fuente de caracteres

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Cargando nueva fuente de caracteres

Mensajepor MoteroV4 » Jue 12 Sep , 2019 1:54 am

Hola, buenas.
Acabo de restaurar y devolver a la vida mi viejo Amstrad 6128 tras 19 años guardado en el trastero e inundado, y además le he puesto una 2ª disketera externa 3.5". Todo perfecto. Si no lo digo reviento jajaja xDDDD. Estoy como un niño con Amstrad nuevo :D :happybday: :happybday:

Al grano, he recuperado un videojuego hecho por mí en Basic cuando tendría unos 15 años y me gustaría ampliarlo. Funciona perfectamente pero sin la disketera externa 3.5" o con ella puesta pero cargando desde la de 3" interna.

Me da "Syntax error" cuando lo ejecuto desde la ext. de 3.5", tanto funcionando como A: primaria (jumper anulando la otra) o como B:. Tampoco funciona si ejecuto el DSK en Winape u otro emulador (tienen 2 disketeras).

Así empieza el programa y el error me lo da en la línea 30:
10 SYMBOL AFTER 32
20 h=HIMEM+1
30 LOAD"fuente.fnt",h

Si le pongo un REM en la línea 30, va bien pero con la fuente de los caracteres típicos.

Intento cargar una tabla de caracteres definidos por el usuario, por encima del area destinado a Basic y al cargar posteriormente el archivo de fuentes da error de sintaxis!

Supongo que la ROM de disco, con la unidad externa está metiendo más datos en el area de datos superior a Himem y estaré cargando la tabla en el sitio equivocado...

Estoy desempolvando libros y estoy perdido ¿Alguna idea?

Gracias y un saludo

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: Cargando nueva fuente de caracteres

Mensajepor ronaldo » Jue 12 Sep , 2019 8:33 pm

Hola Motero,

He estado haciendo unas pruebas y tu código no tiene ningún problema. He creado una fuente de pega (sólo genera códigos de barras raros) y he usado tu programa para cargarla en un proyecto de CPCtelera. Después de probar con WinAPE en todas las versiones de CPC y también en RVM, no he encontrado ningún fallo. Ni siquiera probando a pasarme del número de bytes para que sobreescriba variables del firmware obtengo un Syntax Error sin que queden los caracteres redefinidos.

Mi conclusión es que tu fichero font.fnt no tiene cabecera AMSDOS y al intentar cargarlo con LOAD te da ese syntax error porque no puede cargarlo. Creo que es la única posibilidad que queda.

Adjunto te dejo el proyecto de CPCtelera 1.5 con el DSK ya generado por si quieres probarlo.

Un saludo.
fontload.zip
(21.87 KiB) Descargado 34 veces

Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Re: Cargando nueva fuente de caracteres

Mensajepor MoteroV4 » Jue 12 Sep , 2019 11:48 pm

Muchas gracias Ronaldo por responder. He hecho varias pruebas:
1) He grabado en un diskete 3.5" (cara 2) el dsk que me mandas, con el CPCDiskXP v2.5.1.
2) Lo cargo además en el WinApe, OK.
3) Meto el diskete 3.5" en el Amstrad físico y no va: el loader.bas tuyo al ejecutarlo me dice:
"Line too long"
En el DSK Editor veo que lo detecta como tipo Ascii y no como Basic, por tanto no tiene Address... También lo detecta así Discology.
Lo extraño es que Winape sí lo ejecuta.
4) Si tecleo esas 3 líneas de programa en el 6128 físico y lo grabo como loader2.bas funciona sin problemas en 3.5".
5) Si copio mi fuente en la cara 2 del diskete 3.5" ext. ahora sí funciona.
6) La copia de mi programa entero que exporto de nuevo con CPCDiskXP a DSK ahora sí funciona en WinApe.

Es muy posible que el diskete o mi disketera 3.5" pudiera estar fallando aunque no dé errores de lectura. Al copiarlo a otra cara ya funciona el fichero de la fuente (no se me había ocurrido), por tanto huele a fallo HW no de SW. Probaré este finde con otras 2 disketeras que tengo y limpiaré tb la del WXP.

Muchas gracias y un saludo.

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: Cargando nueva fuente de caracteres

Mensajepor ronaldo » Vie 13 Sep , 2019 12:09 pm

Lo que te sucede con mi fichero BAS es normal, porque es un fichero ASCII. Amstrad puede leer ficheros BAS en ASCII. El problema que debes haber tenido es que si lo añades o copias con alguna utilidad que cambie los finales de línea, te saldrá el "Line Too Long". Los finales de línea en Amstrad son como los de MSDOS (CRLF, caracteres 10 y 13). Los finales de línea en sistemas operativos UNIX/LiNuX o BSD/MacOSX son distintos (LF, carácter 10).

Por eso, si tecleas el código a mano y lo guardas, funciona, porque lo guardas como fichero BAS binario. Con ese no hay problema, salvo que no puedes editarlo en un editor de PC :).

Por lo demás, sí, si te falla el disco de alguna manera concreta, puede que lo que lea BASIC esté erróneo, o que se haya salvado mal en el disco, y eso dé lugar al "Syntax Error", del mismo modo que si no tuvieras cabecera AMSDOS.

Todos estos detalles los hemos explicado en la serie de vídeos #AmstradGameDevChallenge, ya que estamos programando en BASIC para Amstrad desde el PC con un editor de texto moderno. Ahí puedes verlo con más detalle.

Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Re: [SOLUCIONADO] Cargando nueva fuente de caracteres

Mensajepor MoteroV4 » Sab 14 Sep , 2019 7:47 am

Lo que te sucede con mi fichero BAS es normal, porque es un fichero ASCII. Amstrad puede leer ficheros BAS en ASCII. El problema que debes haber tenido es que si lo añades o copias con alguna utilidad que cambie los finales de línea, te saldrá el "Line Too Long". Los finales de línea en Amstrad son como los de MSDOS (CRLF, caracteres 10 y 13). Los finales de línea en sistemas operativos UNIX/LiNuX o BSD/MacOSX son distintos (LF, carácter 10).

Por eso, si tecleas el código a mano y lo guardas, funciona, porque lo guardas como fichero BAS binario. Con ese no hay problema, salvo que no puedes editarlo en un editor de PC :).

Por lo demás, sí, si te falla el disco de alguna manera concreta, puede que lo que lea BASIC esté erróneo, o que se haya salvado mal en el disco, y eso dé lugar al "Syntax Error", del mismo modo que si no tuvieras cabecera AMSDOS.

Todos estos detalles los hemos explicado en la serie de vídeos #AmstradGameDevChallenge, ya que estamos programando en BASIC para Amstrad desde el PC con un editor de texto moderno. Ahí puedes verlo con más detalle.
Pues no sabía lo de ejecución ASCII, gracias por aclarar, y confirmo grave problema de disketera, ya deja los discos marcados como los anillos de Saturno. Problema mecánico. Con otra he vuelto a crear tu DSK y va perfecto.
LO que no entiendo es que se supone que se hace una comprobación CRC a los paquetes de datos. El diskete murió justo cuando estaba copiando a mano en papel los bytes del programa Loader.bas (terminaba con CR-LF y fallaba) con el Explorador de Discology y los compruebo con el de ahora y son idénticos. Pero no muestra la parte AMSDOS, solo los bytes en Hexa del ASCII, quizás esa parte estaba corrupta.

Pues sí, vi algo del 1er #AmstradGameDevChallenge y lo tengo en marcadores, me apunto en cuanto termine el curso de ensamblador.

Saludos

Avatar de Usuario
Paquito
Me voy lanzando
Me voy lanzando
Mensajes: 50
Registrado: Dom 22 Sep , 2019 11:57 pm

Re: Cargando nueva fuente de caracteres

Mensajepor Paquito » Jue 03 Oct , 2019 10:36 am

Cómo se crea un archivo fnt?

Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Re: Cargando nueva fuente de caracteres

Mensajepor MoteroV4 » Jue 03 Oct , 2019 2:45 pm

Cómo se crea un archivo fnt?
Pues no sabría decirte con cuál programa se hizo la mía, porque la fuente que tengo es un simple estilo "Mode 0" suavizado que me pasaron en clases de informática de los '80. Aquí en la sección de utilidades hay algunos programas para crear fuentes, como el ESP Char de ESP Soft o el Font Editor de Hisoft, imagino que cada cual con su propia extensión.

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: Cargando nueva fuente de caracteres

Mensajepor ronaldo » Jue 03 Oct , 2019 7:32 pm

Si puedes cargar la fuente con LOAD directamente en HIMEM, que es donde están las definiciones de caracteres de usuario, entonces el fichero no es más que una imagen binaria de esa zona de memoria. Además, en BASIC no tienes ningún programa que lea o parsee fuentes (lógicamente), a no ser que te lo hagas tú. Como en la mayoría de los casos lo que quieres como fuente es redefinir los caracteres para poder usar cosas simples como PRINT, la mayoría de los programas terminan produciendo básicamente las definiciones de los caracteres en binario crudo, para que las cargues con LOAD. De hecho, producir un fichero así es tan fácil como definir los caracteres y hacer SAVE de esa zona de memoria.

El hecho de que la extensión sea .fnt o .luismiguel no quiere decir nada en este caso, porque solo es para identificar lo que es, y no porque defina un tipo de formato, ya que no es más que un binario.

Poliyo
Keeper of The Forum
Keeper of The Forum
Mensajes: 909
Registrado: Jue 12 May , 2016 10:07 pm
Ubicación: Valencia

Re: Cargando nueva fuente de caracteres

Mensajepor Poliyo » Jue 03 Oct , 2019 8:14 pm

Cuál sería el primer carácter?
a?
? (Un espacio)
Sigue el orden de caracteres ASCII?

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: Cargando nueva fuente de caracteres

Mensajepor ronaldo » Jue 03 Oct , 2019 8:22 pm

Cuál sería el primer carácter?
a?
? (Un espacio)
Sigue el orden de caracteres ASCII?
Siguiendo la lógica de lo comentado más arriba, el primero sería el que tú hayas indicado cuando pones SYMBOL AFTER. Si pones SYMBOL AFTER 65, el primero será la "A" mayúscula. Si pones SYMBOL AFTER 97, el primero será la "a" minúscula. LOAD sólo carga datos crudos en esa zona de memoria. Lo que esa zona significa y el tamaño que tiene lo controlas desde BASIC con el SYMBOL AFTER.

De hecho, si tuvieras un binario cuyos primeros 8 bytes definen la "A" (y, supongamos, todos los demás caracteres en órden), hicieras SYMBOL AFTER 64 y lo cargaras, tendrías todas las definiciones desplazadas 1 carácter, por lo que cuando pusieras PRINT "ABCDE" saldría "BCDEF".


¿Quién está conectado?

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


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic