CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Eres un hacha, otro día te daré más la lata
Buenas noches.
Buenas noches.
Re: RUNADDR is not set
Hola, tengo un problema con CPCTELERA. Me da error de compilación desde ayer, habiendo cerrado el día anterior perfectamente. Aunque cree el nuevo proyecto desde cero y copie el main.h.s y el main.s a mano, renombre el proyecto en "build_config.mk", compruebe permisos, etc, me da error y pide el siguiente archivo "binaryAddresses.log":
Creating Cassette file 'moto02.cdt'
**!!ERROR!!**: RUNADDR is not set. Aborting.
/home/enrib4/amstrad/cpctelera/cpctelera//cfg/global_main_makefile.mk:72: fallo en las instrucciones para el objetivo 'obj/binaryAddresses.log'
make: *** [obj/binaryAddresses.log] Error 1
Si creo a mano dicho archivo "binaryAddresses.log", luego siguen errores pidiendo los inexistentes .cdt, .dsk y .sna de la compilación, porque no los crea en la compilación, fallando.
He reinstalado CPCTelera, bajo Ubuntu Linux en VirtualBox y todo va igual.
¿Alguna idea? Gracias
Creating Cassette file 'moto02.cdt'
**!!ERROR!!**: RUNADDR is not set. Aborting.
/home/enrib4/amstrad/cpctelera/cpctelera//cfg/global_main_makefile.mk:72: fallo en las instrucciones para el objetivo 'obj/binaryAddresses.log'
make: *** [obj/binaryAddresses.log] Error 1
Si creo a mano dicho archivo "binaryAddresses.log", luego siguen errores pidiendo los inexistentes .cdt, .dsk y .sna de la compilación, porque no los crea en la compilación, fallando.
He reinstalado CPCTelera, bajo Ubuntu Linux en VirtualBox y todo va igual.
¿Alguna idea? Gracias
Re: RUNADDR is not set
Me respondo a mí mismo por si alguien se encuentra con este error tan extraño y sin pistas, al intentar compilar en CPCtelera:Hola, tengo un problema con CPCTELERA. Me da error de compilación desde ayer, habiendo cerrado el día anterior perfectamente. Aunque cree el nuevo proyecto desde cero y copie el main.h.s y el main.s a mano, renombre el proyecto en "build_config.mk", compruebe permisos, etc, me da error y pide el siguiente archivo "binaryAddresses.log":
Creating Cassette file 'moto02.cdt'
**!!ERROR!!**: RUNADDR is not set. Aborting.
/home/enrib4/amstrad/cpctelera/cpctelera//cfg/global_main_makefile.mk:72: fallo en las instrucciones para el objetivo 'obj/binaryAddresses.log'
make: *** [obj/binaryAddresses.log] Error 1
Si creo a mano dicho archivo "binaryAddresses.log", luego siguen errores pidiendo los inexistentes .cdt, .dsk y .sna de la compilación, porque no los crea en la compilación, fallando.
He reinstalado CPCTelera, bajo Ubuntu Linux en VirtualBox y todo va igual.
¿Alguna idea? Gracias
**!!ERROR!!**: RUNADDR is not set. Aborting.
Tras 1 semana atascado, lo he solucionado al cambiar de nombre la etiqueta de una función de mi programa, de nombre "init::" la cual colisiona con alguna otra que no es mía. También funciona al dejar de ser global, quitando uno de los dobles 2 puntos (:), o anteponiendo un guión bajo delante.
El caso es que hace días moví de sitio 3-4 cosas al final de mi programa, a una nueva función para inicialización y despejar así el "main::" y no recompilé (mal hecho). Al día siguiente ni me acordaba.
Al solucionarlo, en principio pensaba que quizás el problema fuera que existieran palabras reservadas que colisionen en SDCC que no se podrían utilizar como etiquetas, las cuales o no están documentadas, o no las encontré en la búsqueda del Manual SDCC en PDF.
O quizás sean de CPCTelera, en la cual sí he encontrado un "init" en "global_functions.mk".
En fin, duendes de la programación...
Saludos.
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
RUNADDR es la dirección de ejecución del programa resultante. Si no está establecido, es porque, al enlazar, no sabe a dónde debe saltar para iniciar la ejecución del programa.
Normalmente, la dirección de inicio de ejecución la marca la etiqueta de la función main() de C. Como main() es un símbolo global de C, este se convierte a etiqueta en ensamblador como símbolo global también con un subrayado delante "_main".
En ensamblador puro, además, está el símbolo global "init" que también puede ser usado para marcar este punto de inicio del programa.
RUNADDR, por tanto, toma el valor de la dirección de memoria donde está "_main" o "init" para generar la cabecera AMSDOS donde debe indicarse este punto de entrada del programa.
Problemas potenciales:
Normalmente, la dirección de inicio de ejecución la marca la etiqueta de la función main() de C. Como main() es un símbolo global de C, este se convierte a etiqueta en ensamblador como símbolo global también con un subrayado delante "_main".
En ensamblador puro, además, está el símbolo global "init" que también puede ser usado para marcar este punto de inicio del programa.
RUNADDR, por tanto, toma el valor de la dirección de memoria donde está "_main" o "init" para generar la cabecera AMSDOS donde debe indicarse este punto de entrada del programa.
Problemas potenciales:
- Si no hay "_main", ni "init" en tu programa, RUNADDR no tendrá ningún valor.
- Si defines ambas, no sabrá cuál escoger
- Si las etiquetas no son globales, tampoco se definirán como símbolos globales y el linker no podrá verlas (por eso corriges el problema haciendo init local)
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Gracias Profesor, totalmente aclarado este tema.Problemas potenciales:
- Si no hay "_main", ni "init" en tu programa, RUNADDR no tendrá ningún valor.
- Si defines ambas, no sabrá cuál escoger
- Si las etiquetas no son globales, tampoco se definirán como símbolos globales y el linker no podrá verlas (por eso corriges el problema haciendo init local)
Si me permite otra pregunta, con respecto a la función cpct_fw2hw, parece ser que no admite ser compilada en ensamblador. Hay un problema al intentar declararla tal y como aparece en la documentación, con:
.globl cpct_fw2hw_asm
Da error en el linker:
Código: Seleccionar todo
?ASlink-Warning-Undefined Global 'cpct_fw2hw_asm' referenced by module 'cpct_keyboard'
?ASlink-Warning-Undefined Global 'cpct_fw2hw_asm' referenced by module ''
/home/.../cpctelera//cfg/global_main_makefile.mk:66: fallo en las instrucciones para el objetivo 'obj/game.ihx'
Un saludo
Última edición por MoteroV4 el Jue 17 Jun , 2021 4:55 pm, editado 1 vez en total.
- ronaldo
- Forum Addict
- Mensajes: 358
- Registrado: Sab 14 Sep , 2013 9:31 pm
- Ubicación: Alicante
- Contactar:
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Faltaría más, hombre .Gracias Profesor, totalmente aclarado este tema.
Si me permite otra pregunta, con respecto a la función cpct_fw2hw que parece ser que no admite compilarla en ensamblador, al intentar declararla tal y como aparece en la documentación, con:
.globl cpct_fw2hw_asm
Da error en el linker:
Este error aparece en un proyecto de prueba recién creado. Gracias.Código: Seleccionar todo
?ASlink-Warning-Undefined Global 'cpct_fw2hw_asm' referenced by module 'cpct_keyboard'
?ASlink-Warning-Undefined Global 'cpct_fw2hw_asm' referenced by module ''
/home/.../cpctelera//cfg/global_main_makefile.mk:66: fallo en las instrucciones para el objetivo 'obj/game.ihx'
Un saludo
Acabo de mirarlo y es muy simple: se trata de un error en los bindings de ensamblador de la función. El símbolo cpct_fw2hw_asm no está definido como global (no lleva dobles dos puntos)
Código: Seleccionar todo
cpct_fw2hw_asm: ;; Assembly entry point
.include /cpct_fw2hw.asm/
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Gracias Profesor, solucionado. En cuanto a subir algo a Github estoy pegado, tengo pendiente un cursillo. Me estreno con el Issue.Si quieres, ya que lo has visto tú, ponmelo en un issue en GitHub o mejor en un PR (solo tienes que añadir los dos puntos que faltan) y así lo añado y queda registrada tu contribución
-
- Lechoncillo
- Mensajes: 4
- Registrado: Sab 20 Ago , 2022 10:35 am
A vueltas con la paleta de colores en modo 1 en CPCTELERA
Estoy intentando pinar un cuadrado en CPCTELERA, en modo 1, en otro color que no sea los 4 definidos por defecto en el CPC. Para ello utilizo el código de abajo pero no consigo que el cuadrado se pinte en el color que deseo y no sé el motivo. A ver si alguien me echa una mano.
Re: A vueltas con la paleta de colores en modo 1 en CPCTELERA
Según el manual de CPCtelera, la función cpct_setPalette ya proporciona comandos de hardware para el Gate Array, por tanto los valores que requiere son los mostrados en la tabla de la columna 2 (Hardware), pero estás usando en g_palette los de la columna 3 (Hard+Command).Estoy intentando pinar un cuadrado en CPCTELERA, en modo 1, en otro color que no sea los 4 definidos por defecto en el CPC. Para ello utilizo el código de abajo pero no consigo que el cuadrado se pinte en el color que deseo y no sé el motivo. A ver si alguien me echa una mano.
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
He probado la distro Manjaro lista para hacer funcionar la cpctelera pero me va demasiado lenta así que he instalado cygwin/cpctelera (última versión mediante git).
Cuando hago un make me aparece el error:
"Makefile:38: /cfg/global_main_makefile.mk: No such file or directory
make: *** No rule to make target '/cfg/global_main_makefile.mk'.
Cuando hago un cpct_mkproject XXXX devuelve el error que no encuentra el comando. La instalación de la cpctelera + las librerías ha ido bien. Si hago un echo $CPCT_PATH devuelve:
/home/cpc/cpctelera/cpctelera
EDIT: Arreglao, tenía espacios en el nombre de usuario
Cuando hago un make me aparece el error:
"Makefile:38: /cfg/global_main_makefile.mk: No such file or directory
make: *** No rule to make target '/cfg/global_main_makefile.mk'.
Cuando hago un cpct_mkproject XXXX devuelve el error que no encuentra el comando. La instalación de la cpctelera + las librerías ha ido bien. Si hago un echo $CPCT_PATH devuelve:
/home/cpc/cpctelera/cpctelera
EDIT: Arreglao, tenía espacios en el nombre de usuario
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Utilizando la distro Manjaro preparada para utilizar cpctelera aparecen 2 funciones de Easytilemaps (cpct_etm_drawTilemap4x8_ag y cpct_etm_setDrawTilemap4x8_ag) que no aparecen en la última versión. No he visto nada en el historial de cambios.
Parece que en la última versión solo se pueden utilizar Tiles de 2x4
Parece que en la última versión solo se pueden utilizar Tiles de 2x4
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Efectivamente, estas 2 funciones vienen en el manual de la última versión, que no es la oficial o estable (que sería la antigua 1.4.2 de 16 Jul 2017). En github se puede descargar lo último con lo que se suele trabajar, con las últimas funciones y corrección de errores. Aunque no promete ser "estable" prácticamente sí lo es:Utilizando la distro Manjaro preparada para utilizar cpctelera aparecen 2 funciones de Easytilemaps (cpct_etm_drawTilemap4x8_ag y cpct_etm_setDrawTilemap4x8_ag) que no aparecen en la última versión. No he visto nada en el historial de cambios.
Parece que en la última versión solo se pueden utilizar Tiles de 2x4
https://github.com/lronaldo/cpctelera
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Hola,
estoy intentando generar un número aleatorio con las funciones de Cpctelera. Tengo la función cpct_srand() para fijar la semilla pero no consigo que la genere de forma aleatoria. Normalmente en C a la función srand() se le pasa la hora del PC pero no consigo que funcione.
estoy intentando generar un número aleatorio con las funciones de Cpctelera. Tengo la función cpct_srand() para fijar la semilla pero no consigo que la genere de forma aleatoria. Normalmente en C a la función srand() se le pasa la hora del PC pero no consigo que funcione.
Código: Seleccionar todo
#include <time.h>
time_t t;
cpct_srand(time(&t));
cpct_rand() % 10;
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
Continuo con CPCtelera y tengo una duda con el tamaño del archivo binario final. Depende como se asignen valores a las variables el tamaño final del archivo varía y no encuentro la regla que me diga cuando es más conveniente hacerlo de una manera o de otra. Me explico:
Forma A
Forma B
La cuestión es que a veces es mejor utilizar la opción A y otras la opción B (siempre hablando en términos de tamaño). No sé el compilador que reglas tiene a la hora de compilar.
Forma A
Código: Seleccionar todo
u8 a, b;
a = 0;
b = 0;
Código: Seleccionar todo
u8 a,b;
a = b = 0;
-
- Lechoncillo
- Mensajes: 6
- Registrado: Dom 31 Dic , 2017 12:23 pm
Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla
u8 a, b;
a = 0;
b = 0;
Yo diría que hace
Xor a
Ld b,a
u8 a,b;
a = b = 0;
Yo diría que hace
Ld b.0
LD a,b
a = 0;
b = 0;
Yo diría que hace
Xor a
Ld b,a
u8 a,b;
a = b = 0;
Yo diría que hace
Ld b.0
LD a,b
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro
La Comunidad Española |