Desarrollo de Videojuegos en Amstrad CPC

Si no tienes un Amstrad CPC, te recomendamos descargar el emulador WinAPE para Windows.
- TALLERES / EVENTOS
- Empezando a programar videojuegos en 1984
- ARTÍCULOS / TUTORIALES (BASIC)
- ARTÍCULOS / TUTORIALES (C)
- JUEGOS DE EJEMPLO (con código)
- Magic Door (probar online): miniversión muy muy básica del West-Bank. Se juega sólo con el espacio para disparar.
- Alien Shooter (probar online): simple juego de disparar a un alien. Se juega con flechas izquierda-derecha y el espacio.
- West Duel (probar online): pequeño simulador de un duelo en el Oeste, para 2 jugadores. Cada jugador usa una sola tecla para cargar y disparar (TAB para J1, ENTER para J2).
Hola, buenos días, estoy empezando en CPCtelera y empapándome de los tutoriales de Fran Gallego y tengo este error al compilar el archivo main.s. Gracias.
[email protected] ~
$ cd practica
[email protected] ~/practica
$ ls
cfg Makefile obj src
[email protected] ~/practica
$ make
/home/cpctelera/cpctelera/tools/sdcc-3.6.8-r9946/bin/sdasz80 -l -o -s -I/home/cp ctelera/cpctelera/src -Isrc obj/main.rel src/main.s
src/main.s:9: Error: machine specific addressing or addressing mode error
removing obj/main.rel
make: *** [/home/cpctelera/cpctelera//cfg/global_main_makefile.mk:43: obj/main.r el] Error 2
[email protected] ~/practica
$
Hola Daniel,
Es imposible saber a qué se debe tu error sin ver el código de tu fichero main.s. Se trata de un error que has cometido en alguna de las instrucciones que has tecleado, en la línea 9, como indica el error. Esto se debe, normalmente, a poner algún número o etiqueta sin la almohadilla (#) delante, pero puede ser alguna otra cosa. Son errores de sintaxis típicos, como en C olvidarse de un ;. En cualquier caso, es algo que te va a suceder muchas veces (a mi me sigue sucediendo de vez en cuando), por lo que tienes que acostumbrarte a indagar en tú código buscando los motivos de estos errores.
Espero que esta orientación te ayude, pero si no, hace falta que envíes tu código para poder saber a qué se debe el error.
Un saludo.
Buenos días Fran, efectivamente era una dichosa almohadilla, aquí sigo avanzando con tus videos, es una cosa que siempre he querido hacer en el pasado, pero con un par de libros sobre el tema se quedo hay en el pasado, pero por casualidad di con este proyecto y he retrocedido 30 años de golpe, muchas gracias por el esfuerzo.
Un saludo.
Hola de nuevo Fran, la función cpct_disableFirmware.asm no figura en la instalación de cpctelera, claro al llamarla la compilación me da un error: ?ASlink-Warning-Undefined Global ‘cpct_disableFirmware.asm’ referenced by module ».
He mirado en Github y no figura tampoco, no se si hay alguna manera de hacer o descargarse de algún sitio el fichero .s de la función y si lo hay lo copio en la carpeta cpctelera/src/firmware directamente y ya esta, gracias de antemano.
Un saludo.
Hola Daniel,
No tienes que hacer nada. La función está incluida en CPCtelera. No hay archivo cpct_disableFirmware.asm porque la función es un alias de cpct_removeInterruptHandler. Puedes verla en este archivo: https://github.com/lronaldo/cpctelera/blob/master/cpctelera/src/firmware/cpct_removeInterruptHandler.s
Tienes un problema si estás intentando llamar a la función desde C con el nombre «cpct_disableFirmware_asm» puesto que esa etiqueta no está definida en las cabeceras de C. Es una etiqueta para llamadas desde ensamblador, en las que debe declararse con .globl y luego llamarse. La función a llamar desde C es «cpct_disableFirmware()».
Para este tipo de detalles, lo mejor es que mires los ejemplos en la carpeta examples: muchos ejemplos usan las funciones y puedes ver cómo se usan correctamente.
Un saludo.
Hola Fran, estoy siguiendo y practicando con el curso 2019 en YouTube y me he quedado en el video de herramientas de depuración y mejoras de código mas concretamente en el método insertion sort del que hablas, en si el fundamento si lo comprendo que el de ordenar las entidades por sus coordenadas x, y.
Pero me falta man/component_sort al que haces referencia en el video que son los array de los componentes.
Si me pudieras pasar ese fichero para seguir avanzando y ya si todavía dispones del trabajo completo ya seria perfecto para seguir avanzando con mas fallos que aciertos pero para un neófito en la programación en general no esta mal. Gracias Fran.
Hola Daniel,
Mis estudiantes también me pidieron que les pasara el código, y te contestaré lo mismo que les dije a ellos. No paso el código porque de lo que se trata es de que quien aprende sea capaz de crearlo, no de usar uno ya hecho. Por supuesto, crear un insertion sort puede llevar un buen rato y puede ser costoso, pero eso es precisamente lo que lo hace valioso. Tenerlo hecho no te aporta ningún valor; al contrario, actuará de impedimento para tu aprendizaje. Al eliminar la necesidad de hacerlo por uno mismo, pierdes la oportunidad de aprender. Cuando el objetivo es aprender, lo mejor es crearlo todo por uno mismo. Cuando el objetivo es producir (sabiendo ya), entonces tiene sentido utilizar cosas ya hechas.
Confío, eso sí, que mi mensaje te sirva de revulsivo para ponerte las pilas y que crees y mejores tu propio algoritmo de ordenación. No importa si es mejor o peor: importa que sea tuyo. Además, estoy seguro de que podrás con ello y lo harás muy bien. Si has llegado hasta aquí, nada puede impedirte hacer más cosas, si realmente quieres hacerlas.
Ánimo y espero ver tus resultados conforme sigas avanzando :).
Un saludo!
Fran.
Bueno Fran, no me queda otra cosa que recoger tu guante y tirar «pa lante» a ver que sale por ganas no va a ser, gracias por tu animo.
Pues me sale este error al compilar:
$ make
/home/cpctelera/cpctelera/tools/sdcc-3.6.8-r9946/bin/sdasz80 -l -o -s -g -I/home/cpctelera/cpctelera/src -Isrc obj/cmp/entity.h.rel src/cmp/entity.h.s
src/cmp/entity.h.s:167: Error:
Estoy estancado aquí ahora mismo.
Hola Daniel,
Tiene pinta de que no has copiado bien algo de lo que digo pero, sobre todo, creo que deberías dedicar algo más de tiempo a entender y dominar las macros. Debes entender bien que una macro lo que hace es sustituirse primero antes de que el ensamblador procese el código. Los errores te los está dando el ensamblador y es después de sustituir esas macros que pones. Sin ver esa sustitución es imposible entender el error. Las macros que pones ahí no son código: el código es lo que esas macros generarán cuando sean sustituidas. El resultado de la sustitución puedes verlo en los ficheros .lst que se generan en la carpeta obj. Puedes usar el fichero entity.h.lst e ir a ver esas macros cómo han sido sustituidas y dónde exactamente está dando el error. En el propio fichero las lineas que tienen errores van marcadas con un símbolo en una columna a la izquierda. Tienes que mirar allí para ver cuál es la línea donde está el error y a qué se debe.
Como te digo, no sólo es entender y corregir el problema en este caso. Es bueno que le dediques un tiempo a crear macros sencillas y ver cómo se sustituyen y funcionan. Crea las tuyas propias, que sean más sencillas en un proyecto más básico y ve complicándolas poco a poco para entenderlas. Sigue los vídeos que tengo de este año y del pasado explicando cómo funcionan las macros. En cuanto las entiendas bien, les sacarás el provecho debido, pero el tiempo es necesario dedicarlo :).
Ánimo y a seguir!
Hola Fran. Tengo 48 años y estudié la carrera de Informática. Puede que no sea el mejor lugar para escribir este post, y disculpa si lo hago por este foro, pero quiero comentarte que la nostalgia me hizo llegar hasta aquí. Soy uno de aquellos que tuvo uno de los primeros Amstrad CPC 472 con fósforo verde, y aún lo tengo con muchas cintas de juegos. Siempre me apasionaron 4 juegos, Sir Fred, La Abadía del Crimen, Match Day II y Gunfright. La jugabilidad y adicción de Match Day II no la vi en ningún juego de los de hoy en día.
Eso hizo que recientemente me propuse aprender lo que en aquella época no pude. En aquel entonces hice algunos juegos como el ahorcado en basic, pero nunca pude aprender lo que enseñas. Tampoco había apenas forma de conseguir entender todo esto. Cuando veo tus videos me remonto a mi época universitaria donde estudié el z80 y C. Pienso personalmente que tiene un gran valor lo que transmites y que muchos de tus alumnos entenderán lo que les has enseñado con el tiempo, porque como bien dices en algún video tuyo, se trata de que el usuario controle la máquina a bajo nivel y sepa sacar de ella el máximo provecho. Esto que haces le aportará un gran valor en su carrera profesional. Quizás sólo lo vemos aquellos que tenemos cierta edad desde la distancia.
Estoy siguiendo tu curso de CPCTelera y creo que muchas personas estarían encantadas de que siguieras publicando videos sobre dez80 y CPCTelera. Sé que es complicado porque ya tenemos una vida hecha y hay que sacar tiempo, pero te animo a ello desde aquí porque tienes muchos seguidores nostálgicos. Sin otro particular, recibe un cordial saludo.