IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Comment afficher une image en assembleur ?


Sujet :

Assembleur

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut Comment afficher une image en assembleur ?
    Mon probleme est le suivant:
    J'ai une carte vidéo Pci en plus de ma carte geforce 4 AGP . Sous Win98 cette carte (c a d sous le port PCI) avait un driver et windows me fait deux displays dont je peux envoyer mes images à la carte pci. Le probleme est sous windows Xp . Les constructeurs de la carte n'ont pas voulu faire un driver sous xp puisque les logiciels livrées avec la carte marche meme sans driver.
    Lorsque je démarre mon pc comme slot AGP en premier win xp détecte un driver de meme famille mais il me dit qu'il ya un probleme et ne me met pas un deuxieme display.Mais lorsque je démarre le pc comme PCI en premier , cette fois le driver trouvé par xp fonctionne et me met un deuxieme display mais l'affichage n'est pas clair mais existe à cause à mon avis de la résolution car le driver n'a pas le720*576 et ma carte ne fonctionne que avec
    cette résolution. et si je veux utilsé le "vgainit" (un logiciel de la carte) qui initialise la carte il me dit que le device est utilisé.Donc j'ai decide de faire mon propre driver :A l'aide de logiciel windriver de jungo il m'as donne les adressages memoires utilisés :
    BAR0 FC000000 --->FDFFFFFF
    BAR1 FEBE0000 --->FEBEFFFF
    et une intA =17
    Mon question est comment je peux faire une serie de test pour afficher une image en ecrivant les pixels dans la mémoire pour l'afficher correctement?
    Est ce que vous avez une autre idée pour le probleme?laquele?

  2. #2
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Bonjour !

    Pour ce qui est de la mémoire vidéo, elle se trouve à partir de l'adresse 0A000h.
    Mais franchement, je n'ai pas vraiment compris ce que tu veux faire, ton post n'est pas très clair, désolé...

    Si ton but est de programmer quelque chose qui a accès à la mémoire vidéo en assembleur sous Windows et que tu ne connais rien à l'assembleur, il va falloir l'apprendre...

    La meilleure des choses à faire est d'expliquer exactement ce que tu as l'intention de faire, clairement et en donnant ton niveau en assembleur.
    Sans cela je pense qu'il sera difficile de t'aider...

    De plus, si le problème vient plutôt de la carte ou de Windows, je pense que ce sujet serait mieux dans le forum Informatique Générale et Hardware...

    A beintôt !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Mon probleme en faite n'est pas en assembleur.Mon probleme est comment afficher une image directement en ecrivant dans la mémoire ?
    pour pérciser j'ai une image de 720*576*32bits .

  4. #4
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Pour afficher des pixels, il faut écrire directement dans la mémoire vidéo, celle-ci se trouvant à l'adresse 0A000h (adresse de segment, l'adresse physique étant 0A0000h).

    Il y a différents modes vidéos définissant la résolution et le nombre de couleurs.
    Pour les modes 32 bits, les pixels sont codés comme cela :
    1e octet : Inutilisé
    2e octet : Rouge
    3e octet : Vert
    4e octet : Bleu
    (Je crois que c'est dans cet ordre )

    Mais si tu dois faire un driver compatible avec Windows, alors le problème va être dans le fait d'apprendre à faire des drivers sous Windows (qui est en mode protégé bien sûr), donc à trouver des docs là-dessus, comment il organise la mémoire, comment faire des drivers corrects etc.

    A mon avis, ça ne se fera pas en deux jours !
    De plus, je n'ai jamais programmé de driver, donc pour les quetsions techniques là-dessus je risque de ne pas pouvoir te répondre...

    Des docs doivent pouvoir se touver sur

    Salut !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Nico*3-3
    Pour afficher des pixels, il faut écrire directement dans la mémoire vidéo, celle-ci se trouvant à l'adresse 0A000h (adresse de segment, l'adresse physique étant 0A0000h).
    et lorsqu'il ya 2 cartes graphiques l'adresse 0a0000h correspond à quel cartes?

  6. #6
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Salut !

    Là, de toute évidence, cette question précise doit être posée dans le forum Informatique Générale et Hardware, où tu aura beaucoup plus de chances de trouver la réponse...

    Moi, je ne sais pas, mais je pense qu'une seule carte est utilisable à la fois (d'où le problème) mais je ne sais vraiment pas...
    Si je dis n'importe quoi corrigez-moi, je n'y connais rien !

    Les docs des cartes te donnerons peut-être des infos précieuses...
    En attendant, si tu as une question en rapport direct avec l'assembleur, tu peux la poser ici.

    A bientôt !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  7. #7
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Tu devrais regarder du côté de DirectX et OpenGL.
    Je crois que tu tournes en rond : dans ce thread http://www.developpez.net/forums/vie...684490#1684490, Moldavi dit avec raison que la solution du VESA ne marchera pas sous XP.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Tu devrais regarder du côté de DirectX et OpenGL.
    Est ce que je peux utiliser directx sans avoir le driver de la carte!!?
    Si oui comment?
    Si non

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Citation Envoyé par byte
    Est ce que je peux utiliser directx sans avoir le driver de la carte!!?
    Tout dépend de ce que tu veux dire par "avoir". Direct X est une API, qui communique directement avec les drivers. De ton coté, tu n'as qu'à appeller des simples fonctions DirectX, qui feront tout à ta place de manière transparente.

    Il faut télecharger le DirectX SDK sur le site de Microsoft, et être familier avec le C (DirectX est fourni avec une aide pour le C++ et Visual Basic. Absolument rien n'empêche de coder en assembleur, mais il faut retranscrire du C vers l'assembleur certains détails.)

  10. #10
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Je pose la question d'une autre manière :
    Est ce que je peux dessiner une image sans avoir le dc (zone memoire peut etre) avec directx ou opengl? 8)

  11. #11
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Salut !

    Désolé, mais je n'ai pas compris ce que tu appelles DC.
    C'est sûrement un truc tout bête mais bon...
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  12. #12
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    C'est sûrement un truc tout bête mais bon...
    Merci
    Le dc est le device contexte je veux dir ici le hdc c a d le pointeur de la fenetre ou je peux dessiner

  13. #13
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Tu pourrais donner le contexte ?
    D'après ce que j'ai deviné, tu as une fenêtre...

    J'avoue que là c'est franchement pas clair, donc si tu veux qu'on essaie de t'aider, il va falloir éclaircir (pas avec une ou deux phrases) ce que tu veux faire :
    - L'OS (Win XP d'après ce que j'ai compris)
    - Ton hardware (j'ai rien compris à ton histoire de cartes)
    - Si tu comptes utiliser DirectX (je crois que tu n'as pas trop le choix)
    - Qu'est-ce que tu entends par "Windows me fait un display"
    - Le contexte (une fenêtre ?!? Un driver c'est plutôt transparent en général)
    - Et tout ce que j'ai oublié (que veux-tu que ton driver fasse, par quels moyens précis etc.)

    Nous ne sommes (malheureusement) pas télépathes.
    Merci.
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  14. #14
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Je crois que je commence à percuter

    Tu veux à la fois créer un driver pour ta carte sous XP et créer un programme pour le tester. Est-ce que j'ai bien compris ?

    - Pour créer le driver, il te faut le Windows XP DDK (et beaucoup de courage);
    - Pour le programme à tester, il te faut l'API DirectX ou OpenGL.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Direct X n'a pas besoin du DC.

  16. #16
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Direct X n'a pas besoin du DC.
    Tu peux me dire à partir de quoi je crée ma surface.
    Et est ce que je peux créer ma surface à partir d'un adressage memoire de la carte graphique.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Il faut créer une interface DirectX, qui nécessite juste le Handle de ton application (retourné par GetModuleHandle ou donné en paramètre dans WinMain en C/C++) et le Handle d'une fenêtre. Cette fenêtre, tu la crées à l'occasion quitte à la choisir invisible : c'est juste l'existance de l'objet qui importe.

    Ensuite, l'Interface IDirectDraw7 (ou autre version) te permet de créer des surfaces, avec possibilité de spécifier qu'elle existera en mémoire système ou mémoire vidéo. Tu peux également désigner la surface "Primaire", pour travailler directement avec l'écran.

  18. #18
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Cette fenêtre, tu la crées à l'occasion quitte à la choisir invisible : c'est juste l'existance de l'objet qui importe.
    Tu peux donner un exemple de code ?
    surtout la procedure de creation de la surface.
    Merci

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Des bouts de code utilisé dans mon émulateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    LPDIRECTDRAW7 DirectDrawInterface = NULL;
    LPDIRECTDRAWSURFACE7 SurfacePrimaire = NULL;
    DDSURFACEDESC2 ddsd;
     
    DirectDrawCreateEx(NULL, (void**)&DirectDrawInterface, IID_IDirectDraw7, NULL));
    DirectDrawInterface->SetCooperativeLevel(MainWindow, DDSCL_NORMAL));
     
    ZeroMemory(&ddsd,sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_CAPS;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
     
    DirectDrawInterface->CreateSurface(&ddsd, &SurfacePrimaire, NULL));

    En vrai, ce n'est pas organisé comme ça, mais, ca peut donner l'idée.

  20. #20
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 27
    Points : 8
    Points
    8
    Par défaut
    Où sera créée cette surface (SurfacePrimaire).
    ddsd c'est quoi ?
    C'est ça l'adressage memoire? explique mieux stp
    (je programme en delphi maintenant mais si tu m'explique de plus j'attaquerai le c)

Discussions similaires

  1. comment afficher une image, et faire une interface?
    Par noobiewan kenobi dans le forum Java ME
    Réponses: 7
    Dernier message: 03/08/2005, 11h30
  2. Comment afficher une image à la volée via http ?
    Par reg11 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 30/06/2005, 09h44
  3. [.NET][CR] Comment afficher une image blob dans un état ?
    Par moucrack dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/06/2005, 13h49
  4. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  5. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo