
Vous n'êtes pas identifié.
sinon tu utilises un pointeur far.
unsigned char far* seg = 0x1A20;
unsigned char far* seg = (unsigned char far* ) 0x1A200000;

Hors ligne
@dada66 : pour drawsprite, faut lui donner quels arguments ?
le pointeur far, il sert à quoi dans l'affaire ?
Hors ligne
le pointeur far est nécessaire parce que les données ne sont pas dans le meme segment que le programme, il faut donc spécifier une adresse complète...
Hors ligne
void DrawSprite(unsigned short x, unsigned short y, const void* sprite, unsigned char mask, char height);
x et y no comment!
sprite : pointeur sur un sprite codé en octet/octet
mask : masque d'effaçage (ex:la police ne fait que 4 caractères de larges donc le masque vaut 11110000b soit 0xF0 les '1' correspondent aux données qui seront affichées)
height = hauteur du sprite (5 pour la police)
Hors ligne
"unsigned short x, unsigned short y"
On peut aussi mettre:
"short x, short y" ce qui:
1- est moins long à écrire
2- permet d' écrire du texte en partie en dehors de l' écran -permet des textes défilants-
Hors ligne
dans ce cas tu meme écrire "int x, int y" vu qu'en entier ne fait que 2 octets sur g100
Hors ligne
et puis aussi
#define I int
I x,I y
Hors ligne
heu ... ça devien pas racourci à l'extreme là ?
ça me rapelle un truc que j'ai lu une fois "comment rendre un source illisible"
Hors ligne
Concours du code c le plus illisible :
[URL=http://www.de.ioccc.org/main.html]http://www.de.ioccc.org/main.html[/URL]
le plus marrant c'est de trouver a quoi sert le programme lol
Hors ligne
int loadfont (int zone,char police [])
{
struct memory_zone bf;
search_mem_zone(zone,police,&bf);
font = (unsigned char far*)MK_FP(bf.b_segment, bf.b_inner_offset);
return (0);
}Cette fonction m'en inspire une autre :
unsigned char far* load_memzone_data (int zone,char name [])
{
struct memory_zone bf;
search_mem_zone(zone,name,&bf);
return (unsigned char far*)MK_FP(bf.b_segment, bf.b_inner_offset);
}et puis on fait par exemple : unsigned char far* game_map=load_memzone_data(3,"GAMEMAP");
la syntaxe est elle correcte ?
Hors ligne
ha bah oui effectivement, c'est très resemblant ... je jure que c'était pas intentionel !
ça m'as l'air ok
Hors ligne
Allez voir le sujet sur sprite maker... en attendant qq chose de bcp plus flexible qui arrive 
Hors ligne
j'ai regardé, mais bon ça ne dispense pas mon jeu pour le concours d'une fonction de ce type pour les données autres que les sprites...
Hors ligne
Hors ligne
bon bah ça y est, la fonction est prete !
//textbm 2 : la revenche du octet par octet (il revien et il est pas content) par Bija et Madjar
#include <memzones.c>
unsigned char far* font;
void loadfont (int zone,char police [])
{
struct memory_zone bf;
search_mem_zone(zone,police,&bf);
font = (unsigned char far*)MK_FP(bf.b_segment, bf.b_inner_offset);
}
void printbm (int x,int y,char lettre)
{
char a;
int i;
short adresse_video;
int debut=0,fin=5;
char decalage;
if (y<0) debut=-y; // clipping haut
if (y>63) fin=63-y; // clipping bas
if ( x<0 ) return; //clipping : vérifie que ca ne dépasse pas de l'écran à gauche
for (i=debut;i<fin;i++) //le sprite comporte 5 lignes
{
a= font [lettre*8+i]; //on récupré la ligne du sprite dans a
adresse_video = 1023 - y - ( x / 8 ) *64 - i; //on calcule l'adresse video en mode C3
decalage = x%8; //on calcule le décalage
asm mov si, x
asm mov ax, 0x1A20 //l'adresse du 1er buffer dans ax
asm mov es, ax //pour la mettre dans es
asm xor ax, ax //on met ax à 0
asm mov ah, a //on met la 1ere ligne du sprite dans ah
asm mov cl, decalage //le décalage dans cl
asm shr ax,cl //on décale ax pour avoir la bonne position
asm mov di,adresse_video //l'adresse dans di
asm mov bx,0x0FFF //seuls les 4 premiers bits de ax sont utilisés donc bx est un masque qu'on va appliquer sur l'écran
asm ror bx,cl //on fait une rotation a bx en fonction du décalage
asm cmp si, 120
asm ja gauche
droite:
asm and [es:di-64],bl
asm or [es:di-64],al
gauche:
asm cmp si, 127
asm ja fin
asm and [es:di],bh //on met les bits du sprite à 0 et les autres sont conservés
asm or [es:di],ah //on affiche le sprite avec un or
fin:
}}
void textbm (int x, int y,char texte[])
{
int a;
for (a=0; a<strlen(texte); a++)
printbm(x+5*a,y,texte[a]);
}
void main ()
{
loadfont(3,"FONT");
textbm (0,0,"J'AIME LE POULET !");
textbm (0,6,"J'aime le poulet !");
textbm (0,12,"MADJAR IL EST TROP BEAU");
textbm (0,18,"Madjar il est trop beau");
textbm (0,24,"BIJA EST PAS MAL NON PLUS");
textbm (0,30,"Bija est pas mal non plus");
getch();
}en théorie, elle est po bugué
éclatez vous !
Hors ligne
et voila le fruit d'efforts acharnés ...
enfin si vous avez des questions ou que vous remarquez que notre code est aps optimisé du tout nhésitez pas à ne le dire !!
Hors ligne
bon désolé de réveiller ce post mais j'ai fait la fonction mais en mode DB
si ca intéresse qqn : http://paulhaz.free.fr/casio/textb3.h
et si qqn regarde le code et qu'il trouve comment supprimer la boucle ne C, qu'il me le dise !!
j'avais essayé de faire un lds si,.. pour ensuite copier les données avec des instrctions en assembleur mais ca marchait pas ...
Hors ligne
Il faudrait que tu essaies qq chose comme ca:
void printb (int x,int y,int lettre,int segm)
{
asm {
push ds
mov ax,segm
sub ax,y
sub ax,4
mov es,ax // es = segment corresp a la ligne la plus basse du sprite
mov cx,x
mov di,1022
mov ax,cx
shr ax,3
sub di,ax // es:di -> mot qui va recevoir la ligne en question
and cl,7
mov dx,0xFF00 // masque
ror dx,cl
lds si,font
mov bx,lettre
shl bx,3
add si,bx
dec si // ds:si -> octet precedant le premier octet du sprite
mov bx,5 // 5 lignes a afficher
} boucle: asm { // on balaie le sprite de bas en haut en decrementant bx
xor al,al
mov ah,[ds:si+bx]
ror ax,cl
and [es:di],dx
or [es:di],ax
add di,16 // passe a la ligne suivante
dec bx
jnz boucle // on continue tant que bx!=0
pop ds
}
}:!: non testé 
Hors ligne
j'avais essayé lds si,font mais ca marchait pas
enfin j'essaierais qd meme ton code ....
tiens ca me fait penser que j'ai pas mis de commentaire ..
merci !
Hors ligne
j'ai testé ca marche super sauf pour le masque
c'est
mov dx,0xFFF // masque
(le lien est mis a jour)
Hors ligne
Moui pour le masque en fait j'ai pas trop compris pourquoi c'était 0x0FFF donc j'ai fait comme d'habitude et j'ai mis 0xFF00
Enfin si ca marche avec ta valeur tant mieux 
Hors ligne
j'ai mis 0x0FFF
parceque la ligne du sprite fait 4 pixels de longueur donc faut efacer les 4 pixels correspondants
apres je sais pas comment les autres programmeurs font habituellement !
Hors ligne
Ah oui effectivement, je comprends mieux (je pensais plutot à un masque inverse lol) 
Hors ligne