CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
Atlante
Lechoncillo
Lechoncillo
Mensajes: 4
Registrado: Lun 13 Mar , 2017 11:29 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Atlante » Vie 17 Mar , 2017 3:49 pm

Hola @Atlante,

El problema no es de CPCtelera, sino de las últimas versiones de Cygwin. Hay algo que han tocado que no sabemos aún qué es, que está provocando problemas como este.

Hay un fix para circunvenir el problema que puse en CPCWiki. Son unos pasos sencillos pero no es evidente llegar a ellos. Siguelos y podrás instalar CPCtelera. Después no debes tener más problemas.

Espero que en la próxima versión podamos dejar resuelto el problema para que no moleste.

Un saludo
Muchas gracias, así ya he podido terminar la instalación. Ahora me toca darle caña!!

Busca en este foro, hay una versión "portable" que no necesita instalación y va perfecta.
Gracias, pero ya he podido instalar la versión "normal", sino, seguro que hubira optado por la "portable".

Avatar de Usuario
Lenko
Me voy lanzando
Me voy lanzando
Mensajes: 25
Registrado: Mar 18 Jun , 2013 3:20 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor Lenko » Jue 20 Abr , 2017 1:44 pm

Sólo quería aprovechar que creo que @ronaldo lee este hilo para felicitarle a él y al resto de colaboradores por el trabajo en la CPCtelera.

Llevo un par de semanas empezando a hacer mis pinitos con el sistema y cada vez estoy más sorprendido de cómo han conseguido hacérselo lo más fácil posible al programador con el uso de comandos externos y la facilidad para integrar el resultado de trabajar con herramientas directamente en el código.

Por el momento sólo tengo a mi sprite propio dando vueltas por la pantalla sin parpadear y sin machacar los fondos... lo que ya me parece todo un logro personal :D Aparte que creo que he aprendido más de las interioridades del CPC en estas dos semanas que en toda mi vida.

Sólo un par de dudas, aunque seguro que vendrán muchas más en el futuro:

He seguido algunos vídeos que hay en la red: el primero con Juanje y después el taller de Retrópolis y Retropixel (con su material). Entiendo que del de Juanje a la actualidad han cambiado bastantes cosas. En el vídeo de Juanje se comenta el tema de poner todas las variables globales como constantes pero en el código de ejemplo de Retropixel veo que no se utiliza. ¿Ya no es necesario?

Por otro lado en el primer vídeo se utilizan sprites con máscara y en Retropixel en cambio se usa el método del buffer para transparecias. Aparte de que el primer método te libera un color de la paleta y el segundo utiliza una cantidad de memoria fija (que supongo que en función del número de sprites será más económico en memoria o no que el otro método)... ¿cuál es más rápido?

Gracias.

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 11 May , 2017 2:13 pm

Muchísimas gracias por tus palabras, @Lenko :D. Me alegro muchísimo de que CPCtelera te esté siendo de ayuda. Perdona por tardar tanto en contestar, pero he estado un mes de viaje y tenía muchas cosas pendientes :)

El tema de las variables globales no tiene que ver específicamente con CPCtelera. Se trata de una característica del compilador SDCC. Este compilador está pensado para entornos embebidos. Básicamente, asume que el binario que genera se va a terminar implementando en una ROM. En una ROM los valores no pueden ser modificados (no se puede escribir). Esto genera un problema no con las variables globales, sino con los inicializadores de las variables globales. Si escribes una variable global con esté código:

Código: Seleccionar todo

int puntos = 100;
El problema está en cómo se pone un 100 en la posición de memoria donde se almacena la variable puntos. Esa posición de memoria estará en RAM, pero el 100 debe estar en código del programa, es decir, en ROM. Eso significa que cuando ejecutes el programa desde ROM copiarás ese 100 desde la ROM a la RAM. Este comportamiento es necesario si trabajas en ROM, pero destructivo si tu programa funciona en RAM y se lee desde un dispositivo de almacenamiento (cinta o disco). Es destructivo porque generaría 2 copias de la variable puntos (una que es la que debería haber ido a ROM, que es como una constante con el valor 100, y otra que es la propia variable) y porque además debe añadir un cachito de código adicional para copiar los valores del "supuesto espacio ROM" (en nuestro caso está todo en RAM) a la ubicación de la variable en RAM.

