Skip to content

Sesión 6: Lenguaje C

Juan Gonzalez-Gomez edited this page Nov 2, 2021 · 6 revisions

Contenidos

Sesión 6.1: Llamar a funciones en C desde ensamblador del Z80

Click to see the youtube video

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

Clone this wiki locally