Creación

Desarrollo de Videojuegos en Amstrad CPC

Código BASIC de Alien Shooter
Código BASIC de Alien Shooter

Si no tienes un Amstrad CPC, te recomendamos descargar el emulador WinAPE para Windows.

9 comentarios en “Creación

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

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

  3. 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: missing or improper operators, terminators, or delimiters
        src/cmp/entity.h.s:168: Error: .org in REL area or directive / mnemonic error
        src/cmp/entity.h.s:169: Error: .org in REL area or directive / mnemonic error
        src/cmp/entity.h.s:170: Error: .org in REL area or directive / mnemonic error
        src/cmp/entity.h.s:171: Error: .org in REL area or directive / mnemonic error
        src/cmp/entity.h.s:172: Error: relocation error
        removing obj/cmp/entity.h.rel
        make: *** [/home/cpctelera/cpctelera//cfg/global_main_makefile.mk:44: obj/cmp/entity.h.rel] Error 2
        Estas son las líneas de código del fichero src/cmp/entity.h.s:
        167 DefComponentIDs e_cmp
        168 Component_ID e_cmp, AI
        169 Component_ID e_cmp, Physics
        170 Component_ID e_cmp, Animations
        171 Component_ID e_cmp, Render
        172 e_Num_Components = e_cmp_ID_Render + 1
        173 e_cmp_default = e_cmp_Render | e_cmp_Physics
        174 e_cmp_anim_default = e_cmp_default | e_cmp_Animations
        175 e_cmp_ai_default = e_cmp_default | e_cmp_AI
        176 e_cmp_ai_anim = e_cmp_ai_default | e_cmp_Animations

        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!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.