Repository navigation
Sesión 6: Lenguaje C
Juan Gonzalez-Gomez edited this page Nov 2, 2021
·
6 revisions
También podemos programar en C. El código C se traduce a ensamblador. Desde el código en ensamblador podemos llamar a funciones escritas en C (que se ha traducido a ensamblador)
Para llamar a la función sólo hay que hacer un call... pero hay que saber cómo pasar los parámetros. Y cómo lograr que desde C se acceda a nuestras estructuras
Partimos de una versión del juego SIN SCROLL (Se ha quitado)
Vamos a colocar una segunda entidad que se programa mediante una IA muy básica: que nos siga el movimiento ddl programa principal
La función en C la definimos en el fichero enemy.c:
#include <cpctelera.h>
typedef struct {
u8 x, y;
u8 w, h;
u8* spr;
u8* spr1;
u8 sn;
u8 cnt;
u8 jump;
} TEntity ;
void moveEnemy(TEntity* enemy, TEntity* myself) {
if (myself->x < enemy->x) {
--enemy->x;
} else if (myself->x > enemy->x) {
++enemy->x;
}
}Y ahora lo llamamos desde hero.s:
;;======================
;; Updates the Hero
;; DESTROYS: AF, BC, HL
;;=======================
hero_update::
call jumpControl ;;-- Do jumps
ld ix, #hero_data
call checkUserInput ;; Check if user pressed keys
;;-- POner los parametros en la pila (de derecha a izquierda)
ld hl, #hero_data
push hl
ld hl, #hero2_data
push hl
call _moveEnemy
;;-- Sacar parametros de la pila, porque la función en C
;;-- debe dejar la pila como estaba (convención)
pop af
pop af
ret- Este es el resultado:

¡¡CURSO TERMINADO!! 😀️😀️😀️😀️😀️ ¡¡Gracias Fran!!
