jeudi 25 octobre 2012

Création de jeux sous MSX : Création de la librairie "Outils"



Aujourd'hui, on va mettre en place la première brique de notre librairie de jeu. Nous allons créer et compiler tools.c. Cette première brique va contenir des fonctions génériques qui nous servirons plus tard.

Dans le répertoire TUTORIAL_TEST créez 2 fichiers textes, à savoir tools.c et tools.h.

En C, les .c contiennent les procédures et fonctions, et les .h, uniquement les signatures des procédures et fonctions.
Ainsi dans votre programme PRINCIPAL vous incluez les .h et le compilateur sait que les procédures et fonctions existe, et donc ne renvoit pas d'erreur.

Mais pour le moment, concentrons nous à créer la librairie "outils", première brique de notre librairie de jeu.

Pour ce tutorial, nous allons créer les procédures :

    char peek(int address) : Lecture d'un octet en mémoire (8 bits)
    int peek_word(int address) : Lecture d'un mot en mémoire (16 bits)
       
Dans tools.c, copiez collez le code suivant :

#include "tools.h"
#include <stdio.h>
#include <string.h>

char peek(int address){
  __asm
    ld l,4(ix) ; Charger le paramêtre (16 bits) dans HL
    ld h,5(ix)
    ld l,(hl)  ; Récuperer la valeur (8 bits) à l'adresse en la mettre dans H
    ld h,#0x00 ; Mettre à 0 H (car HL = 16 bits et on à un resultat 8 bits)
  __endasm;
}

int peek_word(int address){
  return
    ((int)peek(address)&0xff) |
    (peek(address+1)<<8) ;
}

Tout d'abord, la routine peek. Elle prend en entrée l'adresse en mémoire que l'on veut lire. En sortie, on à un octet. Le code est du pur assembleur,  mais en gros, on charge le paramètre address dans le registre 16bits HL, on lit la valeur à cette adresse et on là revoie de nouveau dans HL qui est notre char de retour.

Le peek_word appelle 2 fois le peek. En effet on veut récupérer à une adresse une valeur 16bits. Soit 8bits à l'adresse "address" et 8bits à l'adresse "address"+1.

Dans tools.h copiez collez le code suivant :

#ifndef ___MSX_H___
#define ___MSX_H___

char peek(int address);
int peek_word(int address);

#endif


Ce sont juste les signatures des fonctions que l'ont à créé.

Maintenant, on va compiler ça. Dans une ligne de commande lancez :

sdcc -mz80 -c tools.c

Vous allez avoir de beaux message de WARNING (et pas d'erreur),

I:\CODING\Sources\MSX\TUTO_SOURCES>sdcc -mz80 -c tools.c
tools.c:7: warning 59: function 'peek' must return value
tools.c:7: warning 85: in function peek unreferenced function argument : 'address'


car le compilateur n'apprécie que moyennement le mélance C/Assembleur. Mais pas de panique, ça fonctionne. D'ailleurs, vous avez maintenant dans votre répertoire un fichier tools.rel.

Voici la fin de ce tutorial, pour l'instant rien de bien excitant, mais encore quelques épisodes et on rentrera dans le vif du sujet :)

Aucun commentaire:

Enregistrer un commentaire