Utilisation de cc et as

1 - cc et as
2 - Utilisation de cc
3 - Utilisation de as
4 - Edition des programmes

1 - cc et as

cc et as sont deux outils qui permettent de programmer en c et assembleur sur votre TI. Vous les trouverez sur le site de leur créateur : http://darkclem.free.fr/
cc est un compilateur de language C.
as est un assembleur, c'est à dire qu'il traduit les instructions assembleur vers le language machine (autrement dit, en binaire) afin qu'elles puissent être exécutées directement par le microprocesseur.

2 - Utilisation de cc

Ce compilateur est assez spécial, étant donné qu'il n'utilise pas la syntaxe habituelle du C, mais la syntaxe K&R, comme cela est expliqué dans le fichier readme.txt fourni avec cc.
Au lieu de déclarer les fonctions de cette façon:

type_retour nom_fonction(type_1 argument_1, type_2 argument_2, ...)

vous les déclarez ainsi:

type_retour nom_fonction(argument_1, argument_2) type_1 argument_1; type_2 argument_2; ...

Maintenant, créons notre premier programme en C:

#include "ams_c" // Fichier où se trouvent les nom des ROM_CALLs et leur index

// Fonction principale
void main()
{
	char screen[3840];
	
	memcpy(screen, 0x4C00L, 3840L); // Sauvegarde l'écran
	ClrScr(); // Efface l'écran
	FontSetSys(1); // F_6x8
	DrawStr(0, 0, "Hello World !", 1); // Affiche "Hello World !" à l'écran
	ngetchx();
	memcpy(0x4C00L, screen, 3840L); // Restaure l'écran
}

Maintenant, il reste à créer le fichier ams_c avec les ROM_CALLs utilisés, sans lequel le programme ne se compilera pas

 nolist
 old_ams
_ngetchx = -81
_ClrScr = -414
_DrawStr = -425
_FontSetSys = -399
_memcpy = -618
 list

L'étape suivante est la compilation. Tout d'abord, le code à compiler doît se trouver dans le fichier csrc. Si vous voulez avoir plusieurs programmes, je vous conseille de les créer dans des fichiers différents et de les copier dans csrc seulement pour la compilation. Cela peut se faire simplement en TI-Basic. Une fois que le code est dans csrc, éxécutez cc:

cc()

S'il y a des erreurs, regardez dans le fichier c_errors pour en connaître l'origine.
Une fois que cc a fini son travail sans erreur, le code assembleur généré se trouve dans le fichier asmsrc. Il faut donc assembler le programme avec as, donc dans le cas de notre programme:

as("asmsrc","hello")

Maintenant, vous pouvez en principe éxécuter le programme hello afin de le tester.

Maintenant, que vous avez tout compris, vous pouvez commencer à programmer avec cc, mais une fois que vous aurez exploré les capacités restreintes du compileur, vous aurez peut-être envie d'ajouter de l'assembleur dans votre code.
Ce n'est pas compliqué du tout. Par exemple, pour décaler les bits d'une variable globale de façon circulaire, vous pourriez faire:

#asm
	rol.l (variable_globale)
#endasm
/!\ Une dernière chose importante à retenir /!\
cc ne connaît pas les paramètres des ROM_CALL, donc si le type d'un paramètre n'est pas explicite, vous devrez le spécifier vous-même afin d'éviter les erreurs. Par exemple, 0x4C00 est un short et 0x4C00L est un long. Vous pouvez aussi utiliser quelque chose de la forme (unsigned long)0x4C00 ou (void *)0x4C00, sachant qu'un long est équivalent à un pointeur.
3 - Utilisation de as

L'assembleur as vous permet d'assembler du code pour le Microprocesseur Motorola 68000. Vous ne pouvez évidemment pas l'utiliser si vous ne connaissez pas l'assembleur du 68000. Le codage avec as est simple, mais il y a certaines règles élémentaires à respecter pour pouvoir compiler sans erreur.
Une ligne contenant une instruction, doit impérativement commencer par un espace, sinon, l'assembleur prendra ça pour une directive.
Par exemple, le squelete basique d'un programme pourrait ressembler à ça:

include "ams"
_main:
 link a6,#-3840
 movem.l d3-d7/a2-a5,-(a7)
 movea.l a7,a5
 move.l 0xc8,a4
 move.l #3840,-(a7)
 move.l #0x4c00,-(a7)
 movea.l a5,-(a7)
 move.l 4*memcpy(a4),a3
 jsr (a3)
 movea.l a5,4(a7)
 move.l #0x4c00,(a7)
 jsr (a3)
 adda.l #12,a7
 movem.l (a7)+,a2-a5/d3-d7
 unlk a6
 rts

Bien sûr, ce programme ne fait rien à par sauvegarder l'écran et le restaurer, mais ce n'est qu'un exemple.

Pour compiler avec as, vous n'avez qu'à faire:

as("nom_fichier_assembleur","nom_programme")

Si il y a des erreurs, vous les trouverez dans le fichier as_error.

4 - Edition des programmes

Comme vous vous en êtes sûrement rendu compte, le code des programmes doit se trouver dans des fichiers texte. Vous pouvez donc utiliser l'éditeur de texte intégré à l'AMS pour cela:

Editeur de texte AMS

Mais si utiliser l'éditeur de texte vous rebute, vous pouvez toujours utiliser side qui se trouve sur le même site que cc et as. Vous trouverez le "mode d'emploi" de side dans le fichier readme.txt fourni avec.

Maintenant, je pense que vous savez tout ce qu'il faut pour utiliser cc et as. Bonne chance pour vos futurs programmes.