1

alors, je veux compiler un fichier C qui appelle un fichier .asm qui lui meme contient des incbin, le tout est de compiler ça sous tigcc et c pas gagné triso

mon .asm ressemble à ça :
 section ".data"

      xdef  Matrix1
      xdef  Matrix2

Matrix1 incbin "map011.lvl"
Matrix2 incbin "map012.lvl"

                        end


et mon .c ressemble à ça :
//#define USE_TI89              // Compile for TI-89
#define USE_TI92PLUS          // Compile for TI-92 Plus
#define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization
#define SAVE_SCREEN        // Save/Restore LCD Contents
#include <tigcclib.h>         // Include All Header Files

#include "map01.h"
#include "map01.asm"

extern short Matrix1[];
extern short Matrix2[];

void f_write(char **file, void *donnee, unsigned int size)
{
	memcpy(*file, donnee , size);     // copie 'size' octets d'une adresse dans le fichier
	*file += size;                     // on va 'size' octets + loin pour sauter l'espace pris par cette donnée et acceder aux nveaux elements
}


/* fonction qui va créer notre fichier et sotcker nos données dedant en appelant f_write*/
char create_map(void)
{

  char ext[]= {0,'m','a','p', 0 ,OTH_TAG}; // code de l'extension


	int taille_donnees	= 6 /* extension*/ 
											+ 8*sizeof(short)
											+ 2*size_x/16*size_y/16; // octets

	SYM_ENTRY *sym;                // pointeur SYM_ENTRY, car il va en falloir un :-DD
  char *pt_file;                 // pointeur vers l'emplacement du fichier qu'on va creer

	HSYM hsym1 = SymAdd (SYMSTR((char *)MapName)); // crée son nom  "Map01" ds le Var Link, à toi de changer le nom ensuite

  if (!*(long *)&hsym1)        // vérifie qu'on a pu le creer, que tout s'est bien passé
    return 1;                  // sinon on retourne 1, synonyme d'echec

  sym = DerefSym(hsym1);       // avec ça on obtient l'adresse de ce num qu'on stocke ds une structure

  if(!(sym->handle = HeapAlloc(2+ taille_donnees +6))) // donne (en allouant), la taille du fichier, 2 1ers octets qui servent  la taille, nos données, et 6 octets pour l'extension, et vérifie que tt s'est bien passé
    return 2;

  if(!(pt_file = (char *)HeapDeref (sym->handle))) // avec ça, on aura l'adresse du fichier pur, dans un pointeur bien classique, et on vérifie que tt s'est bien passé
    return 3;

	f_write(&pt_file, &taille_donnees, sizeof(int)); // copie la taille du fichier , cf ARCHITECTURE TIOS

	/* copie de toutes nos données*/
	f_write(&pt_file, &size_x		, sizeof(short)	);     // stocke la structure qui donne toutes les infos pour la map
	f_write(&pt_file, &size_y		, sizeof(short)	);     // stocke la structure qui donne toutes les infos pour la map
	f_write(&pt_file, &vill			, sizeof(short)	);     // stocke la structure qui donne toutes les infos pour la map
	f_write(&pt_file, &num_vill	, sizeof(short)	);
	f_write(&pt_file, &mons			, sizeof(short)	);
	f_write(&pt_file, &num_mons	, sizeof(short)	);
	f_write(&pt_file, &event		, sizeof(short)	);
	f_write(&pt_file, &gfx_file	, sizeof(short)	);
	
	
	memcpy(pt_file, ext, 6); // copie l'extension


  return 0;
}


void _main(void)
{
	int err;
	clrscr();
	if(err=create_map()) // crée la map
		printf("Création échec %d",err);
	else
	  printf("Création succès");
	ngetchx();

}


j'ai inclus le .asm ds les A68K asm files et les *.lvl ds les other files, mais voilà, g l'erreur de compilation "Map01.asm: No such file or directory"

alors soit je suis pas doué, soit tigcc a un bug
warau kado niha fuku kitaru.

#trifouet#!!!

2

new : j'ai fait la fameuse technique conne qui consiste à mettre le .asm ds les includes de tigcc, maintenant il me balance une parse error a la 1ere ligne, et comme je sais qu'il n'y a pas de fautes, c que g du mal m'y prendre avec tigcc

g essayé de compiler à la main, avec une version plus ancienne ça marchait mais plus maintenant sad
warau kado niha fuku kitaru.

#trifouet#!!!

3

rahhhhhhhhhhhhh la preuve en images !!!!!!!!!!! je comprends plus rien !!!

tigcc.jpg
warau kado niha fuku kitaru.

#trifouet#!!!

4

je pense que si tu résolvais ton prob dans map01.asm, ca arragerait tout !

5

je veux bien mais comment ? (le source est post 0)
warau kado niha fuku kitaru.

#trifouet#!!!

6

Il ne faut pas mettre le #include "map01.asm".
Mais il faut qu'à la compilation il soit quand même pris en compte, mais je n'utilise jamais la ligne de commande pour compiler donc je ne sais pas du tout comment il faut s'y prendre.

Tu devrais utiliser l'IDE, il fait ça tout seul : tu as juste à faire Project -> Add et tu sélectionnes tes fichier .asm et tu cliques sur Make ou Build et tout est compilé smile

7

pas besoin de mettre #include "fichier.asm"
c koi ton fichier map01.h parce que moi G ca comme erreur + des variables non définies comme size_x, size_y (ki doivent etre declaré dans map01.h je suppose) + les .lvl qui sont pas inclu

a part ca je vois pas pkoi ca marcherai pas!

8

enfait, tu inclus ton fichier .asm dans le projet et c'est tout, tu déclares aussi en extern comme tu as fait.
Et il me semble qu'il ne faut pas mettre end ...

9

exact.
end n'est pas obligatoire, la mettre ou pas ne change rien

10

testons...

erf, vous avez raison, il ne faut pas l'inclure ds le fichier C, c'est vraiment mal expliqué ce genre de chose...sad

merci bien !!
warau kado niha fuku kitaru.

#trifouet#!!!

11

surtout pas si le fichier asm est inclus!
d'ailleurs il n'a pas à être inclus, il doit juste ajouté au projet, et si tu n'as pas l'IDE, tu dois l'assembler et linker le fichier objet avec celui du programme en C
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

12

solid a écrit :
erf, vous avez raison, il ne faut pas l'inclure ds le fichier C, c'est vraiment mal expliqué ce genre de chose...sad
Je trouve aussi. Au début, j'ai un peu galéré aussi. J'ai posé les mêmes questions que toi et Kevin Kofler m'a tout expliqué smile

13

en gros, c n'imp' smile

14

moi je commence à m'y faire, mais les pbs que je rencontre c en C grin
Cours et tutos Asm: http://membres.lycos.fr/sirryl

15

Il ne faut pas s'étonner d'avoir un "parse error" si tu demandes à GCC de compiler un fichier map01.asm... Et c'est ce que tu fais en mettant #include ".asm" dans ton fichier C!

Et puis, pas la peine de faire un fichier .asm juste pour un incbin. Tu peux:
a) utiliser ttbin2hex ou
b) mettre tout simplement:
asm("Matrix1: .incbin \"map011.lvl\"
Matrix2: .incbin \"map012.lvl\"");
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

ah j'avais en effet pensé aux asm(), merci pour l'astuce wink
warau kado niha fuku kitaru.

#trifouet#!!!