jeudi 25 octobre 2012

Création de jeux sous MSX : Mise en place des outils



Bienvenue dans ce premier tutorial sur la programmation de jeux sous MSX.
Dans cette série de tutoriaux, vous allez apprendre en même temps que moi à :

- mettre en place les outils de compilation
- développer une librairie de jeu vidéo pour MSX, compatible au maximum avec la librairie
  existante sur Colecovision (par Daniel Bienvenu)
- tester cette librairie au fur et à mesure pour voir si tout ce passe bien :)


NOTE : Ces tutoriaux n'auraient jamais pu voir le jour sans les références suivantes :

    http://andrear.altervista.org/contents/msx/inertia/

Dans cette première partie, je vais vous expliquer les outils à mettre en place pour compiler une rom MSX.

A télécharger :

 - SDCC : http://sdcc.sourceforge.net/

  SDCC est ce que l'on apelle un cross compiler. Il permet à partir d'un code source en C de générer de l'assembleur pour un autre processeur. Le pack SDCC contient également de quoi compiler l'assembleur généré
 
 - OBJCOPY : http://www.ccjvq.com/newcoleco/

  OBJCOPY est à récupérer dans le pack de Daniel Bienvenu, cela permet de transformer le binaire généré par SDCC en rom lisible par un émulateur, ou la console/ordinateur réel. Gardez bien ce pack, il nous reservira plus tard !
 
Mettre en place notre environnement :

Installez SDCC, par exemple dans C:\DEV\SDCC, puis mettez dans le PATH Windows le répertoire d'éxécutable de SDCC à savoir C:\DEV\SDCC\BIN pour que le compilateur soit accessible partout.

Créez un répertoire TUTORIAL_SOURCE par exemple, et à l'intérieur copiez le OBJCOPY.EXE du kit de développement de Daniel Bienvenu (Il se trouve dans : z80/tools/System). Ou bien vous pouvez copier cet éxécutable dans le répertoire BIN de SDCC pour qu'il soit executable de partout ...

Test de l'environnement :

On attaque tout de suite les choses sérieuses. Une rom MSX pour qu'elle soit reconnu tel quel à besoin d'un HEADER, d'une signature (pour simplifier) si vous préférez. Nous allons créer cette signature. Dans votre répertoire TUTORIAL_SOURCE, créez un fichier texte appelé crt0msx.s. Et copier coller le code source suivant à l'intérieur :

    ;; Generic crt0.s for a Z80
    .globl    _main

    .area _HEADER (ABS)
    ;; Reset vector
        .org    0x4000
        .db     0x41
        .db     0x42
        .dw     init
        .dw     0x0000
        .dw     0x0000
        .dw     0x0000
        .dw     0x0000
        .dw     0x0000
        .dw     0x0000

init:
    ;; Stack at the top of memory.
        ld      sp,(0xfc4a)       

        ;; Initialise global variables
    call    _main

    ;; Ordering of segments for the linker.
    .area    _CODE
        .area   _GSINIT
        .area   _GSFINAL
       
    .area    _DATA
        .area   _BSS

        .area   _CODE

        ;; Special RLE decoder used for initing global data

__initrleblock::
        ;; Pull the destination address out
        ld      c,l
        ld      b,h
       
        ;; Pop the return address
        pop     hl
1$:
        ;; Fetch the run
        ld      e,(hl)
        inc     hl
        ;; Negative means a run
        bit     7,e
        jp      z,2$
        ;; Code for expanding a run
        ld      a,(hl)
        inc     hl
3$:
        ld      (bc),a
        inc     bc
        inc     e
        jp      nz,3$
        jp      1$
2$:
        ;; Zero means end of a block
        xor     a
        or      e
        jp      z,4$
        ;; Code for expanding a block
5$:    
        ld      a,(hl)       
        inc     hl
        ld      (bc),a
        inc     bc
        dec     e
        jp      nz,5$
        jp      1$
4$:    
        ;; Push the return address back onto the stack
        push    hl
        ret

        .area   _GSINIT
gsinit::   

        .area   _GSFINAL
        ret




Ne me demandez pas une explication de ce code, j'avoue ne pas avoir la maitrise de cette partie ... Si jamais quelqu'un qui maitrise veut bien expliquer la chose en commentaire, j'en serais fort aise :)

Nous allons compiler ce charabia. Ouvez une ligne de commande DOS, allez dans le répertoire TUTORIAL SOURCE et taper :

sdasz80 -o crt0.rel crt0msx.s

Si tout ce passe bien, rien ne doit s'afficher, et vous devez avoir en bonus un fichier crt0.rel qui est apparu dans votre répertoire. Vous avez votre signature de rom.

Voilà, on s'arrête ici pour cette première partie, dans la prochaine, on va commencer à développer notre librairie de jeu pour MSX.

Aucun commentaire:

Enregistrer un commentaire