Un grand merci à Pulkomandy pour sont SVN qui m'a permis d'avoir pas mal d'exemple afin de démarrer.
Je vous le conseil y'a plein de chose sympa: http://pulkomandy.tk/projects/thomson/b ... ls/gfx2mo5
Premièrement, ce tutorial est pour Windows (testé sous Windows 7 64bits)
Installer Cygwin: https://www.cygwin.com/ de préférence la version 32bits "setup-x86.exe"
Pendant l'installation, installer les packages "make" et "dos2unix".
Télécharger GCC6809 (personnellement j'ai utilisé la version du projet FreeWPC)
http://sourceforge.net/projects/freewpc/files/GCC-6809/
Fichier: gcc6809-win32-4.3.4-2.tar.gz
Décompressez ce fichier à la racine du répertoire C:\cygwin
Allez dans le repertoire C:\cygwin\home\NomDutilisateur
Editez le fichier ".bashrc" avec WordPad (ou un outil qui reconnais les fichiers texte au format Unix)
Ajouter la ligne: export PATH=/usr/local/gcc6809/bin:$PATH
Enregistrer et fermer le fichier.
Si vous éditer ce fichier avec WordPad, il sera enregistré sous le format Windows, et Bash n'aimera pas ça.
Lancez donc la console Cygwin avec le fichier C:\cygwin\Cygwin.bat
Ignorez les erreurs et taper: dos2unix .bashrc
Puis: source .bashrc
Normalement le fichier .bashrc devrait être correct maintenant.
(Tapez la commande: "aslink" pour voir si le programme ce lance)
Télécharger ce petit outil: http://onorisoft.free.fr/mo5/gcchex2bin.zip
Copier le fichier "gcchex2bin.exe" dans C:\cygwin\usr\local\gcc6809\bin
Ensuite vous pouvez avoir vos fichiers/projets dans le repertoire C:\cygwin\home\NomDutilisateur
L'avantage c'est que lorsque vous lancerez la console Cygwin, vous serez d'office dans ce répertoire.
Sinon si vous avez un répertoire du style: C:\mo5\exemple
Sous Cygwin vous serez obliger d'utiliser la commande: cd /cygdrive/c/mo5/exemple pour vous y rendre.
Allez donc dans le répertoire de votre choix, puis créer les fichiers suivant:
Un fichier start.s (il sera ajouté au début du binaire pour faire un JMP directement a la fonction main du fichier .c)
Code : Tout sélectionner
.area .text
jmp _main
rts
Code : Tout sélectionner
OUTPUT=exemple
BASEADRS=0x3000
OBJECTS=start.o main.o
CFLAGS=-Os
PREFIX=m6809-unknown-none
CC=$(PREFIX)-gcc
AS=$(PREFIX)-as
LIBPATH=/usr/local/gcc6809/lib/gcc/m6809-unknown-none/4.3.4/libgcc-cache
LIBOBJ=
all: $(OBJECTS)
aslink -mnwxso -b .text=$(BASEADRS) $(OUTPUT).s19 $(OBJECTS) $(LIBOBJ)
gcchex2bin -i$(OUTPUT).s19 -o$(OUTPUT).bin
rm -f $(OUTPUT).s19
clean:
rm -f $(OUTPUT).bin $(OUTPUT).map $(OBJECTS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.s
$(AS) $< -o $@
Et votre fichier main.c
Code : Tout sélectionner
#define mon_putc(car) { \
asm(" swi \n"\
" .fcb 2"\
::"B" ((unsigned char) (car))\
); \
}
void myputs(char *str)
{
while (*str)
mon_putc(*str++);
}
void main(void) // Should NOT return INT ! (else gcc will include strange code affecting U register, don't bother the Warning from GCC about this)
{
myputs("Hello, World !\r\n");
}
Dans la console cygwin, taper "make" et voila votre fichier exemple.bin est disponible !
Il suffit de le charger dans DCMOTO à l'adresse $3000 et de faire un exec &h3000 !
Le fichier de sortie ".bin" est brut, sans aucun header.
EDIT: le format CoCo (aslink -t) qui semble avoir un header proche du thomson, n'est pas correct, en effet il intercale ce header tout les 32 octets
Attention, dans le Makefile que je vous donne çi dessus, aucune librairie n'est incluse.
Donc si vous faite des multiplications sur 16/32bits par exemple il faudrat rajouter les libraires de GCC pour ça.
Ajoutez donc à la ligne LIBOBJ=$(LIBPATH)/_muldi3.o $(LIBPATH)/_mulhi3.o
Si vous utilisez des divisions, c'est plus complexe, vous pouvez ajouter les libraries GCC mais elle pèsent plus de 2ko !!
(voici la ligne si vous voulez #$(LIBPATH)/_divdi3.o $(LIBPATH)/_divhi3.o $(LIBPATH)/_modhi3.o $(LIBPATH)/_umodhi3.o $(LIBPATH)/_euclid.o $(LIBPATH)/_seuclid.o $(LIBPATH)/_udivhi3.o $(LIBPATH)/_ashlhi3.o $(LIBPATH)/_lshrhi3.o $(LIBPATH)/_clzsi2.o $(LIBPATH)/_clz.o)
Il y a une autre méthode, utilisez la fonction div32 fourni par l'équipe de GCC6809, elle est dispo dans le fichier div32.s ici: https://code.google.com/p/gcc6809/downloads/list
Par contre, ce fichier ne compile pas d'office avec GCC, j'ai donc du le modifier pour qu'il fonctionne, il est dispo sur mon site ici: http://onorisoft.free.fr/mo5/div32.s
Pour l'utilisez, mettez ce fichier dans votre répertoire projet et rajouter "div32.o" à la fin de la ligne OBJECTS= de votre Makefile
Dans votre fichier C ou vous utilisez des divisions, ajoutez la ligne de déclaration de la fonction:
void divide32(unsigned long *dividend, unsigned long *divisor, unsigned long *quot_remainder);
Puis pour faire votre division procédez comme suit:
Au lieux de faire: A = B / C;
Faites:
unsigned long A, B, C, result[2];
divide32(&B, &C, result);
A = result[0];