En CPCtelera se configura SDCC para que no incluya el código que copia de ROM a RAM, ya que no lo necesitamos para nada. Nuestro programa funciona entero en RAM. Esto significa que si ponemos inicializadores para las variables globales (el = 100 de nuestro ejemplo) no van a funcionar. Además, no debemos hacerlo porque sí se van a generar 2 copias de la variable en memoria (la que debería ser ROM, y la variable propiamente dicha).

Por esto se recomienda utilizar una de 2 posibles opciones:
  1. Definir las variables como constantes globales y luego modificarlas a nuestro gusto, saltándonos los warnings del compilador. Al ser definidas como constantes, el compilador asume que pueden estar en ROM y no genera las 2 copias antes mencionadas, pero en nuestro caso práctico están en RAM, por lo que podemos modificarlas con un poco de maña.
  2. Utilizar algo de ensamblador (tampoco mucho) para definir los valores de la variable a mano. Es realmente mejor que la alternativa anterior, pero algo más engorroso en general. De todas formas, es cuestión de gustos.
En cuanto a los métodos de máscara, la máscara inline (incluida en el sprite) es ligeramente más rápida que el uso de tabla de máscara en general. Quizá en algunos casos no lo sea, pero puedes asumir tranquilamente que es más rápida en general. Eso sí, esta rapidez viene acompañada del coste de duplicar el tamaño de los sprites, que contienen su información de colores + máscara en lugar de colores sólo. A partir de ahí, es una cuestión personal de cada proyecto decidir cuál usar y porqué. Eso sí, ten en cuenta que si usas ambos métodos de forma simultanea, entonces también usaras el código de las dos funciones de dibujado con máscara. Esto son también más bytes en tu ejecutable. En la documentación de CPCtelera tienes los bytes que ocupa cada función, por lo que podrías calcular si te interesa o no.

Espero que esto te sea de ayuda :D

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

CPCtelera 1.4.2. ya disponible!

Mensajepor ronaldo » Lun 17 Jul , 2017 4:15 pm

Ya está disponible CPCtelera 1.4.2.

Esta versión es una actualización muy importante debido a los problemas que estaban dando los fuentes de SDCC 3.5.5 en determinados sistemas y circunstancias. Esta versión incluye SDCC 3.6.8 (revisión 9946) y arregla también los problemas de compatibilidad con Mac OSX, por lo que debería resolver los problemas de la mayoría de usuarios. Esperemos que así sea :).

Encontraréis también muchas mejoras importantes que están listadas abajo. Pero primero, unos links :D Incluido en esta versión:
  • Actualizado el compilador SDCC de la versión 3.5.5. a la nueva 3.6.8 (revisión 9946). Esta nueva versión es mucho más eficiente, genera mejor código y resuelve problemas de versiones anteriores.
  • Añadido soporte para conversión automatizada de músicas AKS generadas con Arkos Tracker 1.
  • Añadido soporte de integración con Visual Studio Code. Todos los proyectos de CPCtelera pueden abrirse, compilarse y ejecutarse en VS Code. También tiene soporte intellisense y atajos de teclado.
  • Documentada la intergación con Visual Studio Code, con mucha información para usuarios sobre como configurar los proyectos.
  • Documentadas las herramientas de conversión automatizada de música, gráficos y mapas de tiles. Esto ahorra tiempo a los usuarios convirtiendo automáticamente todos sus ficheros cada vez que son modificados, sin necesidad de hacerlo manualmente.
  • Añadido soporte para dibujado de tiles con ordenado de filas en código gray y uso de la pila. Método muy rápido para usuarios avanzados.
  • Añadida sección de resolución de problemas (Troubleshooting) en la documentación
  • Resuelto un problema con iDSK: sobreescribía ficheros con mismo nombre pero distinta extensión.
  • Añadido soporte para memoria paginada más allá de 64K.
  • Añadido fichero de optimizaciones especulativas de z88dk para usuarios que quieran experimentar con optimizaciones avanzadas.
  • Añadidos nuevos ejemplos en ensamblador con animaciones, música y estructuras de datos.
  • Actualizado RGAS a la última versión 1.2.2.
  • Añadido soporte para la conversión de Tilemaps TXM-CSV en bitarrays en C.
  • Arreglado getRandom para producir secuencias de números aleatorios predecibles con misma semilla.
