CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Programando el Amstrad en BASIC, C, etc.
Meta
Forero habitual
Forero habitual
Mensajes: 103
Registrado: Jue 04 Ene , 2018 9:36 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Meta » Jue 04 Mar , 2021 10:05 pm

Eres un hacha, otro día te daré más la lata
:bounce:
Buenas noches.

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

Re: RUNADDR is not set

Mensajepor MoteroV4 » Lun 10 May , 2021 9:00 pm

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

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

Re: RUNADDR is not set

Mensajepor MoteroV4 » Jue 13 May , 2021 7:26 pm

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
Me respondo a mí mismo por si alguien se encuentra con este error tan extraño y sin pistas, al intentar compilar en CPCtelera:
**!!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... :crash:

Saludos.

Avatar de Usuario
ronaldo
Forum Addict
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

Mensajepor ronaldo » Jue 17 Jun , 2021 11:48 am

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:
  • 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)
Creo que eso resume aproximadamente lo que te sucedió :)

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

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor MoteroV4 » Jue 17 Jun , 2021 4:33 pm

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)
Gracias Profesor, totalmente aclarado este tema.

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'
Este error aparece en un proyecto de prueba recién creado. Gracias.

Un saludo
Última edición por MoteroV4 el Jue 17 Jun , 2021 4:55 pm, editado 1 vez en total.

Avatar de Usuario
ronaldo
Forum Addict
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

Mensajepor ronaldo » Jue 17 Jun , 2021 4:51 pm

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:

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'
Este error aparece en un proyecto de prueba recién creado. Gracias.

Un saludo
Faltaría más, hombre :).

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/
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 :)

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

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor MoteroV4 » Jue 17 Jun , 2021 6:01 pm

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 :)
Gracias Profesor, solucionado. En cuanto a subir algo a Github estoy pegado, tengo pendiente un cursillo. Me estreno con el Issue. ;-)

retroprogramer73
Lechoncillo
Lechoncillo
Mensajes: 4
Registrado: Sab 20 Ago , 2022 10:35 am

A vueltas con la paleta de colores en modo 1 en CPCTELERA

Mensajepor retroprogramer73 » Mié 24 Ago , 2022 1:29 pm

imagen_2022-08-24_132915082.png
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.

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

Re: A vueltas con la paleta de colores en modo 1 en CPCTELERA

Mensajepor MoteroV4 » Mié 24 Ago , 2022 2:00 pm

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

Ivan
Forero habitual
Forero habitual
Mensajes: 157
Registrado: Dom 03 May , 2020 6:07 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Ivan » Jue 01 Sep , 2022 7:07 pm

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

Ivan
Forero habitual
Forero habitual
Mensajes: 157
Registrado: Dom 03 May , 2020 6:07 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Ivan » Sab 03 Sep , 2022 1:10 pm

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

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

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor MoteroV4 » Sab 03 Sep , 2022 1:34 pm

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

https://github.com/lronaldo/cpctelera

Ivan
Forero habitual
Forero habitual
Mensajes: 157
Registrado: Dom 03 May , 2020 6:07 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Ivan » Lun 19 Sep , 2022 1:37 pm

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.

Código: Seleccionar todo

#include <time.h>

time_t t;
cpct_srand(time(&t));
cpct_rand() % 10;

Ivan
Forero habitual
Forero habitual
Mensajes: 157
Registrado: Dom 03 May , 2020 6:07 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Ivan » Vie 14 Oct , 2022 6:39 pm

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

Código: Seleccionar todo

u8 a, b;
a = 0;
b = 0;
Forma B

Código: Seleccionar todo

u8 a,b;
a = b = 0;
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.

Raulgarfer
Lechoncillo
Lechoncillo
Mensajes: 6
Registrado: Dom 31 Dic , 2017 12:23 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Raulgarfer » Dom 01 Ene , 2023 11:00 am

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


¿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