Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

C et assembleur


Emperor

Messages recommandés

Je voudrais savoir comment on accède directement à la mémoire vidéo en mode texte 80x25 avec djgpp.

J'ai essayé comme ça:

 

unsigned short *pVid;

pVid=0xb800;

pVid[0*(80*2)+0]=0x4105;

 

mais ça marche pas (j'ai une erreur du compilo), donc j'en déduits que je fais n'importe quoi :P

 

Est ce que quelqu'un pourrait aussi m'expliquer la syntaxe de djgpp pour inserer du code en asm dans un code en c? Je connais la syntaxe en asm "pur", mais je pige absolument rien à cette syntaxe djgpp, pleine de % et de $ partout :?

Lien vers le commentaire
Partager sur d’autres sites

J'ai fini par trouver un site sur la syntaxe assembleur de djgpp. Très très mal expliqué mais j'ai fini par m'en sortir quand même :P

Par contre je sais toujours pas comment accèder directement à la mémoire en c... (j'ai bien trouvé quelques sites, mais trop technique pour moi, j'y comprends rien)

Lien vers le commentaire
Partager sur d’autres sites

J'ai essayé, ça ne marche pas non plus, toujours la même erreur:

"assignment to 'short unsigned int *' from 'int' lacks a cast"

Qu'est-ce que ça veut dire :P

Lien vers le commentaire
Partager sur d’autres sites

Argh! Ca marche toujours pas!

J'ai encore la même erreur.

J'ai aussi essayé avec __dpmi_segment_to_descriptor(0xb800), à tout hasard, remplacer les valeurs hexa en binaires et décimales, unsigned short en int, rien n'y fait...

Je comprends pas là :P

En tout cas merci pour ton aide Automne :-(

Lien vers le commentaire
Partager sur d’autres sites

Euh ... je viens de lire ton bout de code, mais la tu y est vraiement pas. Tu n'as pas qu'un probleme de 'casting' mais aussi d'acces a la ram vidéo, qui commence toujours à 0xa000. Donc :

 

unsigned short *pVid;

pVid=0xb800;

pVid[0*(80*2)+0]=0x4105;

 

donne :

 

#include <sys/nearptr.h> // djgpp_nearptr_enable

 

unsigned char *pVid; // et pas short !!

// on récupere un pointeur sur la ram vidéo + on dit a djgpp que l'on veut lire ET ecrire dedans

__djgpp_nearptr_enable();

pVid = (unsigned char *)( 0xa0000 + __djgpp_conventional_base );

/* a éviter ---> pVid[0*(80*2)+0]=0x4105;

Il vaut mieux creer un buffer avec lequel on fait notre tripotage et ensuite copier le bloque dans le pointeur suscité ( memcpy(pVid,buffer_ou_on_ecrit, 2000); par exemple )

Ne pas oublier __djgpp_nearptr_disable() quand on quitte.

 

 

Voili voilou, j'espere que ca va passer mais je te conseille de lire de la doc avant de se lancer dans le code.

Lien vers le commentaire
Partager sur d’autres sites

Ca marche, merci beaucoup :P

Mais je suis pas sûr d'avoir bien compris: c'est parceque djgpp est en mode protegé, et __djgpp_nearptr_enable sert à le "déprotéger", le temps de lire et écrire dans la mémoire, c'est bien ça?

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...