Disfrutadla mucho mientras continuamos trabajando en la versión 1.5! :D
Imagen

Avatar de Usuario
AmstradGamer
Forero habitual
Forero habitual
Mensajes: 189
Registrado: Dom 08 Jun , 2014 10:08 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor AmstradGamer » Lun 17 Jul , 2017 6:10 pm

Creo que ha llegado el momento de probar esta nueva versión.

Creo que ha habido un problema al generar la documentación de la función cpct_pageMemory. Está por triplicado y a simple vista solo cambia la documentación de los registros afectados.

A ver si tengo ocasión de probar las novedades.

Gracias! :)

pacomix
Forum Addict
Forum Addict
Mensajes: 459
Registrado: Dom 11 Nov , 2012 8:05 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor pacomix » Lun 17 Jul , 2017 7:35 pm

Wow!!! Creo que cuando retome el proyecto va a ser casi mejor usar cpc telera en lugar de mi propio sistema... ¿lleva ya la carga de disco sin firmware?


Enviado desde mi iPhone utilizando Tapatalk

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 » Lun 17 Jul , 2017 8:29 pm

Creo que ha habido un problema al generar la documentación de la función cpct_pageMemory. Está por triplicado y a simple vista solo cambia la documentación de los registros afectados.
Correcto. Me había dado cuenta esta mañana del problema, pero lo que no había visto es que el problema era algo peor: no estaba actualizada la documentación del sistema de paginado de memoria. Por algún motivo, he debido perderla al hacer merge de la versión de desarrollo. Acabo de recuperarla y ponerla online. Gracias por estar pendiente :).
Wow!!! Creo que cuando retome el proyecto va a ser casi mejor usar cpc telera en lugar de mi propio sistema... ¿lleva ya la carga de disco sin firmware?
Aún no. De hecho, la funcionalidad de leer de disco sin firmware es algo que está retrasado por las dudas que han surgido respecto a su utilidad. Al existir dispositivos como la M4, tiene más sentido dar soporte a la lectura por firmware más que a la lectura directa accediendo a la controladora. Sin embargo, sigue habiendo también interés en acceso directo al hardware por distintos motivos e intereses...

En cualquier caso, ten en cuenta que CPCtelera no te obliga a usar las funciones de la librería, ni a usarlas todas. Puedes usar las que te interesen o incluso ninguna. Puedes añadir todas tus propias funciones tanto en C como en ensamblador. Hay gente usando CPCtelera sólo por el sistema de build automatizado, sin usar ninguna de las funciones de la librería. De hecho, también puedes usar CPCRSLib en CPCtelera (hay un comando para instalar y configurar CPCRSLib en CPCtelera y usarla en tus proyectos sólo con poner el include: cpct_installrslib).

En cualquier caso, las funciones de lectura y escritura en disco y cinta con y sin firmware se irán añadiendo antes o después, porque están en la lista de tareas :).

Avatar de Usuario
AmstradGamer
Forero habitual
Forero habitual
Mensajes: 189
Registrado: Dom 08 Jun , 2014 10:08 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor AmstradGamer » Lun 17 Jul , 2017 9:43 pm

Hola.

Pues mi primera prueba un fail.

He cogido el juego que tengo entre manos y compilando (correctamente) con la nueva versión, al ejecutar simplemente se reinicia la emulación. No he cambiado ni una linea de código.

Como lo he hecho en el ordenador que tenía a mano y no en el que uso con más frecuencia, lo intentaré mañana de nuevo.

Si averiguo algo lo comento. Es probable que sea culpa mía.

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: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor ronaldo » Lun 17 Jul , 2017 9:47 pm

Prueba a hacer un cleanall antes, ya que si tenías objetos compilados con la anterior versión del compilador y te ha hecho compilación incremental te habrá hecho un desastre.

