Vous n'êtes pas identifié.
invgpix(unsigned int X,unsigned int Y) // inverse les couleurs: noir devient blanc et inversement. gris reste gris ! { X=127-X; Y=63-Y; asm { mov ax,0x1A20 mov es,ax mov cx,X mov si,Y shl si,4 mov ch,cl shr cx,3 shr cl,5 xor bx,bx mov bl,ch add si,bx xor bl,bl db 0x0F,0x14,0xC3 xor es:[si],bl mov ax,0x1AA0 mov es,ax xor bl,bl db 0x0F,0x14,0XC3 xor es:[si],bl } return 0; }
Est-ce que quelqu'un pourai modifier cette fonction pour que au-lieu de transformer le blanc en noir et inversement, gris reste gris ca serait blanc devient gris, noir reste noir.
Merci !!!
Hors ligne
invgpix2(unsigned int X,unsigned int Y) // inverse les couleurs: gris devient blanc et inversement. noir reste noir ! { X=127-X; Y=63-Y; asm { mov ax,0x1A20 mov es,ax mov cx,X mov si,Y shl si,4 mov ch,cl shr cx,3 shr cl,5 xor bx,bx mov bl,ch add si,bx xor bl,bl db 0x0F,0x14,0xC3 xor es:[si],bl mov ax,0x1A60 mov es,ax xor bl,bl db 0x0F,0x14,0XC3 xor es:[si],bl } return 0; }
Hors ligne
C'est CA l'ASM ! :?
J'ai franchement aucune chance de l'apprendre !
'sigh' :cry:
Hors ligne
Au fait j'ai pas testé, j'ai pas le temps, mais vu comment la fonction que tu as donnée est construite je pense que ca doit marcher... Chuis cependant pas sur a 100%, faudrait essayer!
Hors ligne
C'est presque ca :
dans la fonction, blanc devient gris, gris devient noir, noir devient gris
Hors ligne
Ouille oui ca s'annonce plus compliqué que j'avais pensé... :?
Hors ligne
c complexe car il faut
si ya un bit sur els 2couches, laisser
si y'en a un sur une des couches, l'enlever, et si y'en a pas, en mettre un
tu cherche la complication jean-fran !
Hors ligne
vopila ta fonction, ça devrai marcher !
invnpix(unsigned int X,unsigned int Y) { /////////////// X=127-X; Y=63-Y; asm { mov ax,0x1A20 mov es,ax mov cx,X mov si,Y shl si,4 mov ch,cl shr cx,3 shr cl,5 xor bx,bx mov bl,ch add si,bx /////////////// mov bl,es:[si] add si,0x800 //je sautte de 2 pages mov bh,es:[si] shr bx,cl and bx,0x11 //g recuperré letat des 2 bits sur les 2 couches //ça va chauffer cmp bx,0x11 je exit jz nobit mov bx,0x11 not bx shl bx,cl and es:[si],bh sud si,0x800 and es:[si],bl jmp exit } nobit: asm{ mov bh,1 shl bh,cl or es:[si],bh } exit: }
dsl julien !
Hors ligne
Essai: ( c'est assez compliqué pour moi, je promets rien! )
invgpix(unsigned int X,unsigned int Y) // inverse les couleurs: noir devient blanc et inversement. gris reste gris ! { X=127-X; Y=63-Y; asm { mov ax,0x1a20 mov es,ax mov ax,0x1AA0 mov ds,ax mov cx,X mov dx,Y mov si,0x003f sub si,dx xor dx,dx sub cx,0x80 not cx push cx and cl,0xf8 shl cx,0x03 add si,cx pop cx and cl,0x07 mov dl,es:[si]; mov al,dl ror al,cl; and al,1; cmp al,0; // teste la valeur du pixel sur 0x1A20 je noir mov dh,ds:[si] // si le pixel est allumé mov al,1 shl al,cl and dh,al or dl,dh // copie le pixel de 0x1AA0 sur 0x1A20 mov es:[si],dl jmp fin noir: mov dl,es:[si]; // sinon on inverse le pixel de 0x1AA0 db 0x0F,0x016,0x0C3 //not1 bl,cl (specifique au nec v20/30) mov es:[si],dl; fin: } }
Hors ligne
merci superna, c'ets un peu chaud pour moi
( je sais pas ce que donnerait celle que je viens de mettre ( deux fois, dsl ) )
edit: j'ai oublié de fermer les crochets avant les labels noir et fin et de les rouvrir apres!
Hors ligne
Et vlan un bug: c'est
noir: mov bl,es:[si]; // sinon on inverse le pixel de 0x1AA0 db 0x0F,0x016,0x0C3 //not1 bl,cl (specifique au nec v20/30) mov es:[si],bl; fin:
à la fin!
Hors ligne
Desoler superna mais il me dit :
Expression syntax : sud si, 0x800 // erreur
Ca veut dire quoi ???
Hors ligne
remplace par
sub si,0x800 //pas sud
Hors ligne
Hors ligne
Hors ligne
#include <casio2.h> #include <prgnuls.h> #include <ascii.h> int main() { gclear(); setDB(); contrast(1,5); print3(1,1,"SALUT"); invRect2(1,1,40,40); getch(); setC3(); contrast(0,5); gclear(); return(0); }
J'utilise la librairie prgnuls.h et j'ai remplacer la fonction invpix par celle de superna.
Regarder ce que ca fait , y a le A qui est a moitier afficher, le U qui l'est pas du tout :?: , et y a aucune couleur qui est modifier :?: :?:
Mais c'est bon ca fait pas planter la calto.
Hors ligne
Avec quelle fonction?
celle de superna ou la mienne?
Essaie avec l'autrre pour voir...
Hors ligne
Julien, avec ta fnction ca fait :
Undefined label fin Undefined label noir
Hors ligne
Oui j'avais dit d'ailleurs que j'avais oublié de fermer les crochets avant de mettre ces mots:
invgpix2(unsigned int X,unsigned int Y) // inverse les couleurs: gris devient blanc et inversement. noir reste noir ! { X=127-X; Y=63-Y; asm { mov ax,0x1a20 mov es,ax mov ax,0x1AA0 mov ds,ax mov cx,X mov dx,Y mov si,0x003f sub si,dx xor dx,dx sub cx,0x80 not cx push cx and cl,0xf8 shl cx,0x03 add si,cx pop cx and cl,0x07 mov dl,es:[si]; mov al,dl ror al,cl; and al,1; cmp al,0; // teste la valeur du pixel sur 0x1A20 je noir mov dh,ds:[si] // si le pixel est allumé mov al,1 shl al,cl and dh,al or dl,dh // copie le pixel de 0x1AA0 sur 0x1A20 mov es:[si],dl jmp fin }; noir: asm{ mov bl,es:[si] // sinon on inverse le pixel de 0x1AA0 db 0x0F,0x016,0x0C3 //not1 bl,cl (specifique au nec v20/30) mov es:[si],bl } fin: }
Hors ligne
Julien, ta fonction elle donne une bouilli de pixel en bas de l'ecran et le texte reste la, toujours noir. :?: :?: :?:
Hors ligne
Sinon il y aurrait pas une autre methode pour le faire, en C :?: :?: :?:
Hors ligne
Ben ecoute le texte il est sensé rester noir puisque tu as demandé une fonction qui inverse gris et blanc, et qui touche pas au noir! Donc si tu écris SALUT en noir, ca devrait rester noir!
Pour les pixels en bas d'écran je sais pas du tout... je m'y connais pas assez en asm pour ca, c'était juste un essai de ma part en attendant que qqn ( comme superna, hum ) donne une meilleure fonction...
Y'a moyen de la faire en C, mais ca va etre extremement lent!
Tu peux le faire avec les fonctions du mode C3, donc celles pour le noir et blanc ( celles ou tu peux donner un numéro de page en parametre ):
void invpix2(unsigned char x, unsigned char y) { if (tstpixel(x,y,0)) setpix(x,y,0,tstpixel(x,y,2)); else invpixel(x,y,2); }
( en supposant que ces fonctions portent bien ce nom la bien sur)
Ca ca devrait aller mais n'espere pas avoir un résultat rapide!
Hors ligne