Vous n'êtes pas identifié.
voila, j'ai essayé de tester un pixel. Mais ce qui devait etre une simple formalité se transforme en un véritable cauchemar:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <bios.h>
void inv_pixel(unsigned short int x, unsigned short int y)
{
asm push ax;
asm push cx;
asm push dx;
asm mov cx,x;
asm mov dx,y;
asm mov ax,0x1A20;
asm mov es,ax;
asm mov si,0x003f;
asm sub si,dx;
asm sub cx,0x80;
asm not cx;
asm push cx;
asm and cl,0xf8;
asm shl cx,0x03;
asm add si,cx;
asm pop cx;
asm and cl,0x07;
asm mov al,es:[si];
asm ror al,cl;
asm not al;
asm and al,1;
asm mov ah,0xfe;
asm rol ah,cl;
asm and es:[si],ah;
asm mov ah,al;
asm rol ah,cl;
asm or es:[si],ah;
asm pop dx;
asm pop cx;
asm pop ax;
}
char tst_pixel(int X, int Y) //teste un pixel
{
asm {
mov cx,X
mov dx,Y
mov si,0x003f
sub si,dx
sub cx,0x80
not cx
push cx
and cl,0xf8
shl cx,0x03
add si,cx
pop cx
and cl,0x07
mov al,es:[si];
ror al,cl;
and al,1;
}
return _AL;
}
int main()
{inv_pixel(16,5);
tst_pixel(16,5);
gotoxy(1,1);
printf("%d",_AL);
return(0);
}
Le pixel s'allume.
normalement Al devrait me renvoyer la valeur 1.Mais ca , ce serait dans un monde parfait, parceque AL reste egale à 0. :evil:
J'en deduis que la fonction que j'ai pris de graphic.h est buggée :? .
Donc quelqu'un pourrait il me donner un fction operationnel pour tester un pixel :?:
Hors ligne
Prends les fonctions graphiques de TOUCHE 3.45 (grfxfunc.h et grfxfunc.c) elles fonctionnent toute parfaitement et son beaucoup plus simple que celle que t'utilisent.
Hors ligne
Ah dois y avoir un bleme dazns ton code car ces ft ont été remodelées et etstées des millions de fois par Whyp pour marcher, je regarde ça
Hors ligne
Ben voila ta fait comme yass, il faut mettre la valeur de l'ecran dazns Es d'abord =
#include <stdio.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #include <bios.h> void inv_pixel(unsigned short int x, unsigned short int y) { asm push ax; asm push cx; asm push dx; asm mov cx,x; asm mov dx,y; asm mov ax,0x1A20; asm mov es,ax; asm mov si,0x003f; asm sub si,dx; asm sub cx,0x80; asm not cx; asm push cx; asm and cl,0xf8; asm shl cx,0x03; asm add si,cx; asm pop cx; asm and cl,0x07; asm mov al,es:[si]; asm ror al,cl; asm not al; asm and al,1; asm mov ah,0xfe; asm rol ah,cl; asm and es:[si],ah; asm mov ah,al; asm rol ah,cl; asm or es:[si],ah; asm pop dx; asm pop cx; asm pop ax; } char tst_pixel(int X, int Y) //teste un pixel { asm { mov cx,X mov dx,Y mov si,0x003f sub si,dx sub cx,0x80 not cx push cx and cl,0xf8 shl cx,0x03 add si,cx pop cx and cl,0x07 mov al,es:[si]; ror al,cl; and al,1; } return _AL; } int main() {_ES=0x1A20; inv_pixel(16,5); tst_pixel(16,5); gotoxy(1,1); printf("%d",_AL); return(0); }
ça marche (normalement)
Hors ligne
merci bcp, je ne pouvais pas deviner!!!
Hors ligne
Mais si t'avais lu l'aide de graphics.h, t'aurais deviné 8O
Hors ligne
put*** de mer*** de fait chie***.
ca marche pas :cry:
j'ai fais copié coller puis compiler et j'ai toujours la valeur 0 à l'ecran !!!
Hors ligne
Inclu directemnt graphics.h
Hors ligne
marche pas non plus :cry:
la fonction peut ne pas marcher. Pour me montrer que je me debrouille comme un balais, envoie moi un chti exemple tout con que tu auras verifié. merci
Hors ligne
Au fait superna si ca t'interresse j'ai créer des fonctions pour faire du double buffering en mode 3 couleur.....
Hors ligne
just un chti exemple que tu as verifié .... :cry:
Hors ligne
envoie ça, je te les optimiseraient en asm si possible !!
Hors ligne
je croi ke c déja en asm !
Hors ligne