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

C Discussion :

[bios] Lecture de caractère et état du clavier [Non suivi]


Sujet :

C

  1. #1
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut [bios] Lecture de caractère et état du clavier
    Bonjour,

    Je suis entrain d'essayer de ma familiariser avec la programmation systeme et je tente de lancer un programme en C utilisant les fonction BIOS pour lire les caractères tapés ainsi que l'état du clavier.

    Mon premier soucis est que je n'ai pas le fichier d'entête <bios.h>. Alors j'ai récupéré celui sur le site suivant:
    http://www.koders.com/c/fidDD8546189...4E0B72C76.aspx
    Je ne suis pas certain...Est ce le bon? Sinon ou pourrais je le récupérer?

    Surement que les erreurs de compilation proviennent de ce fait, car mon compilo (GNU Gcc) ne reconnait pas le type REGS (l'erreur dit que la taille de la variable de stockage n'est pas connu) et ni les fonctions suivantes ( erreur: première utilisation de cette fonction):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       #define GetKbKey()        ( _bios_keybrd( _KEYBRD_READ ) )
       #define GetKbReady()      ( _bios_keybrd( _KEYBRD_READY ) != 0 )
       #define GetKbEtat()     ( _bios_keybrd( _KEYBRD_SHIFTSTATUS ) )
    De plus j'ai une "implicit declaration" de int86...Sauriez vous d'ou cela pourrait venir?

    Voici mes fichier d'entêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <dos.h>
    #include "bios.h"    //Celui que j'ai rajouté à partir du lien...
    #include <stdio.h>
    #include <conio.h>
    #include <time.h>
    Comme cela, voici la fonction pour vérifier l'état du clavier et lire un caractère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    /**********************************************************************/
    /* GETKEY : Lit un caractŠre et affiche l'‚tat des indicateurs        */
    /* Entr‚e : n‚ant                                                     */
    /* Sortie : Code de la touche frapp‚e                                 */
    /*               < 256 : touche ordinaire                             */
    /*              >= 256 : touche … code ‚tendu                         */
    /**********************************************************************/
     
    unsigned int GetKey( void )
    {
     int Touche,                                      /* Touche retourn‚e */
         Etat;                                         /* Etat du clavier */
     
     do
      {
       Etat = GetKbEtat();                       /* Lit l'‚tat du clavier */
       Insert = NegFlag(Insert, Etat & INS, FC+9, FL, "INSERT");
       Caps = NegFlag(Caps, Etat & CAPL, FC+3, FL, " CAPS ");
       Num = NegFlag(Num, Etat & NUML, FC, FL, "NUM");
      }
     while ( !GetKbReady() );/* Recommence jusqu'… d‚tection d'une frappe */
     
     Touche = GetKbKey();                                /* Lit la touche */
     return ((Touche & 255) == 0) ? (Touche >> 8) + 256 : Touche & 255;
    }
    Je suis sous windows XP et je travaille avec l'EDI code blocks.
    J'espere que vous pourrez m'orienter pour faire tourner ce genre de programme.

    Nicolas

  2. #2
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    C'est pas une bonne idée de recopier un fichier "*.h" venant de "je ne sais où". Surtout qd il s'agit d'un programme quelconque (émulation Psx), donc ne faisant pas partie de l'installation de ton compilateur.

    Quand tu rajoute un fichier d'entête, il te faut obligatoirement avoir le fichier de corps qui va avec ou sinon le fichier de la librairie correspondante.

    Essaye de faire une recherche dans tes répertoires "/include" et "/lib" en rechercant les chaînes de caractères : biosInit, biosShutdown, biosException.

    Si tu trouve quelque chose dis le moi.

  3. #3
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par mchk0123
    Quand tu rajoute un fichier d'entête, il te faut obligatoirement avoir le fichier de corps qui va avec ou sinon le fichier de la librairie correspondante.
    Le fichier bios.c est aussi fourni. Je l'ai ajouté à mon projet.

    Je vais faire une recherche comme tu me dis de ces fonctions, on va voir ce que cela va donner...

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par homeostasie
    Le fichier bios.c est aussi fourni. Je l'ai ajouté à mon projet.
    Encore faut-il qu'il soit écrit en C portable ou en C compris par ton compilateur.

    Ce que tu veux faire se fait en mode 16-bit avec un compilateur ancien genre Borland C 2.x ou 3.x.

    En mode 32-bit, on utilise des fonctions systèmes.

  5. #5
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ce que tu veux faire se fait en mode 16-bit avec un compilateur ancien genre Borland C 2.x ou 3.x.

    En mode 32-bit, on utilise des fonctions systèmes.
    Hummm, d'accord...
    En fait, il est clair que le bouquin que je suis entrain de lire n'est pas d'actualité, de l'époque de Window 95. C'est la bible 6ieme édition, PC programmatoin systeme.

    Je le trouve bien interessant et du code est fourni et ca m'aurait bien plu de pouvoir l'appliquer...

    Le seul moyen est il d'utiliser un de ces anciens compilateurs?
    ou de prendre un bible plus récente....

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par homeostasie
    Le seul moyen est il d'utiliser un de ces anciens compilateurs?
    ou de prendre un bible plus récente....
    Je ne sais pas. La programmation système c'est vague. Tu veux apprendre à écrire un driver ? Pour quel système ?

  7. #7
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Tu veux apprendre à écrire un driver ? Pour quel système ?
    Oui par la même occasion. Je suis actuellement sous Window xp.

    En fait, je suis tombé par hasard sur ce bouquin que je juge très interessant. Un sacré tome sur la programmation systeme PC. Un cd est fourni avec, celui-ci contient des programmes écrits en C, et VC (ainsi que d'autres langages) pour chaque chapitre.. Et ,au fur et à mesure de ma lecture, je souhaitais lancer les programmes concernés pour bien comprendre le mécanisme et avoir une application concrète.

    Je me trouve embeté car j'ai l'impression que je ne peux pas les faire tourner...Du moins, déjà celui concernant le clavier!

  8. #8
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Arf ... je veux pas être méchant, mais pour compiler du code C écrit par quelqu'un d'autre il faut mieux avoir de la bouteille.

    Pourquoi est-ce que tu n'écris pas ton driver depuis 0, en y allant pas à pas ?
    En plus tu as un bon livre sous la main, ça ne devrait pas être difficile. En tout cas surement plus simple que ce que tu essayes de faire.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par homeostasie
    Oui par la même occasion. Je suis actuellement sous Window xp.

    En fait, je suis tombé par hasard sur ce bouquin que je juge très interessant. Un sacré tome sur la programmation systeme PC. Un cd est fourni avec, celui-ci contient des programmes écrits en C, et VC (ainsi que d'autres langages) pour chaque chapitre.. Et ,au fur et à mesure de ma lecture, je souhaitais lancer les programmes concernés pour bien comprendre le mécanisme et avoir une application concrète.

    Je me trouve embeté car j'ai l'impression que je ne peux pas les faire tourner...Du moins, déjà celui concernant le clavier!
    Tu ne peux pas avec les systèmes actuels. Comme je te l'ai dit, il faut un compilateur 16-bit comme Turbo C 2.01 que l'on trouve dans le musée de Borland (community/museum).

    Même avec ça, je ne suis pas sûr que 100% d'une machine MS-DOS 16-bit soit recréée par le système (VM ou virtual machine). Il se pourrait que certains accès au matériel ne fonctionnent pas ou ne donne pas les résultats escomptés. (le système reste prioritaire sur la VM, sinon, c'est le plantage garanti du système, vu que les ressources matérielles sont uniques...)

    La seule façon sûre de procéder est d'installer une machine sous MS-DOS (6.22 est la dernière version connue), ou un FreeDOS (7 ou 8, je ne sais plus) et de travailler à l'ancienne, par exemple avec Turbo C 2.01.

  10. #10
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Oui c'est vrai! Le code est quand même bien détaillé et vraiment compréhensible.

    Sinon j'ai effectué la recherche avec les mots clefs que tu m'as filé, mais rien... Je n'arrive pas à trouver cette librairie... Pourtant, en recherchant sur le net, je vois des programmes avec ce fichier d'entête et utilisant la structure REGS, ainsi que les fonctions bios.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par homeostasie
    Sinon j'ai effectué la recherche avec les mots clefs que tu m'as filé, mais rien... Je n'arrive pas à trouver cette librairie... Pourtant, en recherchant sur le net, je vois des programmes avec ce fichier d'entête et utilisant la structure REGS, ainsi que les fonctions bios.
    Quelle bibliothèque ? Je t'ai dit d'utiliser un compilateur 16-bit. Je parle mandarin ou quoi ?

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mchk0123
    Pourquoi est-ce que tu n'écris pas ton driver depuis 0, en y allant pas à pas ?
    En plus tu as un bon livre sous la main, ça ne devrait pas être difficile. En tout cas surement plus simple que ce que tu essayes de faire.
    Ecrire un driver, c'est pas uniquement savoir manipuler le matériel. C'est surtout s'inscrire dans un processus de développement bien cadré qui permet de construire une extension à tel ou tel système.

  13. #13
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    On est d'accord !

    Utiliser Google pour faire du typedef & #define hunting afin que le code du driver compile c'est tout sauf programmer proprement !

  14. #14
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Je t'ai dit d'utiliser un compilateur 16-bit. Je parle mandarin ou quoi ?
    Sourire, non!

    En fait, on a du poster notre message quasiment en même temps car je n'avais pas lu ton post avant d'y laisser le mien...

    Sinon ton explication est clair. Merci!

    Bonne fin de journée.

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu ne peux pas avec les systèmes actuels. Comme je te l'ai dit, il faut un compilateur 16-bit comme Turbo C 2.01 que l'on trouve dans le musée de Borland (community/museum).

    Même avec ça, je ne suis pas sûr que 100% d'une machine MS-DOS 16-bit soit recréée par le système (VM ou virtual machine). Il se pourrait que certains accès au matériel ne fonctionnent pas ou ne donne pas les résultats escomptés. (le système reste prioritaire sur la VM, sinon, c'est le plantage garanti du système, vu que les ressources matérielles sont uniques...)

    La seule façon sûre de procéder est d'installer une machine sous MS-DOS (6.22 est la dernière version connue), ou un FreeDOS (7 ou 8, je ne sais plus) et de travailler à l'ancienne, par exemple avec Turbo C 2.01.
    La VDM n'a pas accès à tout, certains appels d'interruptions font planter la VDM comme ça, "pouf", sans le moindre message.

    Par contre, une DOSBox est une meilleure machine virtuelle, beaucoup plus fidèle (mais entièrement émulée). Il est possible que ce soit suffisant...

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut ...Autre commande pour lecture de clavier?
    Bojour...

    Je suis nouveau ici... J'ai écrit plusieurs codes source à l'aide d'un ancien compilateur C (Symantec), et plusieurs de ms codes source utilisaient la commande _bios_keybrd pour entrée directe à partir du clavier.

    Maintenant, j'ai un compil. plus récent (Borland C++ 4.5) qui ne reconnaît pas l'instruxion _bios_keybrd.

    Ma question: Y'a-t-îl une autre instruxion qui fait à peu-près la même chose et qui est reconnue par Borland, et si oui, laquelle....

    Merci pour votre attention

    Normnad Martel
    Montréal, Qc.

  17. #17
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Pour programmer sous DOS ... il faut tout d'abord un compilateur pour DOS c'est à dire turbo C 2.01, turbo C++ 1.0, 3.0, Microsoft Quick C, DJGPP, etc. Et donc certainement pas avec gcc, Visual C++, Borland C++ 4.5, 5.02, C++ Builder ou JBuilder 9 ...

    Les compilateurs pour DOS sont normalement fournis avec les en-têtes bios.h et dos.h. Dans dos.h sont définis entre autres les types union REGS et struct SREGS et les fonctions int86 et int86x.

    bios.h contient la déclaration des fonctions bioskey, biosdisk, biosequip ... (les "anciennes" fonctions) et _bios_keybrd, _bios_disk ... (les "nouvelles" fonctions, qui ne sont apparues qu'avec MS C v3.0 si je ne me trompe pas ...)

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Normand_Martel
    Ma question: Y'a-t-îl une autre instruxion qui fait à peu-près la même chose et qui est reconnue par Borland, et si oui, laquelle....
    [MS-DOS] Voir les fonctions de conio : kbhit(), getch() ...

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/01/2009, 14h43
  2. Lecture du caractères UTF-16 fichier
    Par Jamlan dans le forum C
    Réponses: 4
    Dernier message: 27/12/2006, 14h41
  3. Réponses: 1
    Dernier message: 20/03/2006, 09h46
  4. Réponses: 2
    Dernier message: 08/10/2005, 20h08
  5. Avoir l'état du clavier
    Par amireve dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2005, 19h51

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