Avatar de Usuario
AmstradGamer
Forero habitual
Forero habitual
Mensajes: 189
Registrado: Dom 08 Jun , 2014 10:08 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor AmstradGamer » Lun 17 Jul , 2017 9:59 pm

Okey.

No te preocupes que fijo que es cosa mía.

Gracias!

Avatar de Usuario
AmstradGamer
Forero habitual
Forero habitual
Mensajes: 189
Registrado: Dom 08 Jun , 2014 10:08 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor AmstradGamer » Mar 18 Jul , 2017 10:43 am

He actualizado CygWin, instalado BC que no lo tenía y hecho el cleanall. Ahora funciona sin problemas.

Me alegra ver que efectivamente el binario generado ocupa menos.

Gracias por el gran trabajo.

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 » Mar 18 Jul , 2017 11:05 am

Genial. Me alegro de que sólo fuera un simple problema transaccional :).

En efecto, he observado que muchas veces el rendimiento y resultados de SDCC 3.6.8 es mejor que el anterior SDCC 3.5.5. Aún así, parece que no aplica a todos los casos (cosa lógica, por otra parte). De momento, eso sí, muchos resultados son buenos.

Avatar de Usuario
jgonza
Keeper of The Forum
Keeper of The Forum
Mensajes: 962
Registrado: Mié 04 Abr , 2007 9:21 pm
Ubicación: Alboraya (Valencia)

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor jgonza » Jue 27 Jul , 2017 9:36 am

Hola, estoy empezando a familiarizarme con CPCtelera, y me estoy quedando bloqueado al tratar de dibujar un sprite con máscara con tabla.

Ayer hablaba con ronaldo y me decía que el problema se debía casi seguro a que estaba usando como transparente un color distinto del 0. Efectivamente, así era (estaba usando el 1, que era el azul clásico de fondo del amstrad). A partir de ahí, he hecho lo siguiente:

- He cambiado de orden los colores 0 y 1 en la paleta (para que mi color azul estuviera en el índice 0), el resultado es idéntico, el programa peta.

Después de eso, me he dejado de experimentos, y me he puesto a cambiar los gráficos para que tuvieran el fondo negro, con el color negro en el índice 0 de la paleta, es decir, tal y como se ve en los ejemplos y tutoriales, pero el resultado es exactamente el mismo.

Decir que el sprite sin máscara se dibuja perfectamente, es al tratar de dibujarlo con máscara cuando el programa se rompe.

Gracias por adelantado!
Visita mi canal de YouTube http://www.youtube.com/c/jgonza

Avatar de Usuario
AmstradGamer
Forero habitual
Forero habitual
Mensajes: 189
Registrado: Dom 08 Jun , 2014 10:08 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor AmstradGamer » Jue 27 Jul , 2017 9:50 am

Hola.

Entiendo que el sprite lo exportas con y sin máscara en función de cómo lo vas a dibujar, ¿no?

Básate en algún ejemplo de CPCTelera y quítale todo salvo el pintado de un sprite. También asegúrate que lo estás pintando en la zona de memoria de video y no estés machacando el código por error...

Suerte!

Avatar de Usuario
jgonza
Keeper of The Forum
Keeper of The Forum
Mensajes: 962
Registrado: Mié 04 Abr , 2007 9:21 pm
Ubicación: Alboraya (Valencia)

Re: CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Mensajepor jgonza » Jue 27 Jul , 2017 9:58 am

Hola.

Entiendo que el sprite lo exportas con y sin máscara en función de cómo lo vas a dibujar, ¿no?
No, hago lo de la conversión al vuelo usando la tabla.

Según los tutoriales que estoy viendo, lo único que hay que hacer es añadir

- cpctm_createTransparentMaskTable(pre_masktable, 0x0100, M0, 0); (después de los #include)

y luego sustituir la línea

cpct_drawSprite(prota.sprite, pvmem, PRE_PLAYER_0_W, PRE_PLAYER_0_H);

por

cpct_drawSprite(prota.sprite, pvmem, PRE_PLAYER_0_W, PRE_PLAYER_0_H, pre_masktable);

Pero algo se me está escapando...
Visita mi canal de YouTube http://www.youtube.com/c/jgonza


¿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