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
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
Cargando nueva fuente de caracteres
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: Cargando nueva fuente de caracteres
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.
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.
Re: Cargando nueva fuente de caracteres
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.
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.
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: Cargando nueva fuente de caracteres
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.
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.
Re: [SOLUCIONADO] Cargando nueva fuente de caracteres
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 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.
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
Re: Cargando nueva fuente de caracteres
Cómo se crea un archivo fnt?
Re: Cargando nueva fuente de caracteres
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.Cómo se crea un archivo fnt?
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: Cargando nueva fuente de caracteres
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.
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.
Re: Cargando nueva fuente de caracteres
Cuál sería el primer carácter?
a?
? (Un espacio)
Sigue el orden de caracteres ASCII?
a?
? (Un espacio)
Sigue el orden de caracteres ASCII?
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: Cargando nueva fuente de caracteres
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.Cuál sería el primer carácter?
a?
? (Un espacio)
Sigue el orden de caracteres ASCII?
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 |