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.
Commentaires
Enregistrer un commentaire